[
  {
    "path": ".github/workflows/esp32.yml",
    "content": "name: ESP32\r\n\r\non:\r\n  push:\r\n    branches:\r\n      - master\r\n\r\n  pull_request:\r\n    branches:\r\n      - master\r\n\r\njobs:\r\n  build:\r\n    runs-on: ubuntu-latest\r\n    strategy:\r\n      max-parallel: 1\r\n      matrix:\r\n        python-version: [3.9]\r\n    steps:\r\n      - uses: actions/checkout@v1\r\n      - name: Set up Python ${{ matrix.python-version }}\r\n        uses: actions/setup-python@v1\r\n        with:\r\n          python-version: ${{ matrix.python-version }}\r\n      - name: Install dependencies\r\n        run: |\r\n          python -m pip install --upgrade pip\r\n          pip install -U platformio\r\n          platformio update\r\n      - name: Build test\r\n        run: |\r\n          mv examples/enigmaiot_led_flasher/enigmaiot_led_flasher.ino examples/enigmaiot_led_flasher/enigmaiot_led_flasher.cpp\r\n          mv examples/enigmaiot_node/enigmaiot_node.ino examples/enigmaiot_node/enigmaiot_node.cpp\r\n          mv examples/enigmaiot_node_msgpack/enigmaiot_node_msgpack.ino examples/enigmaiot_node_msgpack/enigmaiot_node_msgpack.cpp\r\n          mv examples/enigmaiot_node_nonsleepy/enigmaiot_node_nonsleepy.ino examples/enigmaiot_node_nonsleepy/enigmaiot_node_nonsleepy.cpp\r\n          mv examples/EnigmaIOT-Button-Controller/EnigmaIOT-Button-Controller.ino examples/EnigmaIOT-Button-Controller/EnigmaIOT-Button-Controller.cpp\r\n          mv examples/EnigmaIOT-DashButton-Controller/EnigmaIOT-DashButton-Controller.ino examples/EnigmaIOT-DashButton-Controller/EnigmaIOT-DashButton-Controller.cpp\r\n          mv examples/EnigmaIOTGatewayDummy/EnigmaIOTGatewayDummy.ino examples/EnigmaIOTGatewayDummy/EnigmaIOTGatewayDummy.cpp\r\n          mv examples/EnigmaIOTGatewayMQTT/EnigmaIOTGatewayMQTT.ino examples/EnigmaIOTGatewayMQTT/EnigmaIOTGatewayMQTT.cpp\r\n          mv examples/EnigmaIOT-Json-Controller-Template/EnigmaIOT-Json-Controller-Template.ino examples/EnigmaIOT-Json-Controller-Template/EnigmaIOT-Json-Controller-Template.cpp\r\n          mv examples/EnigmaIOT-Led-Controller/EnigmaIOT-Led-Controller.ino examples/EnigmaIOT-Led-Controller/EnigmaIOT-Led-Controller.cpp\r\n          mv examples/EnigmaIOT-Sensor-Controller/EnigmaIOT-Sensor-Controller.ino examples/EnigmaIOT-Sensor-Controller/EnigmaIOT-Sensor-Controller.cpp\r\n          mv examples/EnigmaIOT-SmartSwitch-Controller/EnigmaIOT-SmartSwitch-Controller.ino examples/EnigmaIOT-SmartSwitch-Controller/EnigmaIOT-SmartSwitch-Controller.cpp\r\n          pio run -e esp32-MQTTGateway-SSL -e esp32-MQTTGateway-NoSSL -e esp32-DummyGateway -e esp32-Node -e esp32-NodeLedFlasher -e esp32-NodeMsgPack -e esp32-NodeNonSleepy -e esp32-ButtonController -e esp32-DashButtonController -e esp32-JsonControllerTemplate -e esp32-LedController -e esp32-SensorController -e esp32-SmartSwitchController\r\n      \r\n"
  },
  {
    "path": ".github/workflows/esp8266.yml",
    "content": "name: ESP8266\r\n\r\non:\r\n  push:\r\n    branches:\r\n      - master\r\n\r\n  pull_request:\r\n    branches:\r\n      - master\r\n\r\njobs:\r\n  build:\r\n    runs-on: ubuntu-latest\r\n    strategy:\r\n      max-parallel: 1\r\n      matrix:\r\n        python-version: [3.9]\r\n    steps:\r\n      - uses: actions/checkout@v1\r\n      - name: Set up Python ${{ matrix.python-version }}\r\n        uses: actions/setup-python@v1\r\n        with:\r\n          python-version: ${{ matrix.python-version }}\r\n      - name: Install dependencies\r\n        run: |\r\n          python -m pip install --upgrade pip\r\n          pip install -U platformio\r\n          platformio update\r\n      - name: Build test\r\n        run: |\r\n          mv examples/enigmaiot_led_flasher/enigmaiot_led_flasher.ino examples/enigmaiot_led_flasher/enigmaiot_led_flasher.cpp\r\n          mv examples/enigmaiot_node/enigmaiot_node.ino examples/enigmaiot_node/enigmaiot_node.cpp\r\n          mv examples/enigmaiot_node_msgpack/enigmaiot_node_msgpack.ino examples/enigmaiot_node_msgpack/enigmaiot_node_msgpack.cpp\r\n          mv examples/enigmaiot_node_nonsleepy/enigmaiot_node_nonsleepy.ino examples/enigmaiot_node_nonsleepy/enigmaiot_node_nonsleepy.cpp\r\n          mv examples/EnigmaIOT-Button-Controller/EnigmaIOT-Button-Controller.ino examples/EnigmaIOT-Button-Controller/EnigmaIOT-Button-Controller.cpp\r\n          mv examples/EnigmaIOT-DashButton-Controller/EnigmaIOT-DashButton-Controller.ino examples/EnigmaIOT-DashButton-Controller/EnigmaIOT-DashButton-Controller.cpp\r\n          mv examples/EnigmaIOTGatewayDummy/EnigmaIOTGatewayDummy.ino examples/EnigmaIOTGatewayDummy/EnigmaIOTGatewayDummy.cpp\r\n          mv examples/EnigmaIOTGatewayMQTT/EnigmaIOTGatewayMQTT.ino examples/EnigmaIOTGatewayMQTT/EnigmaIOTGatewayMQTT.cpp\r\n          mv examples/EnigmaIOT-Json-Controller-Template/EnigmaIOT-Json-Controller-Template.ino examples/EnigmaIOT-Json-Controller-Template/EnigmaIOT-Json-Controller-Template.cpp\r\n          mv examples/EnigmaIOT-Led-Controller/EnigmaIOT-Led-Controller.ino examples/EnigmaIOT-Led-Controller/EnigmaIOT-Led-Controller.cpp\r\n          mv examples/EnigmaIOT-Sensor-Controller/EnigmaIOT-Sensor-Controller.ino examples/EnigmaIOT-Sensor-Controller/EnigmaIOT-Sensor-Controller.cpp\r\n          mv examples/EnigmaIOT-SmartSwitch-Controller/EnigmaIOT-SmartSwitch-Controller.ino examples/EnigmaIOT-SmartSwitch-Controller/EnigmaIOT-SmartSwitch-Controller.cpp\r\n          pio run -e esp8266-MQTTGateway -e esp8266-DummyGateway -e esp8266-Node -e esp8266-NodeLedFlasher -e esp8266-NodeMsgPack -e esp8266-NodeNonSleepy -e esp8266-ButtonController -e esp8266-DashButtonController -e esp8266-JsonControllerTemplate -e esp8266-LedController -e esp8266-SensorController -e esp8266-SmartSwitchController\r\n      \r\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "content": "name: Notification\n\non: \n  release:\n    types: [published]\n    \n\njobs:\n\n  build:\n    name: Build\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@master\n    - name: send custom message with args\n      uses: appleboy/telegram-action@master\n      with:\n        to: ${{ secrets.TELEGRAM_TO }}\n        token: ${{ secrets.TELEGRAM_TOKEN }}\n        args: The ${{ github.event_name }} event triggered first step.\n"
  },
  {
    "path": ".gitignore",
    "content": "**~\n*.bin\nEnigmaIoTUpdate/.idea/\nEnigmaIoTUpdate/venv/\nDS18B20/\n*.txt\nexamples/enigmaiot_sensor/enigmaiot_sensor.ino.rej\nLibraries/\n.pio\n.vscode\n**/config.json\n*.json\n.vs/\n*.sln\n*.vcxproj\n*.filters\n*.user\n**/__vm/\n**/Debug/\n**/Release/\ninclude/\nlib/\ntest/\n"
  },
  {
    "path": ".travis.yml",
    "content": "# Continuous Integration (CI) is the practice, in software\n# engineering, of merging all developer working copies with a shared mainline\n# several times a day < https://docs.platformio.org/page/ci/index.html >\n#\n# Documentation:\n#\n# * Travis CI Embedded Builds with PlatformIO\n#   < https://docs.travis-ci.com/user/integration/platformio/ >\n#\n# * PlatformIO integration with Travis CI\n#   < https://docs.platformio.org/page/ci/travis.html >\n#\n# * User Guide for `platformio ci` command\n#   < https://docs.platformio.org/page/userguide/cmd_ci.html >\n#\n#\n# Please choose one of the following templates (proposed below) and uncomment\n# it (remove \"# \" before each line) or use own configuration according to the\n# Travis CI documentation (see above).\n#\n\n\n#\n# Template #1: General project. Test it using existing `platformio.ini`.\n#\n\n# language: python\n# python:\n#     - \"2.7\"\n#\n# sudo: false\n# cache:\n#     directories:\n#         - \"~/.platformio\"\n#\n# install:\n#     - pip install -U platformio\n#     - platformio update\n#\n# script:\n#     - platformio run\n\n\n#\n# Template #2: The project is intended to be used as a library with examples.\n#\n\n# language: python\n# python:\n#     - \"2.7\"\n#\n# sudo: false\n# cache:\n#     directories:\n#         - \"~/.platformio\"\n#\n# env:\n#     - PLATFORMIO_CI_SRC=path/to/test/file.c\n#     - PLATFORMIO_CI_SRC=examples/file.ino\n#     - PLATFORMIO_CI_SRC=path/to/test/directory\n#\n# install:\n#     - pip install -U platformio\n#     - platformio update\n#\n# script:\n#     - platformio ci --lib=\".\" --board=ID_1 --board=ID_2 --board=ID_N\n"
  },
  {
    "path": "Doxyfile",
    "content": "# Doxyfile 1.8.20\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) for a project.\n#\n# All text after a double hash (##) is considered a comment and is placed in\n# front of the TAG it is preceding.\n#\n# All text after a single hash (#) is considered a comment and will be ignored.\n# The format is:\n# TAG = value [value, ...]\n# For lists, items can also be appended using:\n# TAG += value [value, ...]\n# Values that contain spaces should be placed between quotes (\\\" \\\").\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\n\n# This tag specifies the encoding used for all characters in the configuration\n# file that follow. The default is UTF-8 which is also the encoding used for all\n# text before the first occurrence of this tag. Doxygen uses libiconv (or the\n# iconv built into libc) for the transcoding. See\n# https://www.gnu.org/software/libiconv/ for the list of possible encodings.\n# The default value is: UTF-8.\n\nDOXYFILE_ENCODING      = UTF-8\n\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\n# double-quotes, unless you are using Doxywizard) that should identify the\n# project for which the documentation is generated. This name is used in the\n# title of most generated pages and in a few other places.\n# The default value is: My Project.\n\nPROJECT_NAME           = EnigmaIOT\n\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. This\n# could be handy for archiving the generated documentation or if some version\n# control system is used.\n\nPROJECT_NUMBER         = 0.9.8\n\n# Using the PROJECT_BRIEF tag one can provide an optional one line description\n# for a project that appears at the top of each page and should give viewer a\n# quick idea about the purpose of the project. Keep the description short.\n\nPROJECT_BRIEF          = \"Secure sensor and gateway platform based on ESP8266 and ESP32\"\n\n# With the PROJECT_LOGO tag one can specify a logo or an icon that is included\n# in the documentation. The maximum height of the logo should not exceed 55\n# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy\n# the logo to the output directory.\n\nPROJECT_LOGO           = \"logo/logo text inside.svg\"\n\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\n# into which the generated documentation will be written. If a relative path is\n# entered, it will be relative to the location where doxygen was started. If\n# left blank the current directory will be used.\n\nOUTPUT_DIRECTORY       = docs\n\n# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-\n# directories (in 2 levels) under the output directory of each output format and\n# will distribute the generated files over these directories. Enabling this\n# option can be useful when feeding doxygen a huge amount of source files, where\n# putting all generated files in the same directory would otherwise causes\n# performance problems for the file system.\n# The default value is: NO.\n\nCREATE_SUBDIRS         = NO\n\n# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII\n# characters to appear in the names of generated files. If set to NO, non-ASCII\n# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode\n# U+3044.\n# The default value is: NO.\n\nALLOW_UNICODE_NAMES    = NO\n\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all\n# documentation generated by doxygen is written. Doxygen will use this\n# information to generate all constant output in the proper language.\n# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,\n# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),\n# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,\n# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),\n# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,\n# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,\n# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,\n# Ukrainian and Vietnamese.\n# The default value is: English.\n\nOUTPUT_LANGUAGE        = English\n\n# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all\n# documentation generated by doxygen is written. Doxygen will use this\n# information to generate all generated output in the proper direction.\n# Possible values are: None, LTR, RTL and Context.\n# The default value is: None.\n\nOUTPUT_TEXT_DIRECTION  = None\n\n# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member\n# descriptions after the members that are listed in the file and class\n# documentation (similar to Javadoc). Set to NO to disable this.\n# The default value is: YES.\n\nBRIEF_MEMBER_DESC      = YES\n\n# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief\n# description of a member or function before the detailed description\n#\n# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n# brief descriptions will be completely suppressed.\n# The default value is: YES.\n\nREPEAT_BRIEF           = YES\n\n# This tag implements a quasi-intelligent brief description abbreviator that is\n# used to form the text in various listings. Each string in this list, if found\n# as the leading text of the brief description, will be stripped from the text\n# and the result, after processing the whole list, is used as the annotated\n# text. Otherwise, the brief description is used as-is. If left blank, the\n# following values are used ($name is automatically replaced with the name of\n# the entity):The $name class, The $name widget, The $name file, is, provides,\n# specifies, contains, represents, a, an and the.\n\nABBREVIATE_BRIEF       = \"The $name class\" \\\n                         \"The $name widget\" \\\n                         \"The $name file\" \\\n                         is \\\n                         provides \\\n                         specifies \\\n                         contains \\\n                         represents \\\n                         a \\\n                         an \\\n                         the\n\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n# doxygen will generate a detailed section even if there is only a brief\n# description.\n# The default value is: NO.\n\nALWAYS_DETAILED_SEC    = NO\n\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n# inherited members of a class in the documentation of that class as if those\n# members were ordinary class members. Constructors, destructors and assignment\n# operators of the base classes will not be shown.\n# The default value is: NO.\n\nINLINE_INHERITED_MEMB  = NO\n\n# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path\n# before files name in the file list and in the header files. If set to NO the\n# shortest path that makes the file name unique will be used\n# The default value is: YES.\n\nFULL_PATH_NAMES        = YES\n\n# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\n# Stripping is only done if one of the specified strings matches the left-hand\n# part of the path. The tag can be used to show relative paths in the file list.\n# If left blank the directory from which doxygen is run is used as the path to\n# strip.\n#\n# Note that you can specify absolute paths here, but also relative paths, which\n# will be relative from the directory where doxygen is started.\n# This tag requires that the tag FULL_PATH_NAMES is set to YES.\n\nSTRIP_FROM_PATH        =\n\n# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\n# path mentioned in the documentation of a class, which tells the reader which\n# header file to include in order to use a class. If left blank only the name of\n# the header file containing the class definition is used. Otherwise one should\n# specify the list of include paths that are normally passed to the compiler\n# using the -I flag.\n\nSTRIP_FROM_INC_PATH    =\n\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\n# less readable) file names. This can be useful is your file systems doesn't\n# support long names like on DOS, Mac, or CD-ROM.\n# The default value is: NO.\n\nSHORT_NAMES            = NO\n\n# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\n# first line (until the first dot) of a Javadoc-style comment as the brief\n# description. If set to NO, the Javadoc-style will behave just like regular Qt-\n# style comments (thus requiring an explicit @brief command for a brief\n# description.)\n# The default value is: NO.\n\nJAVADOC_AUTOBRIEF      = NO\n\n# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line\n# such as\n# /***************\n# as being the beginning of a Javadoc-style comment \"banner\". If set to NO, the\n# Javadoc-style will behave just like regular comments and it will not be\n# interpreted by doxygen.\n# The default value is: NO.\n\nJAVADOC_BANNER         = NO\n\n# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\n# line (until the first dot) of a Qt-style comment as the brief description. If\n# set to NO, the Qt-style will behave just like regular Qt-style comments (thus\n# requiring an explicit \\brief command for a brief description.)\n# The default value is: NO.\n\nQT_AUTOBRIEF           = NO\n\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\n# multi-line C++ special comment block (i.e. a block of //! or /// comments) as\n# a brief description. This used to be the default behavior. The new default is\n# to treat a multi-line C++ comment block as a detailed description. Set this\n# tag to YES if you prefer the old behavior instead.\n#\n# Note that setting this tag to YES also means that rational rose comments are\n# not recognized any more.\n# The default value is: NO.\n\nMULTILINE_CPP_IS_BRIEF = NO\n\n# By default Python docstrings are displayed as preformatted text and doxygen's\n# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the\n# doxygen's special commands can be used and the contents of the docstring\n# documentation blocks is shown as doxygen documentation.\n# The default value is: YES.\n\nPYTHON_DOCSTRING       = YES\n\n# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\n# documentation from any documented member that it re-implements.\n# The default value is: YES.\n\nINHERIT_DOCS           = YES\n\n# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new\n# page for each member. If set to NO, the documentation of a member will be part\n# of the file/class/namespace that contains it.\n# The default value is: NO.\n\nSEPARATE_MEMBER_PAGES  = NO\n\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\n# uses this value to replace tabs by spaces in code fragments.\n# Minimum value: 1, maximum value: 16, default value: 4.\n\nTAB_SIZE               = 4\n\n# This tag can be used to specify a number of aliases that act as commands in\n# the documentation. An alias has the form:\n# name=value\n# For example adding\n# \"sideeffect=@par Side Effects:\\n\"\n# will allow you to put the command \\sideeffect (or @sideeffect) in the\n# documentation, which will result in a user-defined paragraph with heading\n# \"Side Effects:\". You can put \\n's in the value part of an alias to insert\n# newlines (in the resulting output). You can put ^^ in the value part of an\n# alias to insert a newline as if a physical newline was in the original file.\n# When you need a literal { or } or , in the value part of an alias you have to\n# escape them by means of a backslash (\\), this can lead to conflicts with the\n# commands \\{ and \\} for these it is advised to use the version @{ and @} or use\n# a double escape (\\\\{ and \\\\})\n\nALIASES                =\n\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\n# only. Doxygen will then generate output that is more tailored for C. For\n# instance, some of the names that are used will be different. The list of all\n# members will be omitted, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_FOR_C  = NO\n\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\n# Python sources only. Doxygen will then generate output that is more tailored\n# for that language. For instance, namespaces will be presented as packages,\n# qualified scopes will look different, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_JAVA   = NO\n\n# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n# sources. Doxygen will then generate output that is tailored for Fortran.\n# The default value is: NO.\n\nOPTIMIZE_FOR_FORTRAN   = NO\n\n# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n# sources. Doxygen will then generate output that is tailored for VHDL.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_VHDL   = NO\n\n# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice\n# sources only. Doxygen will then generate output that is more tailored for that\n# language. For instance, namespaces will be presented as modules, types will be\n# separated into more groups, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_SLICE  = NO\n\n# Doxygen selects the parser to use depending on the extension of the files it\n# parses. With this tag you can assign which parser to use for a given\n# extension. Doxygen has a built-in mapping, but you can override or extend it\n# using this tag. The format is ext=language, where ext is a file extension, and\n# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,\n# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL,\n# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:\n# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser\n# tries to guess whether the code is fixed or free formatted code, this is the\n# default for Fortran type files). For instance to make doxygen treat .inc files\n# as Fortran files (default is PHP), and .f files as C (default is Fortran),\n# use: inc=Fortran f=C.\n#\n# Note: For files without extension you can use no_extension as a placeholder.\n#\n# Note that for custom extensions you also need to set FILE_PATTERNS otherwise\n# the files are not read by doxygen.\n\nEXTENSION_MAPPING      = ino=C++\n\n# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\n# according to the Markdown format, which allows for more readable\n# documentation. See https://daringfireball.net/projects/markdown/ for details.\n# The output of markdown processing is further processed by doxygen, so you can\n# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\n# case of backward compatibilities issues.\n# The default value is: YES.\n\nMARKDOWN_SUPPORT       = YES\n\n# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up\n# to that level are automatically included in the table of contents, even if\n# they do not have an id attribute.\n# Note: This feature currently applies only to Markdown headings.\n# Minimum value: 0, maximum value: 99, default value: 5.\n# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.\n\nTOC_INCLUDE_HEADINGS   = 0\n\n# When enabled doxygen tries to link words that correspond to documented\n# classes, or namespaces to their corresponding documentation. Such a link can\n# be prevented in individual cases by putting a % sign in front of the word or\n# globally by setting AUTOLINK_SUPPORT to NO.\n# The default value is: YES.\n\nAUTOLINK_SUPPORT       = YES\n\n# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n# to include (a tag file for) the STL sources as input, then you should set this\n# tag to YES in order to let doxygen match functions declarations and\n# definitions whose arguments contain STL classes (e.g. func(std::string);\n# versus func(std::string) {}). This also make the inheritance and collaboration\n# diagrams that involve STL classes more complete and accurate.\n# The default value is: NO.\n\nBUILTIN_STL_SUPPORT    = NO\n\n# If you use Microsoft's C++/CLI language, you should set this option to YES to\n# enable parsing support.\n# The default value is: NO.\n\nCPP_CLI_SUPPORT        = NO\n\n# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\n# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen\n# will parse them like normal C++ but will assume all classes use public instead\n# of private inheritance when no explicit protection keyword is present.\n# The default value is: NO.\n\nSIP_SUPPORT            = NO\n\n# For Microsoft's IDL there are propget and propput attributes to indicate\n# getter and setter methods for a property. Setting this option to YES will make\n# doxygen to replace the get and set methods by a property in the documentation.\n# This will only work if the methods are indeed getting or setting a simple\n# type. If this is not the case, or you want to show the methods anyway, you\n# should set this option to NO.\n# The default value is: YES.\n\nIDL_PROPERTY_SUPPORT   = YES\n\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n# tag is set to YES then doxygen will reuse the documentation of the first\n# member in the group (if any) for the other members of the group. By default\n# all members of a group must be documented explicitly.\n# The default value is: NO.\n\nDISTRIBUTE_GROUP_DOC   = NO\n\n# If one adds a struct or class to a group and this option is enabled, then also\n# any nested class or struct is added to the same group. By default this option\n# is disabled and one has to add nested compounds explicitly via \\ingroup.\n# The default value is: NO.\n\nGROUP_NESTED_COMPOUNDS = NO\n\n# Set the SUBGROUPING tag to YES to allow class member groups of the same type\n# (for instance a group of public functions) to be put as a subgroup of that\n# type (e.g. under the Public Functions section). Set it to NO to prevent\n# subgrouping. Alternatively, this can be done per class using the\n# \\nosubgrouping command.\n# The default value is: YES.\n\nSUBGROUPING            = YES\n\n# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\n# are shown inside the group in which they are included (e.g. using \\ingroup)\n# instead of on a separate page (for HTML and Man pages) or section (for LaTeX\n# and RTF).\n#\n# Note that this feature does not work in combination with\n# SEPARATE_MEMBER_PAGES.\n# The default value is: NO.\n\nINLINE_GROUPED_CLASSES = NO\n\n# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\n# with only public data fields or simple typedef fields will be shown inline in\n# the documentation of the scope in which they are defined (i.e. file,\n# namespace, or group documentation), provided this scope is documented. If set\n# to NO, structs, classes, and unions are shown on a separate page (for HTML and\n# Man pages) or section (for LaTeX and RTF).\n# The default value is: NO.\n\nINLINE_SIMPLE_STRUCTS  = NO\n\n# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\n# enum is documented as struct, union, or enum with the name of the typedef. So\n# typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n# with name TypeT. When disabled the typedef will appear as a member of a file,\n# namespace, or class. And the struct will be named TypeS. This can typically be\n# useful for C code in case the coding convention dictates that all compound\n# types are typedef'ed and only the typedef is referenced, never the tag name.\n# The default value is: NO.\n\nTYPEDEF_HIDES_STRUCT   = NO\n\n# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n# cache is used to resolve symbols given their name and scope. Since this can be\n# an expensive process and often the same symbol appears multiple times in the\n# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\n# doxygen will become slower. If the cache is too large, memory is wasted. The\n# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\n# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\n# symbols. At the end of a run doxygen will report the cache usage and suggest\n# the optimal cache size from a speed point of view.\n# Minimum value: 0, maximum value: 9, default value: 0.\n\nLOOKUP_CACHE_SIZE      = 0\n\n# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use\n# during processing. When set to 0 doxygen will based this on the number of\n# cores available in the system. You can set it explicitly to a value larger\n# than 0 to get more control over the balance between CPU load and processing\n# speed. At this moment only the input processing can be done using multiple\n# threads. Since this is still an experimental feature the default is set to 1,\n# which efficively disables parallel processing. Please report any issues you\n# encounter. Generating dot graphs in parallel is controlled by the\n# DOT_NUM_THREADS setting.\n# Minimum value: 0, maximum value: 32, default value: 1.\n\nNUM_PROC_THREADS       = 1\n\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\n\n# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in\n# documentation are documented, even if no documentation was available. Private\n# class members and static file members will be hidden unless the\n# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\n# Note: This will also disable the warnings about undocumented members that are\n# normally produced when WARNINGS is set to YES.\n# The default value is: NO.\n\nEXTRACT_ALL            = YES\n\n# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will\n# be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIVATE        = YES\n\n# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual\n# methods of a class will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIV_VIRTUAL   = NO\n\n# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal\n# scope will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PACKAGE        = YES\n\n# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be\n# included in the documentation.\n# The default value is: NO.\n\nEXTRACT_STATIC         = YES\n\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined\n# locally in source files will be included in the documentation. If set to NO,\n# only classes defined in header files are included. Does not have any effect\n# for Java sources.\n# The default value is: YES.\n\nEXTRACT_LOCAL_CLASSES  = YES\n\n# This flag is only useful for Objective-C code. If set to YES, local methods,\n# which are defined in the implementation section but not in the interface are\n# included in the documentation. If set to NO, only methods in the interface are\n# included.\n# The default value is: NO.\n\nEXTRACT_LOCAL_METHODS  = YES\n\n# If this flag is set to YES, the members of anonymous namespaces will be\n# extracted and appear in the documentation as a namespace called\n# 'anonymous_namespace{file}', where file will be replaced with the base name of\n# the file that contains the anonymous namespace. By default anonymous namespace\n# are hidden.\n# The default value is: NO.\n\nEXTRACT_ANON_NSPACES   = NO\n\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\n# undocumented members inside documented classes or files. If set to NO these\n# members will be included in the various overviews, but no documentation\n# section is generated. This option has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_MEMBERS     = NO\n\n# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\n# undocumented classes that are normally visible in the class hierarchy. If set\n# to NO, these classes will be included in the various overviews. This option\n# has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_CLASSES     = NO\n\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\n# declarations. If set to NO, these declarations will be included in the\n# documentation.\n# The default value is: NO.\n\nHIDE_FRIEND_COMPOUNDS  = NO\n\n# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\n# documentation blocks found inside the body of a function. If set to NO, these\n# blocks will be appended to the function's detailed documentation block.\n# The default value is: NO.\n\nHIDE_IN_BODY_DOCS      = NO\n\n# The INTERNAL_DOCS tag determines if documentation that is typed after a\n# \\internal command is included. If the tag is set to NO then the documentation\n# will be excluded. Set it to YES to include the internal documentation.\n# The default value is: NO.\n\nINTERNAL_DOCS          = NO\n\n# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file\n# names in lower-case letters. If set to YES, upper-case letters are also\n# allowed. This is useful if you have classes or files whose names only differ\n# in case and if your file system supports case sensitive file names. Windows\n# (including Cygwin) and Mac users are advised to set this option to NO.\n# The default value is: system dependent.\n\nCASE_SENSE_NAMES       = YES\n\n# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\n# their full class and namespace scopes in the documentation. If set to YES, the\n# scope will be hidden.\n# The default value is: NO.\n\nHIDE_SCOPE_NAMES       = NO\n\n# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will\n# append additional text to a page's title, such as Class Reference. If set to\n# YES the compound reference will be hidden.\n# The default value is: NO.\n\nHIDE_COMPOUND_REFERENCE= NO\n\n# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\n# the files that are included by a file in the documentation of that file.\n# The default value is: YES.\n\nSHOW_INCLUDE_FILES     = YES\n\n# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each\n# grouped member an include statement to the documentation, telling the reader\n# which file to include in order to use the member.\n# The default value is: NO.\n\nSHOW_GROUPED_MEMB_INC  = NO\n\n# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\n# files with double quotes in the documentation rather than with sharp brackets.\n# The default value is: NO.\n\nFORCE_LOCAL_INCLUDES   = NO\n\n# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\n# documentation for inline members.\n# The default value is: YES.\n\nINLINE_INFO            = YES\n\n# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\n# (detailed) documentation of file and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order.\n# The default value is: YES.\n\nSORT_MEMBER_DOCS       = YES\n\n# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\n# descriptions of file, namespace and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order. Note that\n# this will also influence the order of the classes in the class list.\n# The default value is: NO.\n\nSORT_BRIEF_DOCS        = NO\n\n# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\n# (brief and detailed) documentation of class members so that constructors and\n# destructors are listed first. If set to NO the constructors will appear in the\n# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\n# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\n# member documentation.\n# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\n# detailed member documentation.\n# The default value is: NO.\n\nSORT_MEMBERS_CTORS_1ST = NO\n\n# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\n# of group names into alphabetical order. If set to NO the group names will\n# appear in their defined order.\n# The default value is: NO.\n\nSORT_GROUP_NAMES       = NO\n\n# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\n# fully-qualified names, including namespaces. If set to NO, the class list will\n# be sorted only by class name, not including the namespace part.\n# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n# Note: This option applies only to the class list, not to the alphabetical\n# list.\n# The default value is: NO.\n\nSORT_BY_SCOPE_NAME     = NO\n\n# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\n# type resolution of all parameters of a function it will reject a match between\n# the prototype and the implementation of a member function even if there is\n# only one candidate or it is obvious which candidate to choose by doing a\n# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\n# accept a match between prototype and implementation in such cases.\n# The default value is: NO.\n\nSTRICT_PROTO_MATCHING  = NO\n\n# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo\n# list. This list is created by putting \\todo commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TODOLIST      = YES\n\n# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test\n# list. This list is created by putting \\test commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TESTLIST      = YES\n\n# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug\n# list. This list is created by putting \\bug commands in the documentation.\n# The default value is: YES.\n\nGENERATE_BUGLIST       = YES\n\n# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)\n# the deprecated list. This list is created by putting \\deprecated commands in\n# the documentation.\n# The default value is: YES.\n\nGENERATE_DEPRECATEDLIST= YES\n\n# The ENABLED_SECTIONS tag can be used to enable conditional documentation\n# sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\n# ... \\endcond blocks.\n\nENABLED_SECTIONS       =\n\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\n# initial value of a variable or macro / define can have for it to appear in the\n# documentation. If the initializer consists of more lines than specified here\n# it will be hidden. Use a value of 0 to hide initializers completely. The\n# appearance of the value of individual variables and macros / defines can be\n# controlled using \\showinitializer or \\hideinitializer command in the\n# documentation regardless of this setting.\n# Minimum value: 0, maximum value: 10000, default value: 30.\n\nMAX_INITIALIZER_LINES  = 30\n\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\n# the bottom of the documentation of classes and structs. If set to YES, the\n# list will mention the files that were used to generate the documentation.\n# The default value is: YES.\n\nSHOW_USED_FILES        = YES\n\n# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\n# will remove the Files entry from the Quick Index and from the Folder Tree View\n# (if specified).\n# The default value is: YES.\n\nSHOW_FILES             = YES\n\n# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\n# page. This will remove the Namespaces entry from the Quick Index and from the\n# Folder Tree View (if specified).\n# The default value is: YES.\n\nSHOW_NAMESPACES        = YES\n\n# The FILE_VERSION_FILTER tag can be used to specify a program or script that\n# doxygen should invoke to get the current version for each file (typically from\n# the version control system). Doxygen will invoke the program by executing (via\n# popen()) the command command input-file, where command is the value of the\n# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\n# by doxygen. Whatever the program writes to standard output is used as the file\n# version. For an example see the documentation.\n\nFILE_VERSION_FILTER    =\n\n# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n# by doxygen. The layout file controls the global structure of the generated\n# output files in an output format independent way. To create the layout file\n# that represents doxygen's defaults, run doxygen with the -l option. You can\n# optionally specify a file name after the option, if omitted DoxygenLayout.xml\n# will be used as the name of the layout file.\n#\n# Note that if you run doxygen from a directory containing a file called\n# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\n# tag is left empty.\n\nLAYOUT_FILE            =\n\n# The CITE_BIB_FILES tag can be used to specify one or more bib files containing\n# the reference definitions. This must be a list of .bib files. The .bib\n# extension is automatically appended if omitted. This requires the bibtex tool\n# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.\n# For LaTeX the style of the bibliography can be controlled using\n# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\n# search path. See also \\cite for info how to create references.\n\nCITE_BIB_FILES         =\n\n#---------------------------------------------------------------------------\n# Configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\n\n# The QUIET tag can be used to turn on/off the messages that are generated to\n# standard output by doxygen. If QUIET is set to YES this implies that the\n# messages are off.\n# The default value is: NO.\n\nQUIET                  = NO\n\n# The WARNINGS tag can be used to turn on/off the warning messages that are\n# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES\n# this implies that the warnings are on.\n#\n# Tip: Turn warnings on while writing the documentation.\n# The default value is: YES.\n\nWARNINGS               = YES\n\n# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate\n# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\n# will automatically be disabled.\n# The default value is: YES.\n\nWARN_IF_UNDOCUMENTED   = YES\n\n# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\n# potential errors in the documentation, such as not documenting some parameters\n# in a documented function, or documenting parameters that don't exist or using\n# markup commands wrongly.\n# The default value is: YES.\n\nWARN_IF_DOC_ERROR      = YES\n\n# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\n# are documented, but have no documentation for their parameters or return\n# value. If set to NO, doxygen will only warn about wrong or incomplete\n# parameter documentation, but not about the absence of documentation. If\n# EXTRACT_ALL is set to YES then this flag will automatically be disabled.\n# The default value is: NO.\n\nWARN_NO_PARAMDOC       = NO\n\n# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when\n# a warning is encountered.\n# The default value is: NO.\n\nWARN_AS_ERROR          = NO\n\n# The WARN_FORMAT tag determines the format of the warning messages that doxygen\n# can produce. The string should contain the $file, $line, and $text tags, which\n# will be replaced by the file and line number from which the warning originated\n# and the warning text. Optionally the format may contain $version, which will\n# be replaced by the version of the file (if it could be obtained via\n# FILE_VERSION_FILTER)\n# The default value is: $file:$line: $text.\n\nWARN_FORMAT            = \"$file:$line: $text\"\n\n# The WARN_LOGFILE tag can be used to specify a file to which warning and error\n# messages should be written. If left blank the output is written to standard\n# error (stderr).\n\nWARN_LOGFILE           =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the input files\n#---------------------------------------------------------------------------\n\n# The INPUT tag is used to specify the files and/or directories that contain\n# documented source files. You may enter file names like myfile.cpp or\n# directories like /usr/src/myproject. Separate the files or directories with\n# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING\n# Note: If this tag is empty the current directory is searched.\n\nINPUT                  = . \\\n                         readme.md \\\n                         docs/api.md \\\n                         docs/howto.md \\\n                         docs/node-ota-update.md \\\n                         docs/technical-background.md\n\n# This tag can be used to specify the character encoding of the source files\n# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\n# libiconv (or the iconv built into libc) for the transcoding. See the libiconv\n# documentation (see: https://www.gnu.org/software/libiconv/) for the list of\n# possible encodings.\n# The default value is: UTF-8.\n\nINPUT_ENCODING         = UTF-8\n\n# If the value of the INPUT tag contains directories, you can use the\n# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\n# *.h) to filter out the source-files in the directories.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# read by doxygen.\n#\n# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,\n# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,\n# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,\n# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),\n# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen\n# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,\n# *.vhdl, *.ucf, *.qsf and *.ice.\n\nFILE_PATTERNS          = *.c \\\n                         *.cc \\\n                         *.cxx \\\n                         *.cpp \\\n                         *.c++ \\\n                         *.java \\\n                         *.ii \\\n                         *.ixx \\\n                         *.ipp \\\n                         *.i++ \\\n                         *.inl \\\n                         *.idl \\\n                         *.ddl \\\n                         *.odl \\\n                         *.h \\\n                         *.hh \\\n                         *.hxx \\\n                         *.hpp \\\n                         *.h++ \\\n                         *.cs \\\n                         *.d \\\n                         *.php \\\n                         *.php4 \\\n                         *.php5 \\\n                         *.phtml \\\n                         *.inc \\\n                         *.m \\\n                         *.markdown \\\n                         *.md \\\n                         *.mm \\\n                         *.dox \\\n                         *.py \\\n                         *.pyw \\\n                         *.f90 \\\n                         *.f95 \\\n                         *.f03 \\\n                         *.f08 \\\n                         *.f \\\n                         *.for \\\n                         *.tcl \\\n                         *.vhd \\\n                         *.vhdl \\\n                         *.ucf \\\n                         *.qsf \\\n                         *.ino\n\n# The RECURSIVE tag can be used to specify whether or not subdirectories should\n# be searched for input files as well.\n# The default value is: NO.\n\nRECURSIVE              = YES\n\n# The EXCLUDE tag can be used to specify files and/or directories that should be\n# excluded from the INPUT source files. This way you can easily exclude a\n# subdirectory from a directory tree whose root is specified with the INPUT tag.\n#\n# Note that relative paths are relative to the directory from which doxygen is\n# run.\n\nEXCLUDE                = examples/enigmaiot_node/__vm \\\n                         examples/enigmaiot_node/Release \\\n                         examples/EnigmaIOTGatewayMQTT/Debug \\\n                         examples/enigmaiot_node/Debug \\\n                         EnigmaIoTUpdate/.idea \\\n                         EnigmaIoTUpdate/__pycache__ \\\n                         EnigmaIoTUpdate/venv \\\n                         examples/enigmaiot_led_flasher/__vm \\\n                         examples/enigmaiot_led_flasher/data \\\n                         examples/enigmaiot_led_flasher/Debug \\\n                         examples/EnigmaIOTGatewayMQTT/Release \\\n                         examples/EnigmaIOTGatewayMQTT/__vm \\\n                         examples/EnigmaIOTGatewayMQTT/data \\\n                         examples/enigmaiot_node/data \\\n                         examples/enigmaiot_node_nonsleepy/__vm \\\n                         examples/enigmaiot_node_nonsleepy/Debug \\\n                         examples/enigmaiot_node_nonsleepy/data \\\n                         examples\\EnigmaIOTGatewayDummy\\__vm \\\n                         examples\\EnigmaIOTGatewayDummy\\data \\\n                         examples\\EnigmaIOTGatewayDummy\\Debug \\\n                         examples\\enigmaiot_node_msgpack\\__vm \\\n                         examples\\enigmaiot_node_msgpack\\Debug \\\n                         Libraries\n\n# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n# directories that are symbolic links (a Unix file system feature) are excluded\n# from the input.\n# The default value is: NO.\n\nEXCLUDE_SYMLINKS       = NO\n\n# If the value of the INPUT tag contains directories, you can use the\n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n# certain files from those directories.\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories for example use the pattern */test/*\n\nEXCLUDE_PATTERNS       = */Debug/* \\\n                         */venv/* \\\n                         */__vm/*\n\n# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n# (namespaces, classes, functions, etc.) that should be excluded from the\n# output. The symbol name can be a fully qualified name, a word, or if the\n# wildcard * is used, a substring. Examples: ANamespace, AClass,\n# AClass::ANamespace, ANamespace::*Test\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories use the pattern */test/*\n\nEXCLUDE_SYMBOLS        =\n\n# The EXAMPLE_PATH tag can be used to specify one or more files or directories\n# that contain example code fragments that are included (see the \\include\n# command).\n\nEXAMPLE_PATH           =\n\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the\n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\n# *.h) to filter out the source-files in the directories. If left blank all\n# files are included.\n\nEXAMPLE_PATTERNS       = *\n\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n# searched for input files to be used with the \\include or \\dontinclude commands\n# irrespective of the value of the RECURSIVE tag.\n# The default value is: NO.\n\nEXAMPLE_RECURSIVE      = NO\n\n# The IMAGE_PATH tag can be used to specify one or more files or directories\n# that contain images that are to be included in the documentation (see the\n# \\image command).\n\nIMAGE_PATH             =\n\n# The INPUT_FILTER tag can be used to specify a program that doxygen should\n# invoke to filter for each input file. Doxygen will invoke the filter program\n# by executing (via popen()) the command:\n#\n# <filter> <input-file>\n#\n# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\n# name of an input file. Doxygen will then use the output that the filter\n# program writes to standard output. If FILTER_PATTERNS is specified, this tag\n# will be ignored.\n#\n# Note that the filter must not add or remove lines; it is applied before the\n# code is scanned, but not when the output code is generated. If lines are added\n# or removed, the anchors will not be placed correctly.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# properly processed by doxygen.\n\nINPUT_FILTER           =\n\n# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n# basis. Doxygen will compare the file name with each pattern and apply the\n# filter if there is a match. The filters are a list of the form: pattern=filter\n# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\n# filters are used. If the FILTER_PATTERNS tag is empty or if none of the\n# patterns match the file name, INPUT_FILTER is applied.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# properly processed by doxygen.\n\nFILTER_PATTERNS        =\n\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n# INPUT_FILTER) will also be used to filter the input files that are used for\n# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\n# The default value is: NO.\n\nFILTER_SOURCE_FILES    = NO\n\n# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\n# it is also possible to disable source filtering for a specific pattern using\n# *.ext= (so without naming a filter).\n# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.\n\nFILTER_SOURCE_PATTERNS =\n\n# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\n# is part of the input, its contents will be placed on the main page\n# (index.html). This can be useful if you have a project on for instance GitHub\n# and want to reuse the introduction page also for the doxygen output.\n\nUSE_MDFILE_AS_MAINPAGE = ./readme.md\n\n#---------------------------------------------------------------------------\n# Configuration options related to source browsing\n#---------------------------------------------------------------------------\n\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will be\n# generated. Documented entities will be cross-referenced with these sources.\n#\n# Note: To get rid of all source code in the generated output, make sure that\n# also VERBATIM_HEADERS is set to NO.\n# The default value is: NO.\n\nSOURCE_BROWSER         = YES\n\n# Setting the INLINE_SOURCES tag to YES will include the body of functions,\n# classes and enums directly into the documentation.\n# The default value is: NO.\n\nINLINE_SOURCES         = NO\n\n# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\n# special comment blocks from generated source code fragments. Normal C, C++ and\n# Fortran comments will always remain visible.\n# The default value is: YES.\n\nSTRIP_CODE_COMMENTS    = YES\n\n# If the REFERENCED_BY_RELATION tag is set to YES then for each documented\n# entity all documented functions referencing it will be listed.\n# The default value is: NO.\n\nREFERENCED_BY_RELATION = NO\n\n# If the REFERENCES_RELATION tag is set to YES then for each documented function\n# all documented entities called/used by that function will be listed.\n# The default value is: NO.\n\nREFERENCES_RELATION    = NO\n\n# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\n# to YES then the hyperlinks from functions in REFERENCES_RELATION and\n# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\n# link to the documentation.\n# The default value is: YES.\n\nREFERENCES_LINK_SOURCE = YES\n\n# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\n# source code will show a tooltip with additional information such as prototype,\n# brief description and links to the definition and documentation. Since this\n# will make the HTML file larger and loading of large files a bit slower, you\n# can opt to disable this feature.\n# The default value is: YES.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nSOURCE_TOOLTIPS        = YES\n\n# If the USE_HTAGS tag is set to YES then the references to source code will\n# point to the HTML generated by the htags(1) tool instead of doxygen built-in\n# source browser. The htags tool is part of GNU's global source tagging system\n# (see https://www.gnu.org/software/global/global.html). You will need version\n# 4.8.6 or higher.\n#\n# To use it do the following:\n# - Install the latest version of global\n# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file\n# - Make sure the INPUT points to the root of the source tree\n# - Run doxygen as normal\n#\n# Doxygen will invoke htags (and that will in turn invoke gtags), so these\n# tools must be available from the command line (i.e. in the search path).\n#\n# The result: instead of the source browser generated by doxygen, the links to\n# source code will now point to the output of htags.\n# The default value is: NO.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nUSE_HTAGS              = NO\n\n# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\n# verbatim copy of the header file for each class for which an include is\n# specified. Set to NO to disable this.\n# See also: Section \\class.\n# The default value is: YES.\n\nVERBATIM_HEADERS       = YES\n\n# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the\n# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the\n# cost of reduced performance. This can be particularly helpful with template\n# rich C++ code for which doxygen's built-in parser lacks the necessary type\n# information.\n# Note: The availability of this option depends on whether or not doxygen was\n# generated with the -Duse_libclang=ON option for CMake.\n# The default value is: NO.\n\nCLANG_ASSISTED_PARSING = NO\n\n# If clang assisted parsing is enabled you can provide the compiler with command\n# line options that you would normally use when invoking the compiler. Note that\n# the include paths will already be set by doxygen for the files and directories\n# specified with INPUT and INCLUDE_PATH.\n# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.\n\nCLANG_OPTIONS          =\n\n# If clang assisted parsing is enabled you can provide the clang parser with the\n# path to the directory containing a file called compile_commands.json. This\n# file is the compilation database (see:\n# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the\n# options used when the source files were built. This is equivalent to\n# specifying the \"-p\" option to a clang tool, such as clang-check. These options\n# will then be passed to the parser. Any options specified with CLANG_OPTIONS\n# will be added as well.\n# Note: The availability of this option depends on whether or not doxygen was\n# generated with the -Duse_libclang=ON option for CMake.\n\nCLANG_DATABASE_PATH    =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\n\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\n# compounds will be generated. Enable this if the project contains a lot of\n# classes, structs, unions or interfaces.\n# The default value is: YES.\n\nALPHABETICAL_INDEX     = YES\n\n# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in\n# which the alphabetical index list will be split.\n# Minimum value: 1, maximum value: 20, default value: 5.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nCOLS_IN_ALPHA_INDEX    = 5\n\n# In case all classes in a project start with a common prefix, all classes will\n# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag\n# can be used to specify a prefix (or a list of prefixes) that should be ignored\n# while generating the index headers.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nIGNORE_PREFIX          =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the HTML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output\n# The default value is: YES.\n\nGENERATE_HTML          = YES\n\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_OUTPUT            = html\n\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\n# generated HTML page (for example: .htm, .php, .asp).\n# The default value is: .html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FILE_EXTENSION    = .html\n\n# The HTML_HEADER tag can be used to specify a user-defined HTML header file for\n# each generated HTML page. If the tag is left blank doxygen will generate a\n# standard header.\n#\n# To get valid HTML the header file that includes any scripts and style sheets\n# that doxygen needs, which is dependent on the configuration options used (e.g.\n# the setting GENERATE_TREEVIEW). It is highly recommended to start with a\n# default header using\n# doxygen -w html new_header.html new_footer.html new_stylesheet.css\n# YourConfigFile\n# and then modify the file new_header.html. See also section \"Doxygen usage\"\n# for information on how to generate the default header that doxygen normally\n# uses.\n# Note: The header is subject to change so you typically have to regenerate the\n# default header when upgrading to a newer version of doxygen. For a description\n# of the possible markers and block names see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_HEADER            =\n\n# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\n# generated HTML page. If the tag is left blank doxygen will generate a standard\n# footer. See HTML_HEADER for more information on how to generate a default\n# footer and what special commands can be used inside the footer. See also\n# section \"Doxygen usage\" for information on how to generate the default footer\n# that doxygen normally uses.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FOOTER            =\n\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\n# sheet that is used by each HTML page. It can be used to fine-tune the look of\n# the HTML output. If left blank doxygen will generate a default style sheet.\n# See also section \"Doxygen usage\" for information on how to generate the style\n# sheet that doxygen normally uses.\n# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\n# it is more robust and this tag (HTML_STYLESHEET) will in the future become\n# obsolete.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_STYLESHEET        =\n\n# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# cascading style sheets that are included after the standard style sheets\n# created by doxygen. Using this option one can overrule certain style aspects.\n# This is preferred over using HTML_STYLESHEET since it does not replace the\n# standard style sheet and is therefore more robust against future updates.\n# Doxygen will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list). For an example see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_STYLESHEET  =\n\n# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the HTML output directory. Note\n# that these files will be copied to the base HTML output directory. Use the\n# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n# files. In the HTML_STYLESHEET file, use the file name only. Also note that the\n# files will be copied as-is; there are no commands or markers available.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_FILES       =\n\n# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\n# will adjust the colors in the style sheet and background images according to\n# this color. Hue is specified as an angle on a colorwheel, see\n# https://en.wikipedia.org/wiki/Hue for more information. For instance the value\n# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\n# purple, and 360 is red again.\n# Minimum value: 0, maximum value: 359, default value: 220.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_HUE    = 220\n\n# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\n# in the HTML output. For a value of 0 the output will use grayscales only. A\n# value of 255 will produce the most vivid colors.\n# Minimum value: 0, maximum value: 255, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_SAT    = 100\n\n# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\n# luminance component of the colors in the HTML output. Values below 100\n# gradually make the output lighter, whereas values above 100 make the output\n# darker. The value divided by 100 is the actual gamma applied, so 80 represents\n# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\n# change the gamma.\n# Minimum value: 40, maximum value: 240, default value: 80.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_GAMMA  = 80\n\n# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\n# page will contain the date and time when the page was generated. Setting this\n# to YES can help to show when doxygen was last run and thus if the\n# documentation is up to date.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_TIMESTAMP         = NO\n\n# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML\n# documentation will contain a main index with vertical navigation menus that\n# are dynamically created via JavaScript. If disabled, the navigation index will\n# consists of multiple levels of tabs that are statically embedded in every HTML\n# page. Disable this option to support browsers that do not have JavaScript,\n# like the Qt help browser.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_MENUS     = YES\n\n# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n# documentation will contain sections that can be hidden and shown after the\n# page has loaded.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_SECTIONS  = NO\n\n# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\n# shown in the various tree structured indices initially; the user can expand\n# and collapse entries dynamically later on. Doxygen will expand the tree to\n# such a level that at most the specified number of entries are visible (unless\n# a fully collapsed tree already exceeds this amount). So setting the number of\n# entries 1 will produce a full collapsed tree by default. 0 is a special value\n# representing an infinite number of entries and will result in a full expanded\n# tree by default.\n# Minimum value: 0, maximum value: 9999, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_INDEX_NUM_ENTRIES = 100\n\n# If the GENERATE_DOCSET tag is set to YES, additional index files will be\n# generated that can be used as input for Apple's Xcode 3 integrated development\n# environment (see: https://developer.apple.com/xcode/), introduced with OSX\n# 10.5 (Leopard). To create a documentation set, doxygen will generate a\n# Makefile in the HTML output directory. Running make will produce the docset in\n# that directory and running make install will install the docset in\n# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\n# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy\n# genXcode/_index.html for more information.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_DOCSET        = NO\n\n# This tag determines the name of the docset feed. A documentation feed provides\n# an umbrella under which multiple documentation sets from a single provider\n# (such as a company or product suite) can be grouped.\n# The default value is: Doxygen generated docs.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_FEEDNAME        = \"Doxygen generated docs\"\n\n# This tag specifies a string that should uniquely identify the documentation\n# set bundle. This should be a reverse domain-name style string, e.g.\n# com.mycompany.MyDocSet. Doxygen will append .docset to the name.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_BUNDLE_ID       = org.doxygen.Project\n\n# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\n# the documentation publisher. This should be a reverse domain-name style\n# string, e.g. com.mycompany.MyDocSet.documentation.\n# The default value is: org.doxygen.Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_ID    = org.doxygen.Publisher\n\n# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\n# The default value is: Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_NAME  = Publisher\n\n# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\n# additional HTML index files: index.hhp, index.hhc, and index.hhk. The\n# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\n# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on\n# Windows.\n#\n# The HTML Help Workshop contains a compiler that can convert all HTML output\n# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\n# files are now used as the Windows 98 help format, and will replace the old\n# Windows help format (.hlp) on all Windows platforms in the future. Compressed\n# HTML files also contain an index, a table of contents, and you can search for\n# words in the documentation. The HTML workshop also contains a viewer for\n# compressed HTML files.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_HTMLHELP      = NO\n\n# The CHM_FILE tag can be used to specify the file name of the resulting .chm\n# file. You can add a path in front of the file if the result should not be\n# written to the html output directory.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_FILE               =\n\n# The HHC_LOCATION tag can be used to specify the location (absolute path\n# including file name) of the HTML help compiler (hhc.exe). If non-empty,\n# doxygen will try to run the HTML help compiler on the generated index.hhp.\n# The file has to be specified with full path.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nHHC_LOCATION           =\n\n# The GENERATE_CHI flag controls if a separate .chi index file is generated\n# (YES) or that it should be included in the main .chm file (NO).\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nGENERATE_CHI           = NO\n\n# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)\n# and project file content.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_INDEX_ENCODING     =\n\n# The BINARY_TOC flag controls whether a binary table of contents is generated\n# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it\n# enables the Previous and Next buttons.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nBINARY_TOC             = NO\n\n# The TOC_EXPAND flag can be set to YES to add extra items for group members to\n# the table of contents of the HTML help documentation and to the tree view.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nTOC_EXPAND             = NO\n\n# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\n# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\n# (.qch) of the generated HTML documentation.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_QHP           = NO\n\n# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\n# the file name of the resulting .qch file. The path specified is relative to\n# the HTML output folder.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQCH_FILE               =\n\n# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\n# Project output. For more information please see Qt Help Project / Namespace\n# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_NAMESPACE          = org.doxygen.Project\n\n# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\n# Help Project output. For more information please see Qt Help Project / Virtual\n# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-\n# folders).\n# The default value is: doc.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_VIRTUAL_FOLDER     = doc\n\n# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\n# filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_NAME   =\n\n# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\n# custom filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_ATTRS  =\n\n# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n# project's filter section matches. Qt Help Project / Filter Attributes (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_SECT_FILTER_ATTRS  =\n\n# The QHG_LOCATION tag can be used to specify the location of Qt's\n# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the\n# generated .qhp file.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHG_LOCATION           =\n\n# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\n# generated, together with the HTML files, they form an Eclipse help plugin. To\n# install this plugin and make it available under the help contents menu in\n# Eclipse, the contents of the directory containing the HTML and XML files needs\n# to be copied into the plugins directory of eclipse. The name of the directory\n# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\n# After copying Eclipse needs to be restarted before the help appears.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_ECLIPSEHELP   = NO\n\n# A unique identifier for the Eclipse help plugin. When installing the plugin\n# the directory name containing the HTML and XML files should also have this\n# name. Each documentation set should have its own identifier.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.\n\nECLIPSE_DOC_ID         = org.doxygen.Project\n\n# If you want full control over the layout of the generated HTML pages it might\n# be necessary to disable the index and replace it with your own. The\n# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\n# of each HTML page. A value of NO enables the index and the value YES disables\n# it. Since the tabs in the index contain the same information as the navigation\n# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nDISABLE_INDEX          = NO\n\n# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n# structure should be generated to display hierarchical information. If the tag\n# value is set to YES, a side panel will be generated containing a tree-like\n# index structure (just like the one that is generated for HTML Help). For this\n# to work a browser that supports JavaScript, DHTML, CSS and frames is required\n# (i.e. any modern browser). Windows users are probably better off using the\n# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can\n# further fine-tune the look of the index. As an example, the default style\n# sheet generated by doxygen has an example that shows how to put an image at\n# the root of the tree instead of the PROJECT_NAME. Since the tree basically has\n# the same information as the tab index, you could consider setting\n# DISABLE_INDEX to YES when enabling this option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_TREEVIEW      = NO\n\n# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\n# doxygen will group on one line in the generated HTML documentation.\n#\n# Note that a value of 0 will completely suppress the enum values from appearing\n# in the overview section.\n# Minimum value: 0, maximum value: 20, default value: 4.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nENUM_VALUES_PER_LINE   = 4\n\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\n# to set the initial width (in pixels) of the frame in which the tree is shown.\n# Minimum value: 0, maximum value: 1500, default value: 250.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nTREEVIEW_WIDTH         = 250\n\n# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to\n# external symbols imported via tag files in a separate window.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nEXT_LINKS_IN_WINDOW    = NO\n\n# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg\n# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see\n# https://inkscape.org) to generate formulas as SVG images instead of PNGs for\n# the HTML output. These images will generally look nicer at scaled resolutions.\n# Possible values are: png (the default) and svg (looks nicer but requires the\n# pdf2svg or inkscape tool).\n# The default value is: png.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FORMULA_FORMAT    = png\n\n# Use this tag to change the font size of LaTeX formulas included as images in\n# the HTML documentation. When you change the font size after a successful\n# doxygen run you need to manually remove any form_*.png images from the HTML\n# output directory to force them to be regenerated.\n# Minimum value: 8, maximum value: 50, default value: 10.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_FONTSIZE       = 10\n\n# Use the FORMULA_TRANSPARENT tag to determine whether or not the images\n# generated for formulas are transparent PNGs. Transparent PNGs are not\n# supported properly for IE 6.0, but are supported on all modern browsers.\n#\n# Note that when changing this option you need to delete any form_*.png files in\n# the HTML output directory before the changes have effect.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_TRANSPARENT    = YES\n\n# The FORMULA_MACROFILE can contain LaTeX \\newcommand and \\renewcommand commands\n# to create new LaTeX commands to be used in formulas as building blocks. See\n# the section \"Including formulas\" for details.\n\nFORMULA_MACROFILE      =\n\n# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\n# https://www.mathjax.org) which uses client side JavaScript for the rendering\n# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX\n# installed or if you want to formulas look prettier in the HTML output. When\n# enabled you may also need to install MathJax separately and configure the path\n# to it using the MATHJAX_RELPATH option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nUSE_MATHJAX            = NO\n\n# When MathJax is enabled you can set the default output format to be used for\n# the MathJax output. See the MathJax site (see:\n# http://docs.mathjax.org/en/latest/output.html) for more details.\n# Possible values are: HTML-CSS (which is slower, but has the best\n# compatibility), NativeMML (i.e. MathML) and SVG.\n# The default value is: HTML-CSS.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_FORMAT         = HTML-CSS\n\n# When MathJax is enabled you need to specify the location relative to the HTML\n# output directory using the MATHJAX_RELPATH option. The destination directory\n# should contain the MathJax.js script. For instance, if the mathjax directory\n# is located at the same level as the HTML output directory, then\n# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\n# Content Delivery Network so you can quickly see the result without installing\n# MathJax. However, it is strongly recommended to install a local copy of\n# MathJax from https://www.mathjax.org before deployment.\n# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest\n\n# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\n# extension names that should be enabled during MathJax rendering. For example\n# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_EXTENSIONS     =\n\n# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\n# of code that will be used on startup of the MathJax code. See the MathJax site\n# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an\n# example see the documentation.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_CODEFILE       =\n\n# When the SEARCHENGINE tag is enabled doxygen will generate a search box for\n# the HTML output. The underlying search engine uses javascript and DHTML and\n# should work on any modern browser. Note that when using HTML help\n# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\n# there is already a search function so this one should typically be disabled.\n# For large projects the javascript based search engine can be slow, then\n# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\n# search using the keyboard; to jump to the search box use <access key> + S\n# (what the <access key> is depends on the OS and browser, but it is typically\n# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\n# key> to jump into the search results window, the results can be navigated\n# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\n# the search. The filter options can be selected when the cursor is inside the\n# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\n# to select a filter and <Enter> or <escape> to activate or cancel the filter\n# option.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nSEARCHENGINE           = YES\n\n# When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n# implemented using a web server instead of a web client using JavaScript. There\n# are two flavors of web server based searching depending on the EXTERNAL_SEARCH\n# setting. When disabled, doxygen will generate a PHP script for searching and\n# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing\n# and searching needs to be provided by external tools. See the section\n# \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSERVER_BASED_SEARCH    = NO\n\n# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\n# script for searching. Instead the search results are written to an XML file\n# which needs to be processed by an external indexer. Doxygen will invoke an\n# external search engine pointed to by the SEARCHENGINE_URL option to obtain the\n# search results.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: https://xapian.org/).\n#\n# See the section \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH        = NO\n\n# The SEARCHENGINE_URL should point to a search engine hosted by a web server\n# which will return the search results when EXTERNAL_SEARCH is enabled.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: https://xapian.org/). See the section \"External Indexing and\n# Searching\" for details.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHENGINE_URL       =\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\n# search data is written to a file for indexing by an external tool. With the\n# SEARCHDATA_FILE tag the name of this file can be specified.\n# The default file is: searchdata.xml.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHDATA_FILE        = searchdata.xml\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\n# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n# projects and redirect the results back to the right project.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH_ID     =\n\n# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n# projects other than the one defined by this configuration file, but that are\n# all added to the same external search index. Each project needs to have a\n# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\n# to a relative location where the documentation can be found. The format is:\n# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTRA_SEARCH_MAPPINGS  =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.\n# The default value is: YES.\n\nGENERATE_LATEX         = NO\n\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_OUTPUT           = latex\n\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n# invoked.\n#\n# Note that when not enabling USE_PDFLATEX the default is latex when enabling\n# USE_PDFLATEX the default is pdflatex and when in the later case latex is\n# chosen this is overwritten by pdflatex. For specific output languages the\n# default can have been set differently, this depends on the implementation of\n# the output language.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_CMD_NAME         = latex\n\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\n# index for LaTeX.\n# Note: This tag is used in the Makefile / make.bat.\n# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file\n# (.tex).\n# The default file is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nMAKEINDEX_CMD_NAME     = makeindex\n\n# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to\n# generate index for LaTeX. In case there is no backslash (\\) as first character\n# it will be automatically added in the LaTeX code.\n# Note: This tag is used in the generated output file (.tex).\n# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.\n# The default value is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_MAKEINDEX_CMD    = makeindex\n\n# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nCOMPACT_LATEX          = NO\n\n# The PAPER_TYPE tag can be used to set the paper type that is used by the\n# printer.\n# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\n# 14 inches) and executive (7.25 x 10.5 inches).\n# The default value is: a4.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPAPER_TYPE             = a4\n\n# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\n# that should be included in the LaTeX output. The package can be specified just\n# by its name or with the correct syntax as to be used with the LaTeX\n# \\usepackage command. To get the times font for instance you can specify :\n# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}\n# To use the option intlimits with the amsmath package you can specify:\n# EXTRA_PACKAGES=[intlimits]{amsmath}\n# If left blank no extra packages will be included.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nEXTRA_PACKAGES         =\n\n# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the\n# generated LaTeX document. The header should contain everything until the first\n# chapter. If it is left blank doxygen will generate a standard header. See\n# section \"Doxygen usage\" for information on how to let doxygen write the\n# default header to a separate file.\n#\n# Note: Only use a user-defined header if you know what you are doing! The\n# following commands have a special meaning inside the header: $title,\n# $datetime, $date, $doxygenversion, $projectname, $projectnumber,\n# $projectbrief, $projectlogo. Doxygen will replace $title with the empty\n# string, for the replacement values of the other commands the user is referred\n# to HTML_HEADER.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HEADER           =\n\n# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the\n# generated LaTeX document. The footer should contain everything after the last\n# chapter. If it is left blank doxygen will generate a standard footer. See\n# LATEX_HEADER for more information on how to generate a default footer and what\n# special commands can be used inside the footer.\n#\n# Note: Only use a user-defined footer if you know what you are doing!\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_FOOTER           =\n\n# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# LaTeX style sheets that are included after the standard style sheets created\n# by doxygen. Using this option one can overrule certain style aspects. Doxygen\n# will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list).\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_STYLESHEET =\n\n# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the LATEX_OUTPUT output\n# directory. Note that the files will be copied as-is; there are no commands or\n# markers available.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_FILES      =\n\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\n# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\n# contain links (just like the HTML output) instead of page references. This\n# makes the output suitable for online browsing using a PDF viewer.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPDF_HYPERLINKS         = YES\n\n# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as\n# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX\n# files. Set this option to YES, to get a higher quality PDF documentation.\n#\n# See also section LATEX_CMD_NAME for selecting the engine.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nUSE_PDFLATEX           = YES\n\n# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode\n# command to the generated LaTeX files. This will instruct LaTeX to keep running\n# if errors occur, instead of asking the user for help. This option is also used\n# when generating formulas in HTML.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BATCHMODE        = NO\n\n# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\n# index chapters (such as File Index, Compound Index, etc.) in the output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HIDE_INDICES     = NO\n\n# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source\n# code with syntax highlighting in the LaTeX output.\n#\n# Note that which sources are shown also depends on other settings such as\n# SOURCE_BROWSER.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_SOURCE_CODE      = NO\n\n# The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n# bibliography, e.g. plainnat, or ieeetr. See\n# https://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\n# The default value is: plain.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BIB_STYLE        = plain\n\n# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated\n# page will contain the date and time when the page was generated. Setting this\n# to NO can help when comparing the output of multiple runs.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_TIMESTAMP        = NO\n\n# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)\n# path from which the emoji images will be read. If a relative path is entered,\n# it will be relative to the LATEX_OUTPUT directory. If left blank the\n# LATEX_OUTPUT directory will be used.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EMOJI_DIRECTORY  =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the RTF output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The\n# RTF output is optimized for Word 97 and may not look too pretty with other RTF\n# readers/editors.\n# The default value is: NO.\n\nGENERATE_RTF           = NO\n\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: rtf.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_OUTPUT             = rtf\n\n# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nCOMPACT_RTF            = NO\n\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\n# contain hyperlink fields. The RTF file will contain links (just like the HTML\n# output) instead of page references. This makes the output suitable for online\n# browsing using Word or some other Word compatible readers that support those\n# fields.\n#\n# Note: WordPad (write) and others do not support links.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_HYPERLINKS         = NO\n\n# Load stylesheet definitions from file. Syntax is similar to doxygen's\n# configuration file, i.e. a series of assignments. You only have to provide\n# replacements, missing definitions are set to their default value.\n#\n# See also section \"Doxygen usage\" for information on how to generate the\n# default style sheet that doxygen normally uses.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_STYLESHEET_FILE    =\n\n# Set optional variables used in the generation of an RTF document. Syntax is\n# similar to doxygen's configuration file. A template extensions file can be\n# generated using doxygen -e rtf extensionFile.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_EXTENSIONS_FILE    =\n\n# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code\n# with syntax highlighting in the RTF output.\n#\n# Note that which sources are shown also depends on other settings such as\n# SOURCE_BROWSER.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_SOURCE_CODE        = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the man page output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for\n# classes and files.\n# The default value is: NO.\n\nGENERATE_MAN           = NO\n\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it. A directory man3 will be created inside the directory specified by\n# MAN_OUTPUT.\n# The default directory is: man.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_OUTPUT             = man\n\n# The MAN_EXTENSION tag determines the extension that is added to the generated\n# man pages. In case the manual section does not start with a number, the number\n# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\n# optional.\n# The default value is: .3.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_EXTENSION          = .3\n\n# The MAN_SUBDIR tag determines the name of the directory created within\n# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by\n# MAN_EXTENSION with the initial . removed.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_SUBDIR             =\n\n# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\n# will generate one additional man file for each entity documented in the real\n# man page(s). These additional files only source the real man page, but without\n# them the man command would be unable to find the correct page.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_LINKS              = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the XML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that\n# captures the structure of the code including all documentation.\n# The default value is: NO.\n\nGENERATE_XML           = NO\n\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: xml.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_OUTPUT             = xml\n\n# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program\n# listings (including syntax highlighting and cross-referencing information) to\n# the XML output. Note that enabling this will significantly increase the size\n# of the XML output.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_PROGRAMLISTING     = YES\n\n# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include\n# namespace members in file scope as well, matching the HTML output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_NS_MEMB_FILE_SCOPE = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the DOCBOOK output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files\n# that can be used to generate PDF.\n# The default value is: NO.\n\nGENERATE_DOCBOOK       = NO\n\n# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\n# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\n# front of it.\n# The default directory is: docbook.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_OUTPUT         = docbook\n\n# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the\n# program listings (including syntax highlighting and cross-referencing\n# information) to the DOCBOOK output. Note that enabling this will significantly\n# increase the size of the DOCBOOK output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_PROGRAMLISTING = NO\n\n#---------------------------------------------------------------------------\n# Configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an\n# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures\n# the structure of the code including all documentation. Note that this feature\n# is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_AUTOGEN_DEF   = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to Sqlite3 output\n#---------------------------------------------------------------------------\n\n#---------------------------------------------------------------------------\n# Configuration options related to the Perl module output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module\n# file that captures the structure of the code including all documentation.\n#\n# Note that this feature is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_PERLMOD       = NO\n\n# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary\n# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\n# output from the Perl module output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_LATEX          = NO\n\n# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely\n# formatted so it can be parsed by a human reader. This is useful if you want to\n# understand what is going on. On the other hand, if this tag is set to NO, the\n# size of the Perl module output will be much smaller and Perl will parse it\n# just the same.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_PRETTY         = YES\n\n# The names of the make variables in the generated doxyrules.make file are\n# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\n# so different doxyrules.make files included by the same Makefile don't\n# overwrite each other's variables.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_MAKEVAR_PREFIX =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor\n#---------------------------------------------------------------------------\n\n# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all\n# C-preprocessor directives found in the sources and include files.\n# The default value is: YES.\n\nENABLE_PREPROCESSING   = YES\n\n# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names\n# in the source code. If set to NO, only conditional compilation will be\n# performed. Macro expansion can be done in a controlled way by setting\n# EXPAND_ONLY_PREDEF to YES.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nMACRO_EXPANSION        = NO\n\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\n# the macro expansion is limited to the macros specified with the PREDEFINED and\n# EXPAND_AS_DEFINED tags.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_ONLY_PREDEF     = NO\n\n# If the SEARCH_INCLUDES tag is set to YES, the include files in the\n# INCLUDE_PATH will be searched if a #include is found.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSEARCH_INCLUDES        = YES\n\n# The INCLUDE_PATH tag can be used to specify one or more directories that\n# contain include files that are not input files but should be processed by the\n# preprocessor.\n# This tag requires that the tag SEARCH_INCLUDES is set to YES.\n\nINCLUDE_PATH           =\n\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n# patterns (like *.h and *.hpp) to filter out the header-files in the\n# directories. If left blank, the patterns specified with FILE_PATTERNS will be\n# used.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nINCLUDE_FILE_PATTERNS  =\n\n# The PREDEFINED tag can be used to specify one or more macro names that are\n# defined before the preprocessor is started (similar to the -D option of e.g.\n# gcc). The argument of the tag is a list of macros of the form: name or\n# name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\n# is assumed. To prevent a macro definition from being undefined via #undef or\n# recursively expanded use the := operator instead of the = operator.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nPREDEFINED             =\n\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\n# tag can be used to specify a list of macro names that should be expanded. The\n# macro definition that is found in the sources will be used. Use the PREDEFINED\n# tag if you want to use a different macro definition that overrules the\n# definition found in the source code.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_AS_DEFINED      =\n\n# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\n# remove all references to function-like macros that are alone on a line, have\n# an all uppercase name, and do not end with a semicolon. Such function macros\n# are typically used for boiler-plate code, and will confuse the parser if not\n# removed.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSKIP_FUNCTION_MACROS   = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to external references\n#---------------------------------------------------------------------------\n\n# The TAGFILES tag can be used to specify one or more tag files. For each tag\n# file the location of the external documentation should be added. The format of\n# a tag file without this location is as follows:\n# TAGFILES = file1 file2 ...\n# Adding location for the tag files is done as follows:\n# TAGFILES = file1=loc1 \"file2 = loc2\" ...\n# where loc1 and loc2 can be relative or absolute paths or URLs. See the\n# section \"Linking to external documentation\" for more information about the use\n# of tag files.\n# Note: Each tag file must have a unique name (where the name does NOT include\n# the path). If a tag file is not located in the directory in which doxygen is\n# run, you must also specify the path to the tagfile here.\n\nTAGFILES               =\n\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create a\n# tag file that is based on the input files it reads. See section \"Linking to\n# external documentation\" for more information about the usage of tag files.\n\nGENERATE_TAGFILE       =\n\n# If the ALLEXTERNALS tag is set to YES, all external class will be listed in\n# the class index. If set to NO, only the inherited external classes will be\n# listed.\n# The default value is: NO.\n\nALLEXTERNALS           = NO\n\n# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed\n# in the modules index. If set to NO, only the current project's groups will be\n# listed.\n# The default value is: YES.\n\nEXTERNAL_GROUPS        = YES\n\n# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in\n# the related pages index. If set to NO, only the current project's pages will\n# be listed.\n# The default value is: YES.\n\nEXTERNAL_PAGES         = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to the dot tool\n#---------------------------------------------------------------------------\n\n# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram\n# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to\n# NO turns the diagrams off. Note that this option also works with HAVE_DOT\n# disabled, but it is recommended to install and use dot, since it yields more\n# powerful graphs.\n# The default value is: YES.\n\nCLASS_DIAGRAMS         = YES\n\n# You can include diagrams made with dia in doxygen documentation. Doxygen will\n# then run dia to produce the diagram and insert it in the documentation. The\n# DIA_PATH tag allows you to specify the directory where the dia binary resides.\n# If left empty dia is assumed to be found in the default search path.\n\nDIA_PATH               =\n\n# If set to YES the inheritance and collaboration graphs will hide inheritance\n# and usage relations if the target is undocumented or is not a class.\n# The default value is: YES.\n\nHIDE_UNDOC_RELATIONS   = YES\n\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n# available from the path. This tool is part of Graphviz (see:\n# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\n# Bell Labs. The other options in this section have no effect if this option is\n# set to NO\n# The default value is: NO.\n\nHAVE_DOT               = NO\n\n# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\n# to run in parallel. When set to 0 doxygen will base this on the number of\n# processors available in the system. You can set it explicitly to a value\n# larger than 0 to get control over the balance between CPU load and processing\n# speed.\n# Minimum value: 0, maximum value: 32, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_NUM_THREADS        = 0\n\n# When you want a differently looking font in the dot files that doxygen\n# generates you can specify the font name using DOT_FONTNAME. You need to make\n# sure dot is able to find the font, which can be done by putting it in a\n# standard location or by setting the DOTFONTPATH environment variable or by\n# setting DOT_FONTPATH to the directory containing the font.\n# The default value is: Helvetica.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTNAME           = Helvetica\n\n# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of\n# dot graphs.\n# Minimum value: 4, maximum value: 24, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTSIZE           = 10\n\n# By default doxygen will tell dot to use the default font as specified with\n# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set\n# the path where dot can find it using this tag.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTPATH           =\n\n# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for\n# each documented class showing the direct and indirect inheritance relations.\n# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCLASS_GRAPH            = YES\n\n# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\n# graph for each documented class showing the direct and indirect implementation\n# dependencies (inheritance, containment, and class references variables) of the\n# class with other documented classes.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCOLLABORATION_GRAPH    = YES\n\n# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\n# groups, showing the direct groups dependencies.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGROUP_GRAPHS           = YES\n\n# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and\n# collaboration diagrams in a style similar to the OMG's Unified Modeling\n# Language.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LOOK               = NO\n\n# If the UML_LOOK tag is enabled, the fields and methods are shown inside the\n# class node. If there are many fields or methods and many nodes the graph may\n# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\n# number of items for each type to make the size more manageable. Set this to 0\n# for no limit. Note that the threshold may be exceeded by 50% before the limit\n# is enforced. So when you set the threshold to 10, up to 15 fields may appear,\n# but if the number exceeds 15, the total amount of fields shown is limited to\n# 10.\n# Minimum value: 0, maximum value: 100, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LIMIT_NUM_FIELDS   = 10\n\n# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\n# collaboration graphs will show the relations between templates and their\n# instances.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nTEMPLATE_RELATIONS     = NO\n\n# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\n# YES then doxygen will generate a graph for each documented file showing the\n# direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDE_GRAPH          = YES\n\n# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\n# set to YES then doxygen will generate a graph for each documented file showing\n# the direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDED_BY_GRAPH      = YES\n\n# If the CALL_GRAPH tag is set to YES then doxygen will generate a call\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable call graphs for selected\n# functions only using the \\callgraph command. Disabling a call graph can be\n# accomplished by means of the command \\hidecallgraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALL_GRAPH             = NO\n\n# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable caller graphs for selected\n# functions only using the \\callergraph command. Disabling a caller graph can be\n# accomplished by means of the command \\hidecallergraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALLER_GRAPH           = NO\n\n# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\n# hierarchy of all classes instead of a textual one.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGRAPHICAL_HIERARCHY    = YES\n\n# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\n# dependencies a directory has on other directories in a graphical way. The\n# dependency relations are determined by the #include relations between the\n# files in the directories.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDIRECTORY_GRAPH        = YES\n\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n# generated by dot. For an explanation of the image formats see the section\n# output formats in the documentation of the dot tool (Graphviz (see:\n# http://www.graphviz.org/)).\n# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\n# to make the SVG files visible in IE 9+ (other browsers do not have this\n# requirement).\n# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,\n# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and\n# png:gdiplus:gdiplus.\n# The default value is: png.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_IMAGE_FORMAT       = png\n\n# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n# enable generation of interactive SVG images that allow zooming and panning.\n#\n# Note that this requires a modern browser other than Internet Explorer. Tested\n# and working are Firefox, Chrome, Safari, and Opera.\n# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\n# the SVG files visible. Older versions of IE do not have SVG support.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINTERACTIVE_SVG        = NO\n\n# The DOT_PATH tag can be used to specify the path where the dot tool can be\n# found. If left blank, it is assumed the dot tool can be found in the path.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_PATH               =\n\n# The DOTFILE_DIRS tag can be used to specify one or more directories that\n# contain dot files that are included in the documentation (see the \\dotfile\n# command).\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOTFILE_DIRS           =\n\n# The MSCFILE_DIRS tag can be used to specify one or more directories that\n# contain msc files that are included in the documentation (see the \\mscfile\n# command).\n\nMSCFILE_DIRS           =\n\n# The DIAFILE_DIRS tag can be used to specify one or more directories that\n# contain dia files that are included in the documentation (see the \\diafile\n# command).\n\nDIAFILE_DIRS           =\n\n# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the\n# path where java can find the plantuml.jar file. If left blank, it is assumed\n# PlantUML is not used or called during a preprocessing step. Doxygen will\n# generate a warning when it encounters a \\startuml command in this case and\n# will not generate output for the diagram.\n\nPLANTUML_JAR_PATH      =\n\n# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a\n# configuration file for plantuml.\n\nPLANTUML_CFG_FILE      =\n\n# When using plantuml, the specified paths are searched for files specified by\n# the !include statement in a plantuml block.\n\nPLANTUML_INCLUDE_PATH  =\n\n# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\n# that will be shown in the graph. If the number of nodes in a graph becomes\n# larger than this value, doxygen will truncate the graph, which is visualized\n# by representing a node as a red box. Note that doxygen if the number of direct\n# children of the root node in a graph is already larger than\n# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\n# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n# Minimum value: 0, maximum value: 10000, default value: 50.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_GRAPH_MAX_NODES    = 50\n\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\n# generated by dot. A depth value of 3 means that only nodes reachable from the\n# root by following a path via at most 3 edges will be shown. Nodes that lay\n# further from the root node will be omitted. Note that setting this option to 1\n# or 2 may greatly reduce the computation time needed for large code bases. Also\n# note that the size of a graph can be further restricted by\n# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n# Minimum value: 0, maximum value: 1000, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nMAX_DOT_GRAPH_DEPTH    = 0\n\n# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\n# background. This is disabled by default, because dot on Windows does not seem\n# to support this out of the box.\n#\n# Warning: Depending on the platform used, enabling this option may lead to\n# badly anti-aliased labels on the edges of a graph (i.e. they become hard to\n# read).\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_TRANSPARENT        = NO\n\n# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output\n# files in one run (i.e. multiple -o and -T options on the command line). This\n# makes dot run faster, but since only newer versions of dot (>1.8.10) support\n# this, this feature is disabled by default.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_MULTI_TARGETS      = NO\n\n# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\n# explaining the meaning of the various boxes and arrows in the dot generated\n# graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGENERATE_LEGEND        = YES\n\n# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot\n# files that are used to generate the various graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_CLEANUP            = YES\n"
  },
  {
    "path": "EnigmaIoTUpdate/EnigmaIoTUpdate.py",
    "content": "import base64\nimport paho.mqtt.client as mqtt\nimport time\nimport hashlib\nimport argparse\nimport os\nimport json\n\n# EnigmaIoTUpdate -f <file.bin> -d <address> -t <basetopic> -u <mqttuser> -P <mqttpass> -s <mqttserver>\n#                       -p <mqttport> <-s> -D <speed>\n\nargs = None\nsleepyNode = True\nresultTopic = \"/result/#\"\nsleepSetTopic = \"/set/sleeptime\"\nsleepResultTopic = \"/result/sleeptime\"\notaSetTopic = \"/set/ota\"\notaResultTopic = \"/result/ota\"\notaOutOfSequenceError = \"OTA out of sequence error\"\notaOK = \"OTA finished OK\"\n# otaLength = 0\notaFinished = False\nidx = 0\n\nOTA_OUT_OF_SEQUENCE = 4\nOTA_FINISHED = 6\n\n\ndef on_connect(client, userdata, flags, rc):\n    global args\n\n    if rc == 0:\n        print(\"Connected with result code \" + str(rc))\n        mqtt.Client.connected_flag = True\n    else:\n        print(\"Error connecting. Code =\" + str(rc))\n        return\n\n    sleep_topic = args.baseTopic + \"/\" + args.address + resultTopic\n    client.subscribe(sleep_topic)\n    print(\"Subscribed\")\n\n\ndef on_message(client, userdata, msg):\n    global sleepyNode\n    global idx, otaFinished\n\n    payload = json.loads(msg.payload)\n\n    if msg.topic.find(sleepResultTopic) >= 0 and payload['sleeptime'] == 0:\n        sleepyNode = False\n        print(msg.topic + \" \" + str(msg.payload))\n\n    # payload = msg.payload.decode('utf-8')\n\n    if msg.topic.find(otaResultTopic) >= 0:\n\n        if payload['status'] == OTA_OUT_OF_SEQUENCE:\n            print(payload['last_chunk'], end='')\n            idx = int(payload['last_chunk'])\n\n        elif payload['status'] == OTA_FINISHED:\n            print(\" OTA Finished \", end='')\n            otaFinished = True\n\n\ndef main():\n    global args\n    global sleepyNode\n    global otaFinished\n\n    opt = argparse.ArgumentParser(description='This program allows updating EnigmaIOT node over the air using'\n                                              'MQTT messages.')\n    opt.add_argument(\"-f\", \"--file\",\n                     type=str,\n                     dest=\"filename\",\n                     default=\"program.bin\",\n                     help=\"File to program into device\")\n    opt.add_argument(\"-d\", \"--daddress\",\n                     type=str,\n                     dest=\"address\",\n                     help=\"Device address\")\n    opt.add_argument(\"-t\", \"--topic\",\n                     type=str,\n                     dest=\"baseTopic\",\n                     default=\"enigmaiot\",\n                     help=\"Base topic for MQTT messages\")\n    opt.add_argument(\"-u\", \"--user\",\n                     type=str,\n                     dest=\"mqttUser\",\n                     default=\"\",\n                     help=\"MQTT server username\")\n    opt.add_argument(\"-P\", \"--password\",\n                     type=str,\n                     dest=\"mqttPass\",\n                     default=\"\",\n                     help=\"MQTT server user password\")\n    opt.add_argument(\"-S\", \"--server\",\n                     type=str,\n                     dest=\"mqttServer\",\n                     default=\"127.0.0.1\",\n                     help=\"MQTT server address or name\")\n    opt.add_argument(\"-p\", \"--port\",\n                     type=int,\n                     dest=\"mqttPort\",\n                     default=1883,\n                     help=\"MQTT server port\")\n    opt.add_argument(\"-s\", \"--secure\",\n                     action=\"store_true\",\n                     dest=\"mqttSecure\",\n                     help=\"Use secure TLS in MQTT connection. Normally you should use port 8883\")\n    opt.add_argument(\"--unsecure\",\n                     action=\"store_false\",\n                     dest=\"mqttSecure\",\n                     default=False,\n                     help=\"Use secure plain TCP in MQTT connection. Normally you should use port 1883\")\n    opt.add_argument(\"-D\", \"--speed\",\n                     type=str,\n                     dest=\"otaSpeed\",\n                     default=\"fast\",\n                     help=\"OTA update speed profile: 'fast', 'medium' or 'slow' Throttle this down in case of\"\n                          \"problems with OTA update. Default: %default\")\n\n    # (options, args) = opt.parse_args()\n    args = opt.parse_args()\n\n    if not args.address:\n        opt.error('Destination address not supplied')\n\n    # print(options)\n\n    ota_topic = args.baseTopic + \"/\" + args.address + otaSetTopic\n    mqttclientname = \"EnigmaIoTUpdate\"\n\n    ota_length = os.stat(args.filename).st_size\n\n    delay_options = {\"fast\": 0.02, \"medium\": 0.06, \"slow\": 0.18}\n    packet_delay = delay_options.get(args.otaSpeed, 0.07)\n\n    with open(args.filename, \"rb\") as binary_file:\n        chunked_file = []\n        encoded_string = []\n        n = 212  # Max 215 - 2. Divisible by 4 => 212\n\n        for chunk in iter(lambda: binary_file.read(n), b\"\"):\n            chunked_file.append(chunk)\n        for chunk in chunked_file:\n            encoded_string.append(base64.b64encode(bytes(chunk)).decode('ascii'))\n        # chunked_string = [encoded_string[i:i+n] for i in range(0, len(encoded_string), n)]\n        binary_file.seek(0);\n        hash_md5 = hashlib.md5()\n        for chunk in iter(lambda: binary_file.read(4096), b\"\"):\n            hash_md5.update(chunk)\n\n        # print(hash_md5.hexdigest())\n        binary_file.close()\n\n    mqtt.Client.connected_flag = False\n    client = mqtt.Client(mqttclientname, True)\n    client.username_pw_set(username=args.mqttUser, password=args.mqttPass)\n    if args.mqttSecure:\n        client.tls_set()\n    client.on_connect = on_connect\n    client.on_message = on_message\n\n    client.connect(host=args.mqttServer, port=args.mqttPort)\n    while not client.connected_flag:  # wait in loop\n        print(\"Connecting to MQTT server\")\n        client.loop()\n        time.sleep(1)\n\n    # client.loop_start()\n    sleep_topic = args.baseTopic + \"/\" + args.address + sleepSetTopic\n    client.publish(sleep_topic, \"0\")\n\n    while sleepyNode:\n        print(\"Waiting for non sleepy confirmation\")\n        client.loop()\n        time.sleep(1)\n\n    print(\"Sending hash: \" + hash_md5.hexdigest())\n    md5_str = hash_md5.hexdigest()\n\n    # msg 0, file size, number of chunks, md5 checksum\n    print(\"Sending %d bytes in %d chunks\" % (ota_length,len(encoded_string)))\n    client.publish(ota_topic, \"0,\" + str(ota_length) + \",\" + str(len(encoded_string)) + \",\" + md5_str)\n\n    # for i in range(0, len(chunked_string), 1):\n    print(\"Sending file: \" + args.filename)\n    global idx\n\n    # remove to simulate lost message\n    # error = False\n\n    while idx < len(encoded_string):\n        client.loop()\n        time.sleep(packet_delay)\n        # time.sleep(0.2)\n        # if i not in range(10,13):\n        i = idx + 1\n        client.publish(ota_topic, str(i) + \",\" + encoded_string[idx])\n        idx = idx + 1\n\n        # remove to simulate lost message\n        # if idx == 100 and not error:\n        #    error = True\n        #    idx = idx + 1\n\n        if i % 2 == 0:\n            print(\".\", end='')\n        if i % 160 == 0:\n            print(\" %.f%%\" % (i / len(encoded_string) * 100))\n        if i == len(encoded_string):\n            for i in range(0, 40):\n                client.loop()\n                time.sleep(0.5)\n                if otaFinished:\n                    print(\" OTA OK \", end='')\n                    break\n\n    print(\"100%\")\n    # time.sleep(5)\n    client.disconnect()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright (c) 2022 gmag11@github\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "_config.yml",
    "content": "theme: jekyll-theme-cayman\nsource: docs/html"
  },
  {
    "path": "docs/api.md",
    "content": "## Server API\n\nSince version 0.9.6 of EnigmaIOT, network connected Gateways may include a REST API to get information and manage nodes.\n\nThis enables future development of a web frontend for EnigmaIOT Gateways.\n\nAll requests parameters are sent as URL encoded.\n\nAll responses are given in JSON format\n\n### Gateway information\n\n| Entry point        | Parameters | Method | Response                                                     | Comments                                                     |\n| ------------------ | ---------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ |\n| `/api/gw/info`     |            | GET    | **version**: EnigmaIOT library version<br/>**network**: EnigmaIOT network name<br/>**addresses**: <br/>    **AP**: Gateway AP mac address<br/>    **STA**: Gateway STA mac address<br/>**channel**: WiFi channel used<br/>**ap**: AP name<br/>**bssid**: AP mac address<br/>**rssi**: AP RSSI (dBm)<br/>**txpower**: Gateway WiFi power (dBm)<br/>**dns**: DNS Address | Gets gateway network information                             |\n| /api/gw/nodenumber |            | GET    | **nodeNumber**: Number of registered nodes                   | Gets current number of registered nodes                      |\n| /api/gw/maxnodes   |            | GET    | **maxNodes**: Maximum number of nodes allowed                | Gets the maximum number of nodes that can be registered in gateway |\n\n\n\n### Gateway commands\n\n| Entry point    | Parameters | Method | Response                            | Comments                                        |\n| -------------- | ---------- | ------ | ----------------------------------- | ----------------------------------------------- |\n| api/gw/restart | confirm=1  | PUT    | **gw_restart**: <processed \\| fail> | Restarts gateway software. Confirm must be 1    |\n| api/gw/reset   | confirm=1  | PUT    | **gw_reset**: <processed \\| fail>   | Resets gateway configuration. Confirm must be 1 |\n\n\n\n### Node information\n\n| Entry point    | Parameters | Method | Response                                                     | Comments                                                     |\n| -------------- | ---------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ |\n| /api/gw/nodes  |            | GET    | **nodes**: `<list>`<br/>    **nodeId**: Node identifier assigned by gateway<br/>    **address**: Node mac address<br/>    **name**: Node name | Gets a list of registered nodes with nodeId, address and name |\n| /api/node/node | nodeid     | GET    | **version**: EnigmaIOT library version<br/>**node_id**: NodeID<br/>address: Node mac address<br/>**Name**: Node name<br/>**keyValidSince**: Time since session key was last refreshed (seconds)<br/>**lastMessageTime**: Time since last message (seconds)<br/>**sleepy**: True \\| False<br/>**broadcast**: True \\| False<br/>**rssi**: Received gateway power from node<br/>**packetsHour**: Packet rate (pkt/h)<br/>**per**: Packet error rate (%) | Gets node information given its nodeID                       |\n| /api/node/node | nodename   | GET    | **version**: EnigmaIOT library version<br/>**node_id**: NodeID<br/>address: Node mac address<br/>**Name**: Node name<br/>**keyValidSince**: Time since session key was last refreshed (seconds)<br/>**lastMessageTime**: Time since last message (seconds)<br/>**sleepy**: True \\| False<br/>**broadcast**: True \\| False<br/>**rssi**: Received gateway power from node<br/>**packetsHour**: Packet rate (pkt/h)<br/>**per**: Packet error rate (%) | Gets node information given its name                         |\n| /api/node/node | nodeaddr   | GET    | **version**: EnigmaIOT library version<br/>**node_id**: NodeID<br/>address: Node mac address<br/>**Name**: Node name<br/>**keyValidSince**: Time since session key was last refreshed (seconds)<br/>**lastMessageTime**: Time since last message (seconds)<br/>**sleepy**: True \\| False<br/>**broadcast**: True \\| False<br/>**rssi**: Received gateway power from node<br/>**packetsHour**: Packet rate (pkt/h)<br/>**per**: Packet error rate (%) | Gets node information given its mac address                  |\n\n\n\n### Node commands\n\n| Entry point       | Parameters | Method | Response                       | Comments                               |\n| ----------------- | ---------- | ------ | ------------------------------ | -------------------------------------- |\n| /api/node/node    | nodeid     | DEL    | **result**: Error string       | Unregisters node given its nodeID      |\n| /api/node/node    | nodename   | DEL    | **result**: Error string       | Unregisters node given its name        |\n| /api/node/node    | nodeaddr   | DEL    | **result**: Error string       | Unregisters node given its mac address |\n| /api/node/restart | nodename   | PUT    | **node_restart**: Error string | Triggers node restart                  |\n\n"
  },
  {
    "path": "docs/howto.md",
    "content": "This document will serve as a guide to start working with EnigmaIOT, enabling you to develop your own secure sensor network easily, with a few additional lines of code compared with a regular Arduino program.\n\n# What you need\n\n### Gateway\nAny ESP32 or ESP8266 will do the job. Anyway, it is always recommended to use an **ESP32** board because having much more RAM it will be more stable along time.\n\n**Notice that it is not possible to configure any node if you don't have a gateway working nearby.**\n\n### MQTT broker\nYou need to use a MQTT broker (or server). Any public or private will do the job. As EnigmaIOT is focused on privacy I advise to install your own MQTT private broker. You can do it on any home server or Raspberry Pi, or even in a virtual private server.\nInstalling and configuring a broker is out of scope of this guide but there are plenty of good and easy guides online.\n\nA good choice for a MQTT broker is [Eclipse Mosquitto](https://mosquitto.org).\n\nDon't forget to add a user and password to broker at least. EnigmaIOT supports MQTT brokers with TLS encryption. If you expose your broker to the public Internet adding TLS to your setup will improve privacy and security, so it is highly encouraged.\n\nUsing MQTT enables you to use a wide range or solutions to process, display information and manage your EnigmaIOT nodes. Good choices are [Node-Red](https://nodered.org) and [Home Assistant](https://www.home-assistant.io), although you can use any software that is able to communicate with a MQTT broker, or any combination of them.\n\n## Required External libraries\n\nAll examples have a `platformio.ini` file so that they can be compiled using PlatformIO without any additional requirement.\n\nIf you use Arduino IDE instead, you have to install all these libraries into your environment:\n\n- ESPAsyncTCP -- https://github.com/me-no-dev/ESPAsyncTCP **(Required only for ESP8266)**\n- AsyncTCP -- https://github.com/me-no-dev/AsyncTCP **(Required only for ESP32)**\n- ESPAsyncWebServer -- https://github.com/me-no-dev/ESPAsyncWebServer\n- ESPAsyncWiFiManager -- https://github.com/gmag11/ESPAsyncWiFiManager forked from https://github.com/alanswx/ESPAsyncWiFiManager\n- Arduino Crypto Library -- https://github.com/gmag11/CryptoArduino forked and formatted from https://github.com/rweather\n- PubSubClient -- https://github.com/knolleary/pubsubclient\n- CayenneLPP -- https://github.com/sabas1080/CayenneLPP version > 1.0.2\n- ArduinoJSON 6 -- https://github.com/bblanchon/ArduinoJson version > 6.0.0\n\n# How to start with EnigmaIOT MQTT Gateway\n\n### Install Gateway code on ESP32 or ESP8266\n\nCode for gateway is included as an example on EnigmaIOT repository, as `EnigmaIOTGatewayMQTT`. You can find it [here](https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOTGatewayMQTT).\n\nIt may be used as it is. There is no need to modify it to be able to customize to your needs. Everything is done during first configuration.\n\nYou can use binary file included in release as an attachment or compile it by yourself.\n\n### Loading binary file\n\nYou will need [Espressif esptool](https://github.com/espressif/esptool) utility to flash binary file on your ESP32 or ESP8266. If your system has Python and pip installed you can install esptool by running\n\n```bash\npip install esptool\n```\n\nEsptool will detect your board type and the port on which it is attached to so command line will be as simple as this:\n\nIt your MQTT broker uses TLS\n\n```bash\npython esptool.py write_flash 0 EnigmaIOT-Gateway-ESP32-SSL_MQTT.bin\n```\n\nIf your MQTT broker does not use encrypted communication\n\n```bash\npython esptool.py write_flash 0 EnigmaIOT-Gateway-ESP32-Plain_MQTT.bin\n```\n\nIf you have a ESP8266 (MQTT encryption is not supported)\n\n```bash\npython esptool.py write_flash 0 EnigmaIOT-Gateway-ESP8266.bin\n```\n\n### Configuring your gateway\n\nFirst time you run EnigmaIOT gateway it will behave as a WiFi access point with name `EnigmaIOTGateway`. Connect your smartphone or computer to it.\n\nA web browser should be open automatically pointing to configuration portal. If it is not the case you can access it opening http://192.168.4.1.\n\nYou should see something like this:\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/EnigmaIOTGateway_config_portal.png\" style=\"zoom:50%;\" />\n\n\n\nClick on `Configure WiFi` and board will scan networks. Select yours and continue filling all fields\n\n\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/EnigmaIOTGateway_wifi_selection.png\" alt=\"image-20210703000533470\" style=\"zoom: 50%;\" />\n\nFields explanation:\n\n**SSID**: Name of your home WiFi network.\n\n**WiFi Password**: Your home WiFi password.\n\n**Network Key**: Network key for your EnigmaIOT network. All nodes and gateway must share this key. Choose a secure password and keep it safe.\n\n**Network Channel**: EnigmaIOT gateway initial channel. This is not relevant for MQTT gateway as it will use the same as your WiFi network.\n\n**Network Name**: EnigmaIOT network name. This identify your network. This name will be used as root for all MQTT messages to and from this gateway.\n\n**MQTT broker address**: IP address or hostname where MQTT broker is listening on\n\n**TCP port**: TCP port used by MQTT broker. 8883 is normally used by brokers with TLS encryption configured. 1883 is used otherwise.\n\n**MQTT username**: Username configured on MQTT broker.\n\n**MQTT password**: User password.\n\nWhen you click `save` button and boards successfully connects to your WiFi network it reboots to start working as a real EnigmaIOT gateway.\n\nNow you are ready to start your own EnigmaIOT network.\n\n### Customizing gateway firmware\n\nAlthough you can use gateway code as it is. There are some customizations available for experienced users.\n\n#### EnigmaIOTGatewayMQTT.ino\n\n`LED_BUILTIN`: On many ESP32 boards, built in LED is connected to Pin 5. On EnigmaIOTGatewayMQTT, LED is used to signal configuration mode (flashing LED) and to show activity from nodes. If your board uses a different pin you can set it here. You may use different LEDs to signal received or sent message, In that case you may set `BLUE_LED` and `RED_LED`.\n\n#### dstrootca.h\n\nIf you use TLS to encrypt communication with MQTT broker, then you must provide the root certificate used to check server certificate. This varies between different certificate providers. Included certificate works with  [Let's encrypt](https://letsencrypt.org). If you use a different provider or you have setup your own public key infrastructure you need to copy your CA certificate in [PEM format](https://knowledge.digicert.com/quovadis/ssl-certificates/ssl-general-topics/what-is-pem-format.html) assigned to `DSTroot_CA` variable.\n\nYou can use [certificate decoder from SSLChecker.com](https://www.sslchecker.com/certdecoder) to dump certificate data, as expiration date.\n\n#### EnigmaIOTconfig.h\n\nThis file is on library code directory. There are some settings that you can tweak there before compilation. There are explanation for every parameter on file itself. Although it is safe to adjust these settings some combinations may lead your gateway to not be able to communicate with nodes. I do not recommend tweaking settings that you don't understand clearly.\n\n`NUM_NODES` parameter is used to configure the maximum number of nodes. It is set to 35 by default that should be enough for most users. You may increase it if you expect your network to grow above this limit. \n\nFor ESP32 boards a limit of 100 or 200 nodes is safe, but ESP8266 may not have enough memory so if you find frequent reboots after setting this restore it to the default value.\n\n# How to develop a node with EnigmaIOT on ESP32 or ESP8266\n\nEnigmaIOT is designed to hide all complexity behind, so that anyone that is barely familiar with Arduino environment is able to develop a node.\n\n### Bare basic code\n\nSimplest node code may be something like this.\n\n```c++\n#include <EnigmaIOTNode.h> // Include EnigmaIOT node library\n#include <espnow_hal.h>    // Add ESP-NOW subsystem\nvoid setup () {\n    EnigmaIOTNode.begin (&Espnow_hal); // Start node code\n    char msg[] = \"20\"; // Build a message to send\n    EnigmaIOTNode.sendData ((uint8_t*)msg, sizeof (msg) - 1, RAW); // Send data as RAW\n    EnigmaIOTNode.sleep (); // Request node to sleep\n}\nvoid loop () {\n    EnigmaIOTNode.handle (); // Don't forget this\n}\n```\n\nIf you use [PlatformIO](https://platformio.org) IDE you may use this platformio.ini\n\n```ini\n[env:d1_mini_pro]\nplatform = espressif8266\nboard = d1_mini_pro\nframework = arduino\nlib_deps =\n   ESPAsyncWiFiManager\n   ESP Async WebServer\n   ArduinoJson\n   https://github.com/gmag11/CryptoArduino.git\n   https://github.com/gmag11/EnigmaIOT.git\n```\n\n### First node configuration\n\nIn the same way as we did with gateway, when node starts for first time it announces itself as a WiFi access point with name EnigmaIoTNode followed by chipID.\n\nWhen you connect to this AP without password you get a web page like this:\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/img/EnigmaIOTNode_config_portal.png\" alt=\"image-20210704121322147\" style=\"zoom:50%;\" />\n\nClick on `Configure WiFi` button and you will get the list of WiFi networks around. It is important not to select your home WiFi network here. It is not what an EnigmaIOT node needs. You should select the one whose name is you EnigmaIOT network name. This comes from your EnigmaIOT gateway.\n\nThis AP needs a password it is the one that you configured as Network key in your gateway.\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/EnigmaIOTNode_wifi_selection.png\" alt=\"image-20210704121626137\" style=\"zoom:50%;\" />\n\n\n\nYou need to fill this settings in:\n\n**SSID**: Your network name (as configured in gateway)\n\n**Password**: Your network key (as configured in gateway)\n\n**Sleep time**: A node may be designed to sleep after sending a message. In that case this is the default sleep time in seconds. If your node does not go to sleep mode, then this setting is ignored.\n\n**Node Name**: This is your node name. It must be unique in your network. It a gateway find a node with duplicate name this name will be ignored and will use its MAC address instead.\n\n------------\n\nAfter information is saved, node checks that it can connect Gateway WiFi AP successfully. If so, it reboots and start sending data.\n\nUsing EnigmaIOTGatewayMQTT you will get a MQTT message every time your node sends data.\n\n```\nEnigmaIOT/SimpleNode/data   20\n```\n\nTopic format is always the same:\n\n```\n<NetworkName>/<NodeName>/data\n```\n\n# Developing advanced nodes using JSONController template\n\nIf you need to build a node you may start coding from scratch as it is shown before. Additionally you can use a Template so many features are already implemented transparently:\n\n- Sleep management\n- Connection and disconnection handling\n- Send data as JSON object\n- [Home Assistant](https://www.home-assistant.io) auto discovery integration feature.\n- WiFi Manager custom parameters\n- Integrated [fail safe mode](https://github.com/gmag11/FailSafeMode)\n\n### Designing sensor algorithm\n\nJSON Controller wraps EnigmaIOT node with additional features. It is implemented as a cpp and h files that contains `setup ()` and `loop ()` functions. You should use them instead main setup and loop.\n\nFirst step I recommend is coding a simple sketch that deals with your hardware (sensors, actuators) as a regular Arduino program. To illustrate this I will use EnigmaIOT-Sensor-Controller example. It is a node that uses a DS18B20 temperature sensor that reads temperature value, sends it and then sleeps until next measurement.\n\nSo starting code could look like this\n\n```c++\n#include <DallasTemperature.h>\n\n#define ONE_WIRE_BUS 4 // I/O pin used to communicate with sensor\n\n//----------------- GLOBAL VARIABLES -----------------\nOneWire* oneWire;\nDallasTemperature* sensors;\nDeviceAddress insideThermometer;\nbool tempSent = false; // True when\nfloat tempC;\n//----------------- GLOBAL VARIABLES -----------------\n\nbool sendTemperature (float temp) { // Mock function. This will later be adapted to send an EnigmaIOT message\n    Serial.printf (\"Temperarure: %f\\n\", temp);\n    return true;\n}\n\nvoid setup () {\n    Serial.begin (115200); // Only for this test\n    \n    //----------------- USER CODE -----------------\n    oneWire = new OneWire (ONE_WIRE_BUS);\n\tsensors = new DallasTemperature (oneWire);\n\tsensors->begin ();\n\tsensors->setWaitForConversion (false);\n\tsensors->requestTemperatures ();\n    \n    time_t start = millis (); \n    \n    while (!sensors->isConversionComplete ()) {\n\t\tdelay (0);\n\t}\n\tSerial.printf (\"Conversion completed in %lld ms\\n\", millis () - start);\n    tempC = sensors->getTempCByIndex (0);\n    //----------------- USER CODE END -------------\n}\n\nvoid loop () {\n    //----------------- USER CODE -----------------\n    if (!tempSent) { \n        if (sendTemperature (tempC)) { // First time this will be executed\n            tempSent = true;\n        }\n    }\n    //----------------- USER CODE END -------------\n    else {\n        ESP.deepSleep(10000); // Next time deep sleep mode will be requested automatically. Only for testing\n    }\n}\n```\n\nWhen this code has the functionality that you need and it is tested you can follow with integration on EnigmaIOT JSON Controller code.\n\n### Code integration into EnigmaIOT\n\nTo develop a new JSONController node you need to use [JSONController template](https://github.com/gmag11/EnigmaIOT/tree/dev/examples/EnigmaIOT-Json-Controller-Template) example as starting point.\n\nI will follow the process to get to the point implemented in [**EnigmaIOT-Sensor-Controller**](https://github.com/gmag11/EnigmaIOT/tree/dev/examples/EnigmaIOT-Sensor-Controller).\n\nYou need to follow these steps:\n\n#### Rename JSON Controller files and class\n\n   It is recommended to rename cpp and h files so that its name is coherent with the function they have. Following this, `BasicController.h/cpp`  will become `ds18b20Controller.h/cpp`. Then edit `CONTROLLER_CLASS_NAME` and `CONTROLLER_NAME` on `ds18b20Controller.h` like this:\n\n```c++\n#define CONTROLLER_CLASS_NAME ds18b20Controller\nstatic const char* CONTROLLER_NAME = \"DS18B20 controller\";\n```\n\nand two first lines to:\n\n```c++\n#ifndef _DS18B20CONTROLLER_h\n#define _DS18B20CONTROLLER_h\n```\n\n#### Define if your node should sleep\n\nIf you want to design a node that is powered with batteries, then it should enter into deep sleep mode after sending its data. To do so you only need to set `SLEEPY ` to 1 or `true`. You need to do so on main cpp file. In sensor controller example, it is `EnigmaIOT-Sensor-Controller.ino`.\n\n```c++\n#define SLEEPY 1 // Set it to 1 if your node should sleep after sending data\n```\n\nIt you don't need sleep function leave it as 0.\n\nNotice that non sleepy nodes have an additional time synchronization function that is not available for nodes that enter deep sleep mode. This allows you to add features as timer or time synchronized tasks in different nodes.\n\n#### Copy global variables as class parameters\n\nYou need to add all global variables defined in Arduino code as JSON Controller class parameters in `ds18b20Controller.h`.\n\n```c++\nclass CONTROLLER_CLASS_NAME : EnigmaIOTjsonController {\nprotected:\n\t// --------------------------------------------------\n\t// add all parameters that your project needs here\n\t// --------------------------------------------------\n\tOneWire* oneWire;\n\tDallasTemperature* sensors;\n    DeviceAddress insideThermometer;\n    bool tempSent = false;\n    float tempC;\n```\n\n#### Add custom libraries\n\nIf your code needs custom libraries you may add them on JSON controller header file (`ds18b20Controller.h`)\n\n```c++\n// --------------------------------------------------\n// You may define data structures and constants here\n// --------------------------------------------------\n#include <DallasTemperature.h>\n```\n\n\n\n#### Add custom function as class methods\n\nIn the same way you should add custom functions like `sendTemperature ()` as class methods. You need to define them in `ds18b20Controller.h`\n\n```c++\n    // ------------------------------------------------------------\n\t// You may add additional method definitions that you need here\n\t// ------------------------------------------------------------\n\n    bool sendTemperature (float temp);\n```\n\n#### Include Home Assistant integration\n\nIf you like to integrate your node into HomeAssistant you may include the corresponding header file.\n\n```c++\n#if SUPPORT_HA_DISCOVERY    \n#include <haSensor.h>\n#endif\n```\n\nYou need to choose the file to include according node function. As this will be a sensor node we should use `haSensor.h`. If your node uses different profiles you can include several HA integration header files. For instance, a smart metering plug is a sensor (Power measurement) and binary switch (ON-OFF).\n\nThen you need to add configuration on cpp file. In sensor controller node example it is \n\n```c++\n\t// *******************************\n    // Add your characteristics here\n    // There is no need to futher modify this function\n    haEntity->setNameSufix (\"temp\");\n    haEntity->setDeviceClass (sensor_temperature);\n    haEntity->setExpireTime (3600);\n    haEntity->setUnitOfMeasurement (\"ºC\");\n    haEntity->setValueField (\"temp\");\n    // *******************************\n```\n\n#### Add defines\n\nAll needed defines and constants that you need in your code may be added at the beginning of controller cpp file. You can add them to header file instead but it is a good practice to restrict its code visibility.\n\n```c++\n// -----------------------------------------\n// You may add some global variables you need here,\n// like serial port instances, I2C, etc\n// -----------------------------------------\n\n#define ONE_WIRE_BUS 4\n```\n\n#### Correct JSON controller header include in cpp file\n\nIf you modified file and class names you will need to update include in cpp file\n\n```c++\n#include \"ds18b20Controller.h\"\n```\n\n#### Add `setup()` and `loop()`code to class method\n\nNow, you can start integrating your code into JSON controller class. You need to copy setup and loop code into corresponding methods in JSON controller class.\n\n```c++\nvoid CONTROLLER_CLASS_NAME::setup (EnigmaIOTNodeClass* node, void* data) {\n\tenigmaIotNode = node;\n\n    // Send a 'hello' message when initalizing is finished for non sleepy nodes\n    if (!enigmaIotNode->getNode ()->getSleepy ()) {\n        if (!(enigmaIotNode->getNode ()->getSleepy ())) {\n            sendStartAnouncement ();  // Disable this if node is sleepy\n        }\n    }\n    // Send hello end\n    \n\t// You do node setup here. Use it as it was the normal setup() Arduino function\n\n\toneWire = new OneWire (ONE_WIRE_BUS);\n\tsensors = new DallasTemperature (oneWire);\n\tsensors->begin ();\n\tsensors->setWaitForConversion (false);\n\tsensors->requestTemperatures ();\n    time_t start = millis ();\n\n\twhile (!sensors->isConversionComplete ()) {\n\t\tdelay (0);\n\t}\n\tDEBUG_WARN (\"Conversion completed in %d ms\", millis () - start);\n    tempC = sensors->getTempCByIndex (0);\n}\n```\n\n```c++\nvoid CONTROLLER_CLASS_NAME::loop () {\n\n\t// If your node stays allways awake do your periodic task here\n\n\t// You can send your data as JSON. This is a basic example\n\n    if (!tempSent && enigmaIotNode->isRegistered()) {\n        if (sendTemperature (tempC)) {\n            tempSent = true;\n        }\n    }\n    \n}\n```\n\nNotice that I've added `enigmaIotNode->isRegistered()` to send data only if node has already registered with Gateway and not losing messages.\n\n#### Add custom functions as class methods\n\nAdd every custom function you have used as method into the class. You already added definitions in header file before. Now add the implementation to cpp file\n\n```c++\nbool CONTROLLER_CLASS_NAME::sendTemperature (float temp) {\n\tconst size_t capacity = JSON_OBJECT_SIZE (2);\n\tDynamicJsonDocument json (capacity);\n\tjson[\"temp\"] = temp;\n\n\treturn sendJson (json);\n}\n```\n\nThis creates a JSON object with all data you need and sends it to gateway using `sendJson ()` method. Notice that EnigmaIOT uses esp-now protocol to communicate nodes with gateway. This implies a limit of 250 bytes per message, including headers. So, if you have problem receiving messages or you get partial data check the length of your payload.\n\n#### Additional functions\n\nThere are a few of additional functions. Check other controller examples to learn how to use them.\n\n- [**EnigmaIOTButtonController**](https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOT-Button-Controller): Node that send messages when a button is pressed. (Non sleepy)\n- [**EnigmaIOT-DashButton-Controller**](https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOT-DashButton-Controller): Node that wakes from deep sleep when a button is pressed, send its message and sleeps indefinitely. (Sleepy)\n- [**EnigmaIOT-Led-Controller**](https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOT-Led-Controller): Node that controls a singled light or LED (Non sleepy)\n- [**EnigmaIOT-Sensor-Controller**](https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOT-Sensor-Controller): Node that send value from a DS18B20 temperature sensor regularly. (Sleepy)\n- [**EnigmaIOT-SmartSwitch-Controller**](https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOT-SmartSwitch-Controller): Smart switch that uses a button to toggle a relay. It sends status messages regularly and on every toggle action. It listens for messages to allow remote control. (Non sleepy)\n\n##### Listen for incoming messages from gateway\n\nSome kind of nodes as light controllers or smart switches should accept incoming messages to control different parameters. This can be achieved with `processRxCommand` and `sendCommandResp`.\n\n##### Notice when a node is connected or disconnected from EnigmaIOT network\n\nIt may be useful for a node to know if it is actually connected to gateway. To implement this you may fill these two methods: `connectInform` and `disconnectInform`.\n\n##### Save and recover custom persistent configuration\n\nSometimes you need some data to be stored persistently on node sleeps or power cycles. There are a couple methods that may be implemented to achieve this: `loadConfig` and `saveConfig`.\n\n##### Add custom parameters to configuration portal\n\nYou may want to add your own configuration fields to first configuration web portal on node. You can get this by implementing `configManagerStart` and `configManagerExit`.\n\n#### Advanced tuning\n\nThere are some advanced settings on `EnigmaIOTconfig.h`. You may modify this data but it is important that you understand what every setting means. If you adjust them randomly you may get into instabilities or your node may be unable to communicate at all. \n\n\n\n"
  },
  {
    "path": "docs/html/BasicController_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Json-Controller-Template/BasicController.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d330a1fb834c3b104c380ea4a26b63bb.html\">EnigmaIOT-Json-Controller-Template</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">BasicController.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;functional&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"BasicController_8h_source.html\">BasicController.h</a>&quot;</code><br />\n</div>\n<p><a href=\"BasicController_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"BasicController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = &quot;/customconf.json&quot;</td></tr>\n<tr class=\"memdesc:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Custom configuration file name.  <a href=\"BasicController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">More...</a><br /></td></tr>\n<tr class=\"separator:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0a5b20c0a44622656e3028948ca20a47\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0a5b20c0a44622656e3028948ca20a47\">&#9670;&nbsp;</a></span>CONFIG_FILE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto CONFIG_FILE = &quot;/customconf.json&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Custom configuration file name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"BasicController_8cpp_source.html#l00011\">11</a> of file <a class=\"el\" href=\"BasicController_8cpp_source.html\">BasicController.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/BasicController_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Json-Controller-Template/BasicController.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d330a1fb834c3b104c380ea4a26b63bb.html\">EnigmaIOT-Json-Controller-Template</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">BasicController.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"BasicController_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160; </div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"BasicController_8h.html\">BasicController.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160; </div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"keyword\">using namespace </span>std;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"keyword\">using namespace </span>placeholders;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\"><a class=\"line\" href=\"BasicController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">   11</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"BasicController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = <span class=\"stringliteral\">&quot;/customconf.json&quot;</span>; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"comment\">// You may add some global variables you need here,</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// like serial port instances, I2C, etc</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;    <span class=\"comment\">// Process incoming messages here</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;    <span class=\"comment\">// They are normally encoded as MsgPack so you can confert them to JSON very easily</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160; </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160; </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result) {</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;    <span class=\"comment\">// Respond to command with a result: true if successful, false if failed </span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a> () {</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"comment\">// Register every HAEntity discovery function here. As many as you need</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;    addHACall (std::bind (&amp;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a>, <span class=\"keyword\">this</span>));</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160; </div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    enigmaIotNode = node;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    <span class=\"comment\">// You do node setup here. Use it as it was the normal setup() Arduino function</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <span class=\"comment\">// Send a &#39;hello&#39; message when initalizing is finished</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    <span class=\"keywordflow\">if</span> (!(enigmaIotNode-&gt;getNode ()-&gt;getSleepy ())) {</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        sendStartAnouncement ();  <span class=\"comment\">// Disable this if node is sleepy</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Finish begin&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <span class=\"comment\">// If your node should sleep after sending data do all remaining tasks here</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160; </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a> () {</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160; </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    <span class=\"comment\">// If your node stays allways awake do your periodic task here</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160; </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    <span class=\"comment\">// You can send your data as JSON. This is a basic example</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160; </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"comment\">//const size_t capacity = JSON_OBJECT_SIZE (4);</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"comment\">//DynamicJsonDocument json (capacity);</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"comment\">//json[&quot;sensor&quot;] = data_description;</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"comment\">//json[&quot;meas&quot;] = measurement;</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"comment\">//sendJson (json);</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160; </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160; </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a> () {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    <span class=\"comment\">// It your class uses dynamic data free it up here</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    <span class=\"comment\">// This is normally not needed but it is a good practice</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160; </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a> () {</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration start ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    <span class=\"comment\">// If you need to add custom configuration parameters do it here</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160; </div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration result ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    <span class=\"comment\">// You can read configuration paramenter values here</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    <span class=\"comment\">// If you need to read custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160; </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    <span class=\"comment\">// If you need to save custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160; </div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY   </span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"comment\">// Repeat this method for every entity</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a> () {</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <span class=\"comment\">// Select corresponding HAEntiny type</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    <a class=\"code\" href=\"classHATrigger.html\">HATrigger</a>* haEntity = <span class=\"keyword\">new</span> <a class=\"code\" href=\"classHATrigger.html\">HATrigger</a> ();</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    uint8_t* msgPackBuffer;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160; </div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    <span class=\"keywordflow\">if</span> (!haEntity) {</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;JSON object instance does not exist&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160; </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    <span class=\"comment\">// Add your characteristics here</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    <span class=\"comment\">// There is no need to futher modify this function</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">setType</a> (<a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a>);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">setSubtype</a> (<a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">turn_on</a>);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160; </div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"keywordtype\">size_t</span> bufferLen = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ();</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    msgPackBuffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160; </div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <span class=\"keywordtype\">size_t</span> len = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (bufferLen, msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160; </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Resulting MSG pack length: %d&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160; </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <span class=\"keywordflow\">if</span> (!sendHADiscovery (msgPackBuffer, len)) {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending HA discovery message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160; </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    <span class=\"keywordflow\">if</span> (haEntity) {</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">delete</span> (haEntity);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160; </div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    <span class=\"keywordflow\">if</span> (msgPackBuffer) {</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        free (msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassHAEntity_html_ad299ecdb73519da56e2f5439941af544\"><div class=\"ttname\"><a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">HAEntity::measureMessage</a></div><div class=\"ttdeci\">size_t measureMessage()</div><div class=\"ttdoc\">Gets needed buffer size for discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00217\">haEntity.h:217</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a64140dc1e3e041eafbcd6eca04abb9ef\"><div class=\"ttname\"><a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">HAEntity::getAnounceMessage</a></div><div class=\"ttdeci\">size_t getAnounceMessage(int bufferlen, uint8_t *buffer)</div><div class=\"ttdoc\">Gets entity anounce message to be sent over EnigmaIOT message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00153\">haEntity.h:153</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a4fb9c73855aba7474fb26e13bd74f3cf\"><div class=\"ttname\"><a href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">HATrigger::setSubtype</a></div><div class=\"ttdeci\">void setSubtype(ha_triggerSubtype_t subtype)</div><div class=\"ttdoc\">Set trigger subtype as ha_triggerSubtype_t https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00196\">haTrigger.h:196</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae744508f79e2bdfcc7352908d537a671\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop() override</div><div class=\"ttdoc\">This should be called periodically for module handling.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00053\">ButtonController.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab5ec6ad2c5cd0f6edfb7635aba862915\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a></div><div class=\"ttdeci\">void buildHADiscovery()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00124\">ButtonController.cpp:124</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a6fc95acd652b504ae0e342f7ce5450c3\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart() override</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00103\">ButtonController.cpp:103</a></div></div>\n<div class=\"ttc\" id=\"aBasicController_8h_html\"><div class=\"ttname\"><a href=\"BasicController_8h.html\">BasicController.h</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00098\">ButtonController.cpp:98</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4a58511842391487187927dd1b87a0dc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig() override</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00119\">ButtonController.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00031\">ButtonController.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">turn_on</a></div><div class=\"ttdeci\">@ turn_on</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00105\">haTrigger.h:105</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a></div><div class=\"ttdeci\">@ button_short_press</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00083\">haTrigger.h:83</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a68bf2951e6f5ba11894856104e062e6e\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result) override</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00026\">ButtonController.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html\"><div class=\"ttname\"><a href=\"classHATrigger.html\">HATrigger</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00126\">haTrigger.h:126</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a9fc25e3bff52d9d4a642e5a604dd7c44\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status) override</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00109\">ButtonController.cpp:109</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aBasicController_8cpp_html_a0a5b20c0a44622656e3028948ca20a47\"><div class=\"ttname\"><a href=\"BasicController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a></div><div class=\"ttdeci\">constexpr auto CONFIG_FILE</div><div class=\"ttdoc\">Custom configuration file name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"BasicController_8cpp_source.html#l00011\">BasicController.cpp:11</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00040\">ButtonController.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a440e2979ce22f7fac243f6063469db6c\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override</div><div class=\"ttdoc\">Called to process a downlink command.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00019\">ButtonController.cpp:19</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab2dd07a8fecca7f083f2776dbc294dc9\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig() override</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00114\">ButtonController.cpp:114</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_adda48fb69d4ad6c9f95dfb7f7f92b79c\"><div class=\"ttname\"><a href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">HATrigger::setType</a></div><div class=\"ttdeci\">void setType(ha_triggerType_t type)</div><div class=\"ttdoc\">Set trigger type as ha_triggerType_t https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00178\">haTrigger.h:178</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/BasicController_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Json-Controller-Template/BasicController.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d330a1fb834c3b104c380ea4a26b63bb.html\">EnigmaIOT-Json-Controller-Template</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">BasicController.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n</div>\n<p><a href=\"BasicController_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"BasicController_8h.html#a8257556540571a0fe1f5f05eb434af87\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;BasicController</td></tr>\n<tr class=\"separator:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"BasicController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = &quot;EnigmaIOT <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a> template&quot;</td></tr>\n<tr class=\"separator:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a8257556540571a0fe1f5f05eb434af87\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8257556540571a0fe1f5f05eb434af87\">&#9670;&nbsp;</a></span>CONTROLLER_CLASS_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;BasicController</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"BasicController_8h_source.html#l00015\">15</a> of file <a class=\"el\" href=\"BasicController_8h_source.html\">BasicController.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0cf4eba0801e84be66f6198f07bfe287\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0cf4eba0801e84be66f6198f07bfe287\">&#9670;&nbsp;</a></span>CONTROLLER_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* CONTROLLER_NAME = &quot;EnigmaIOT <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a> template&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"BasicController_8h_source.html#l00016\">16</a> of file <a class=\"el\" href=\"BasicController_8h_source.html\">BasicController.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/BasicController_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Json-Controller-Template/BasicController.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d330a1fb834c3b104c380ea4a26b63bb.html\">EnigmaIOT-Json-Controller-Template</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">BasicController.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"BasicController_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// BasicController.h</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160; </div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#ifndef _BASICCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#define _BASICCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160; </div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"comment\">//#define DEBUG_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"BasicController_8h.html#a8257556540571a0fe1f5f05eb434af87\">   15</a></span>&#160;<span class=\"preprocessor\">#define CONTROLLER_CLASS_NAME BasicController</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"BasicController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">   16</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"BasicController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = <span class=\"stringliteral\">&quot;EnigmaIOT controller template&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"haTrigger_8h.html\">haTrigger.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">// You may define data structures and constants here</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> : <a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> {</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    <span class=\"comment\">// add all parameters that your project needs here</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">   38</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> = NULL);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">   48</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">   53</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a> ();</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">   58</a></span>&#160;    <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ();</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">   63</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160; </div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">   69</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160; </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">   75</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">   80</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">   87</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160; </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">   94</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">   99</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a> () {</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        <span class=\"comment\">// You can send a &#39;hello&#39; message when your node starts. Useful to detect unexpected reboot</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (10);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        json[<span class=\"stringliteral\">&quot;status&quot;</span>] = <span class=\"stringliteral\">&quot;start&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        json[<span class=\"stringliteral\">&quot;device&quot;</span>] = <a class=\"code\" href=\"BasicController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a>;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keywordtype\">char</span> version_buf[10];</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        snprintf (version_buf, 10, <span class=\"stringliteral\">&quot;%d.%d.%d&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                  <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[0], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[1], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[2]);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        json[<span class=\"stringliteral\">&quot;version&quot;</span>] = String (version_buf);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160; </div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a> (json);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">  117</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a> ();</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"comment\">// You may add additional method definitions that you need here</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160; </div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aa6218f8b72b75932946bb5ca74b5bc14\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart()</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4848555c02bbbddd9af9f3f60a9117f5\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">Executes repetitive tasks on controller.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a9c45ffb63a64a645032b9c132f86c821\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a></div><div class=\"ttdeci\">static const uint8_t ENIGMAIOT_PROT_VERS[3]</div><div class=\"ttdoc\">EnitmaIoT Version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00016\">EnigmaIoTconfig.h:16</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a584fb205957a7b3ca83fb76066af5268\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdoc\">Processes received GET or SET commands.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae572fe1f0d2bb7b4fb99067d815d5807\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig()</div><div class=\"ttdoc\">Saves output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab5ec6ad2c5cd0f6edfb7635aba862915\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a></div><div class=\"ttdeci\">void buildHADiscovery()</div><div class=\"ttdoc\">Sends a HA discovery message for a single entity. Add as many functions like this as number of entiti...</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae5ece1c030d9063e46127b8a48b7bfa9\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">EnigmaIOTjsonController::sendJson</a></div><div class=\"ttdeci\">bool sendJson(DynamicJsonDocument &amp;json)</div><div class=\"ttdoc\">Sends a JSON encoded message to lower layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00170\">EnigmaIOTjsonController.h:170</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a0965ba804f4f0d1533f888fa9011aa86\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result)</div><div class=\"ttdoc\">Send response to commands to gateway.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div><div class=\"ttdoc\">Default destructor.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html\"><div class=\"ttname\"><a href=\"haTrigger_8h.html\">haTrigger.h</a></div><div class=\"ttdoc\">Home Assistant trigger integration.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Executed as soon as node is registered on EnigmaIOT network.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a92a9cd1826a1a8aaca06c6e208928cdc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initializes controller structures.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a2af1a99bb4a2d7b83125861f127279e8\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">CONTROLLER_CLASS_NAME::sendStartAnouncement</a></div><div class=\"ttdeci\">bool sendStartAnouncement()</div><div class=\"ttdoc\">Sends a notification message including configurable controller name and protocol version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"BasicController_8h_source.html#l00099\">BasicController.h:99</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_afad5a8415e36756b812a53bc889fcd4b\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<div class=\"ttc\" id=\"aBasicController_8h_html_a0cf4eba0801e84be66f6198f07bfe287\"><div class=\"ttname\"><a href=\"BasicController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a></div><div class=\"ttdeci\">static const char * CONTROLLER_NAME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"BasicController_8h_source.html#l00016\">BasicController.h:16</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/ButtonController_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Button-Controller/ButtonController.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_7b1e976c444ae84a02a576fc7d2ecc0c.html\">EnigmaIOT-Button-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ButtonController.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;functional&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a>&quot;</code><br />\n</div>\n<p><a href=\"ButtonController_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = &quot;/customconf.json&quot;</td></tr>\n<tr class=\"memdesc:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Custom configuration file name.  <a href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">More...</a><br /></td></tr>\n<tr class=\"separator:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0a5b20c0a44622656e3028948ca20a47\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0a5b20c0a44622656e3028948ca20a47\">&#9670;&nbsp;</a></span>CONFIG_FILE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto CONFIG_FILE = &quot;/customconf.json&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Custom configuration file name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00011\">11</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/ButtonController_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Button-Controller/ButtonController.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_7b1e976c444ae84a02a576fc7d2ecc0c.html\">EnigmaIOT-Button-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ButtonController.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"ButtonController_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160; </div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"ButtonController_8h.html\">ButtonController.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160; </div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"keyword\">using namespace </span>std;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"keyword\">using namespace </span>placeholders;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\"><a class=\"line\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">   11</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = <span class=\"stringliteral\">&quot;/customconf.json&quot;</span>; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"comment\">// You may add some global variables you need here,</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// like serial port instances, I2C, etc</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160; </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">   19</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;    <span class=\"comment\">// Process incoming messages here</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;    <span class=\"comment\">// They are normally encoded as MsgPack so you can convert them to JSON very easily</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160; </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">   26</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result) {</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    <span class=\"comment\">// Respond to command with a result: true if successful, false if failed </span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160; </div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">   31</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a> () {</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160; </div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    addHACall (std::bind (&amp;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a>, <span class=\"keyword\">this</span>));</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    <span class=\"comment\">// Add more actions here if needed</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    <span class=\"comment\">// Keep this method duration short</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">   40</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    enigmaIotNode = node;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;    <span class=\"comment\">// You do node setup here. Use it as it was the normal setup() Arduino function</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    pinMode (<a class=\"code\" href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">BUTTON_PIN</a>, INPUT_PULLUP);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <span class=\"comment\">// Send a &#39;hello&#39; message when initalizing is finished</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    sendStartAnouncement ();</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160; </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Finish begin&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    <span class=\"comment\">// If your node should sleep after sending data do all remaining tasks here</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">   53</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a> () {</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160; </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    <span class=\"comment\">// If your node stays allways awake do your periodic task here</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160; </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    <span class=\"keywordflow\">if</span> (pushReleased) { <span class=\"comment\">// Enter this only if button were not pushed in the last loop</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keywordflow\">if</span> (!digitalRead (<a class=\"code\" href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">BUTTON_PIN</a>)) {</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;            delay (50); <span class=\"comment\">// debounce button push</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;            <span class=\"keywordflow\">if</span> (!digitalRead (<a class=\"code\" href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">BUTTON_PIN</a>)) {</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Button triggered!&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                pushTriggered = <span class=\"keyword\">true</span>; <span class=\"comment\">// Button is pushed</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                pushReleased = <span class=\"keyword\">false</span>; <span class=\"comment\">// Mark button as not released</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160; </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    <span class=\"keywordflow\">if</span> (pushTriggered) { <span class=\"comment\">// If button was pushed</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        pushTriggered = <span class=\"keyword\">false</span>; <span class=\"comment\">// Disable push trigger</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (2);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        json[<span class=\"stringliteral\">&quot;button&quot;</span>] = <a class=\"code\" href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">BUTTON_PIN</a>;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        json[<span class=\"stringliteral\">&quot;push&quot;</span>] = 1;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keywordflow\">if</span> (sendJson (json)) {</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Push triggered sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Push send error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160; </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    <span class=\"keywordflow\">if</span> (!pushReleased) {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keywordflow\">if</span> (digitalRead (<a class=\"code\" href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">BUTTON_PIN</a>)) { <span class=\"comment\">// If button is released</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Button released&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;            pushReleased = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;            <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (2);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;            DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;            json[<span class=\"stringliteral\">&quot;button&quot;</span>] = <a class=\"code\" href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">BUTTON_PIN</a>;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;            json[<span class=\"stringliteral\">&quot;push&quot;</span>] = 0;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;            <span class=\"keywordflow\">if</span> (sendJson (json)) {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Push released sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Push send error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">   98</a></span>&#160;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a> () {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    <span class=\"comment\">// If your class uses dynamic data free it up here</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    <span class=\"comment\">// This is normally not needed but it is a good practice</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160; </div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">  103</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a> () {</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160; </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration start ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    <span class=\"comment\">// If you need to add custom configuration parameters do it here</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160; </div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">  109</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration result ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    <span class=\"comment\">// You can read configuration paramenter values here</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160; </div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">  114</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <span class=\"comment\">// If you need to read custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">  119</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"comment\">// If you need to save custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160; </div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">  124</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a> () {</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <a class=\"code\" href=\"classHATrigger.html\">HATrigger</a>* haEntity = <span class=\"keyword\">new</span> <a class=\"code\" href=\"classHATrigger.html\">HATrigger</a> ();</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160; </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    uint8_t* msgPackBuffer;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160; </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    <span class=\"keywordflow\">if</span> (!haEntity) {</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;JSON object instance does not exist&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160; </div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">setType</a> (<a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a>);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">setSubtype</a> (<a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\">button_1</a>);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160; </div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    <span class=\"keywordtype\">size_t</span> bufferLen = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ();</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    msgPackBuffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160; </div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    <span class=\"keywordtype\">size_t</span> len = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (bufferLen, msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160; </div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Resulting MSG pack length: %d&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160; </div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    <span class=\"keywordflow\">if</span> (!sendHADiscovery (msgPackBuffer, len)) {</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending HA discovery message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160; </div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    <span class=\"keywordflow\">if</span> (haEntity) {</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        <span class=\"keyword\">delete</span> (haEntity);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160; </div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;    <span class=\"keywordflow\">if</span> (msgPackBuffer) {</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        free (msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassHAEntity_html_ad299ecdb73519da56e2f5439941af544\"><div class=\"ttname\"><a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">HAEntity::measureMessage</a></div><div class=\"ttdeci\">size_t measureMessage()</div><div class=\"ttdoc\">Gets needed buffer size for discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00217\">haEntity.h:217</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a64140dc1e3e041eafbcd6eca04abb9ef\"><div class=\"ttname\"><a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">HAEntity::getAnounceMessage</a></div><div class=\"ttdeci\">size_t getAnounceMessage(int bufferlen, uint8_t *buffer)</div><div class=\"ttdoc\">Gets entity anounce message to be sent over EnigmaIOT message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00153\">haEntity.h:153</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a4fb9c73855aba7474fb26e13bd74f3cf\"><div class=\"ttname\"><a href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">HATrigger::setSubtype</a></div><div class=\"ttdeci\">void setSubtype(ha_triggerSubtype_t subtype)</div><div class=\"ttdoc\">Set trigger subtype as ha_triggerSubtype_t https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00196\">haTrigger.h:196</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae744508f79e2bdfcc7352908d537a671\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop() override</div><div class=\"ttdoc\">This should be called periodically for module handling.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00053\">ButtonController.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab5ec6ad2c5cd0f6edfb7635aba862915\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a></div><div class=\"ttdeci\">void buildHADiscovery()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00124\">ButtonController.cpp:124</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a6fc95acd652b504ae0e342f7ce5450c3\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart() override</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00103\">ButtonController.cpp:103</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\">button_1</a></div><div class=\"ttdeci\">@ button_1</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00107\">haTrigger.h:107</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00098\">ButtonController.cpp:98</a></div></div>\n<div class=\"ttc\" id=\"aButtonController_8h_html\"><div class=\"ttname\"><a href=\"ButtonController_8h.html\">ButtonController.h</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4a58511842391487187927dd1b87a0dc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig() override</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00119\">ButtonController.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00031\">ButtonController.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a></div><div class=\"ttdeci\">@ button_short_press</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00083\">haTrigger.h:83</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a68bf2951e6f5ba11894856104e062e6e\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result) override</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00026\">ButtonController.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"aButtonController_8h_html_abc2ad14f0789907024ac765711ffd3da\"><div class=\"ttname\"><a href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">BUTTON_PIN</a></div><div class=\"ttdeci\">#define BUTTON_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00022\">ButtonController.h:22</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html\"><div class=\"ttname\"><a href=\"classHATrigger.html\">HATrigger</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00126\">haTrigger.h:126</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a9fc25e3bff52d9d4a642e5a604dd7c44\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status) override</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00109\">ButtonController.cpp:109</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00040\">ButtonController.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aButtonController_8cpp_html_a0a5b20c0a44622656e3028948ca20a47\"><div class=\"ttname\"><a href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a></div><div class=\"ttdeci\">constexpr auto CONFIG_FILE</div><div class=\"ttdoc\">Custom configuration file name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00011\">ButtonController.cpp:11</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a440e2979ce22f7fac243f6063469db6c\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override</div><div class=\"ttdoc\">Called to process a downlink command.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00019\">ButtonController.cpp:19</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab2dd07a8fecca7f083f2776dbc294dc9\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig() override</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00114\">ButtonController.cpp:114</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_adda48fb69d4ad6c9f95dfb7f7f92b79c\"><div class=\"ttname\"><a href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">HATrigger::setType</a></div><div class=\"ttdeci\">void setType(ha_triggerType_t type)</div><div class=\"ttdoc\">Set trigger type as ha_triggerType_t https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00178\">haTrigger.h:178</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/ButtonController_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Button-Controller/ButtonController.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_7b1e976c444ae84a02a576fc7d2ecc0c.html\">EnigmaIOT-Button-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ButtonController.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>&quot;</code><br />\n</div>\n<p><a href=\"ButtonController_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:abc2ad14f0789907024ac765711ffd3da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">BUTTON_PIN</a>&#160;&#160;&#160;4</td></tr>\n<tr class=\"separator:abc2ad14f0789907024ac765711ffd3da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;ButtonController</td></tr>\n<tr class=\"separator:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = &quot;Button <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>&quot;</td></tr>\n<tr class=\"separator:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"abc2ad14f0789907024ac765711ffd3da\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abc2ad14f0789907024ac765711ffd3da\">&#9670;&nbsp;</a></span>BUTTON_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BUTTON_PIN&#160;&#160;&#160;4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8h_source.html#l00022\">22</a> of file <a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8257556540571a0fe1f5f05eb434af87\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8257556540571a0fe1f5f05eb434af87\">&#9670;&nbsp;</a></span>CONTROLLER_CLASS_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;ButtonController</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8h_source.html#l00024\">24</a> of file <a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0cf4eba0801e84be66f6198f07bfe287\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0cf4eba0801e84be66f6198f07bfe287\">&#9670;&nbsp;</a></span>CONTROLLER_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* CONTROLLER_NAME = &quot;Button <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8h_source.html#l00025\">25</a> of file <a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/ButtonController_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Button-Controller/ButtonController.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_7b1e976c444ae84a02a576fc7d2ecc0c.html\">EnigmaIOT-Button-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ButtonController.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"ButtonController_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// BasicController.h</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160; </div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#ifndef _BUTTONCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#define _BUTTONCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160; </div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160; </div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haTrigger_8h.html\">haTrigger.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160; </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">// You may define data structures and constants here</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">   22</a></span>&#160;<span class=\"preprocessor\">#define BUTTON_PIN 4</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160; </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"ButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87\">   24</a></span>&#160;<span class=\"preprocessor\">#define CONTROLLER_CLASS_NAME ButtonController</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"ButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">   25</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"ButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = <span class=\"stringliteral\">&quot;Button controller&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160; </div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html\">   27</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> : <a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> {</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;    <span class=\"comment\">// add all parameters that your project needs here</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a\">   32</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a\">pushTriggered</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be\">   33</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be\">pushReleased</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> = NULL);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160; </div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">loop</a> () <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160; </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;    <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ();</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">configManagerStart</a> () <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160; </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">loadConfig</a> () <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160; </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160; </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">saveConfig</a> () <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160; </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result) <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d\">   72</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d\">sendStartAnouncement</a> ()<span class=\"keyword\"> override </span>{</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"comment\">// You can send a &#39;hello&#39; message when your node starts. Useful to detect unexpected reboot</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (10);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        json[<span class=\"stringliteral\">&quot;status&quot;</span>] = <span class=\"stringliteral\">&quot;start&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        json[<span class=\"stringliteral\">&quot;device&quot;</span>] = <a class=\"code\" href=\"ButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a>;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        <span class=\"keywordtype\">char</span> version_buf[10];</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        snprintf (version_buf, 10, <span class=\"stringliteral\">&quot;%d.%d.%d&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                  <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[0], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[1], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[2]);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        json[<span class=\"stringliteral\">&quot;version&quot;</span>] = String (version_buf);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160; </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a> (json);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a> ();</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160; </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    <span class=\"comment\">// You may add additional method definitions that you need here</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160; </div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aButtonController_8h_html_a0cf4eba0801e84be66f6198f07bfe287\"><div class=\"ttname\"><a href=\"ButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a></div><div class=\"ttdeci\">static const char * CONTROLLER_NAME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00025\">ButtonController.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae744508f79e2bdfcc7352908d537a671\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop() override</div><div class=\"ttdoc\">This should be called periodically for module handling.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00053\">ButtonController.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a9c45ffb63a64a645032b9c132f86c821\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a></div><div class=\"ttdeci\">static const uint8_t ENIGMAIOT_PROT_VERS[3]</div><div class=\"ttdoc\">EnitmaIoT Version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00016\">EnigmaIoTconfig.h:16</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab5ec6ad2c5cd0f6edfb7635aba862915\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a></div><div class=\"ttdeci\">void buildHADiscovery()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00124\">ButtonController.cpp:124</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae5ece1c030d9063e46127b8a48b7bfa9\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">EnigmaIOTjsonController::sendJson</a></div><div class=\"ttdeci\">bool sendJson(DynamicJsonDocument &amp;json)</div><div class=\"ttdoc\">Sends a JSON encoded message to lower layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00170\">EnigmaIOTjsonController.h:170</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a97993aade6d2d6e22e48872f71b7f40a\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a\">CONTROLLER_CLASS_NAME::pushTriggered</a></div><div class=\"ttdeci\">bool pushTriggered</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00032\">ButtonController.h:32</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a6fc95acd652b504ae0e342f7ce5450c3\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart() override</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00103\">ButtonController.cpp:103</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab1766a261776bbdd0aa7c9016b6502be\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be\">CONTROLLER_CLASS_NAME::pushReleased</a></div><div class=\"ttdeci\">bool pushReleased</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00033\">ButtonController.h:33</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00098\">ButtonController.cpp:98</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aef6618576cf2ac9afa7e8685ae953b5d\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d\">CONTROLLER_CLASS_NAME::sendStartAnouncement</a></div><div class=\"ttdeci\">bool sendStartAnouncement() override</div><div class=\"ttdoc\">Send a message to notify node has started running.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00072\">ButtonController.h:72</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4a58511842391487187927dd1b87a0dc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig() override</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00119\">ButtonController.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html\"><div class=\"ttname\"><a href=\"haTrigger_8h.html\">haTrigger.h</a></div><div class=\"ttdoc\">Home Assistant trigger integration.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00031\">ButtonController.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a68bf2951e6f5ba11894856104e062e6e\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result) override</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00026\">ButtonController.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a9fc25e3bff52d9d4a642e5a604dd7c44\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status) override</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00109\">ButtonController.cpp:109</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00040\">ButtonController.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a440e2979ce22f7fac243f6063469db6c\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override</div><div class=\"ttdoc\">Called to process a downlink command.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00019\">ButtonController.cpp:19</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab2dd07a8fecca7f083f2776dbc294dc9\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig() override</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00114\">ButtonController.cpp:114</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/Comms__hal_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/Comms_hal.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Comms_hal.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Generic communication system abstraction layer.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>&quot;</code><br />\n</div>\n<p><a href=\"Comms__hal_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interface for communication subsystem abstraction layer definition.  <a href=\"classComms__halClass.html#details\">More...</a><br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:a43bcbe8a0a3d8d61dd64f1f004864af0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a>) (uint8_t *address, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len)</td></tr>\n<tr class=\"separator:a43bcbe8a0a3d8d61dd64f1f004864af0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afd743715a11ed44e16dbb8d28bf3bd8b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a>) (uint8_t *address, uint8_t <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:afd743715a11ed44e16dbb8d28bf3bd8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:ae3f1dec7ee0f3731002fa17598e6e7b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> { <a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a> = 0, \n<a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">COMM_GATEWAY</a> = 1\n }</td></tr>\n<tr class=\"memdesc:ae3f1dec7ee0f3731002fa17598e6e7b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Peer role on communication.  <a href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ae3f1dec7ee0f3731002fa17598e6e7b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Generic communication system abstraction layer. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin</dd></dl>\n<p>This is the interface that communication definition should implement to be used as layer 1 on EnigmaIoT </p>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n</div><h2 class=\"groupheader\">Typedef Documentation</h2>\n<a id=\"a43bcbe8a0a3d8d61dd64f1f004864af0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a43bcbe8a0a3d8d61dd64f1f004864af0\">&#9670;&nbsp;</a></span>comms_hal_rcvd_data</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* comms_hal_rcvd_data) (uint8_t *address, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00035\">35</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"afd743715a11ed44e16dbb8d28bf3bd8b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afd743715a11ed44e16dbb8d28bf3bd8b\">&#9670;&nbsp;</a></span>comms_hal_sent_data</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* comms_hal_sent_data) (uint8_t *address, uint8_t <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00036\">36</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a id=\"ae3f1dec7ee0f3731002fa17598e6e7b4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae3f1dec7ee0f3731002fa17598e6e7b4\">&#9670;&nbsp;</a></span>peerType_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Peer role on communication. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\"></a>COMM_NODE&#160;</td><td class=\"fielddoc\"><p>Peer acts as a node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\"></a>COMM_GATEWAY&#160;</td><td class=\"fielddoc\"><p>Peer acts as a gateway </p>\n</td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00023\">23</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/Comms__hal_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/Comms_hal.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Comms_hal.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"Comms__hal_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#ifndef _COMMS_HAL_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#define _COMMS_HAL_h</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">   23</a></span>&#160;<span class=\"keyword\">enum</span> <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> {</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">   24</a></span>&#160;    <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a> = 0, </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;    <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">COMM_GATEWAY</a> = 1 </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">   26</a></span>&#160;};</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"structcomms__queue__item__t.html\">   28</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span>{</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">   29</a></span>&#160;    uint8_t dstAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5\">   30</a></span>&#160;    uint8_t payload[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">   31</a></span>&#160;    <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">payload_len</a>; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;} <a class=\"code\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">   35</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a>)(uint8_t* address, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">   36</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a>)(uint8_t* address, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160; </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html\">   41</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classComms__halClass.html\">Comms_halClass</a> {</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316\">   43</a></span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316\">COMMS_HAL_MAX_MESSAGE_LENGTH</a> = 0; </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">   44</a></span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">COMMS_HAL_ADDR_LEN</a> = 1; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160; </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">   47</a></span>&#160;    uint8_t <a class=\"code\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a>[<a class=\"code\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">COMMS_HAL_ADDR_LEN</a>]; </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">   48</a></span>&#160;    uint8_t <a class=\"code\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a>; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">   50</a></span>&#160;    <a class=\"code\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a> <a class=\"code\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a> = 0; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">   51</a></span>&#160;    <a class=\"code\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a> <a class=\"code\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">sentResult</a> = 0; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">   52</a></span>&#160;    <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> <a class=\"code\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">_ownPeerType</a>; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a67d74c717b8f3919307738be9d963312\">   58</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classComms__halClass.html#a67d74c717b8f3919307738be9d963312\">initComms</a> (<a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> peerType) = 0;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160; </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac\">   62</a></span>&#160;    <a class=\"code\" href=\"classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac\">Comms_halClass</a> () {}</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">   70</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">begin</a> (uint8_t* <a class=\"code\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a>, uint8_t <a class=\"code\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a>, <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> peerType = <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a>) = 0;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">   75</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">stop</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">   84</a></span>&#160;    <span class=\"keyword\">virtual</span> int32_t <a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (uint8_t* da, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">int</span> len) = 0;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">   90</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">onDataRcvd</a> (<a class=\"code\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a> <a class=\"code\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a>) = 0;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">   96</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">onDataSent</a> (<a class=\"code\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a> <a class=\"code\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a>) = 0;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">  102</a></span>&#160;    <span class=\"keyword\">virtual</span> uint8_t <a class=\"code\" href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">getAddressLength</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04\">  107</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04\">handle</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">  113</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">enableTransmit</a> (<span class=\"keywordtype\">bool</span> enable) = 0;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160; </div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a0db88323996d12342a9c60143d90c51f\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">Comms_halClass::onDataRcvd</a></div><div class=\"ttdeci\">virtual void onDataRcvd(comms_hal_rcvd_data dataRcvd)=0</div><div class=\"ttdoc\">Attach a callback function to be run on every received message.</div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_ae3f1dec7ee0f3731002fa17598e6e7b4\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a></div><div class=\"ttdeci\">peerType_t</div><div class=\"ttdoc\">Peer role on communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00023\">Comms_hal.h:23</a></div></div>\n<div class=\"ttc\" id=\"astructcomms__queue__item__t_html\"><div class=\"ttname\"><a href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00028\">Comms_hal.h:28</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a393acd5ba5c49031b3c827f7cbce37fa\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">Comms_halClass::onDataSent</a></div><div class=\"ttdeci\">virtual void onDataSent(comms_hal_sent_data dataRcvd)=0</div><div class=\"ttdoc\">Attach a callback function to be run after sending a message to receive its status.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a1b7f86efd799761dead77fcccf036d1d\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">Comms_halClass::begin</a></div><div class=\"ttdeci\">virtual void begin(uint8_t *gateway, uint8_t channel, peerType_t peerType=COMM_NODE)=0</div><div class=\"ttdoc\">Setup communication environment and establish the connection from node to gateway.</div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a3a0a66fe2fadc4a71dc2ac8eb7573316\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316\">Comms_halClass::COMMS_HAL_MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const size_t COMMS_HAL_MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum message length.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00043\">Comms_hal.h:43</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a></div><div class=\"ttdoc\">Parameter configuration.</div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a3fb9182d9e9b0729d8798c43f133a130\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">Comms_halClass::sentResult</a></div><div class=\"ttdeci\">comms_hal_sent_data sentResult</div><div class=\"ttdoc\">Pointer to a function to be called to notify last sending status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00051\">Comms_hal.h:51</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ac5a613a21aca12c2d2efbff02a2f0ff5\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">Comms_halClass::send</a></div><div class=\"ttdeci\">virtual int32_t send(uint8_t *da, uint8_t *data, int len)=0</div><div class=\"ttdoc\">Sends data to the other peer.</div></div>\n<div class=\"ttc\" id=\"astructcomms__queue__item__t_html_a736106aeedc634be01424aaa5ed55860\"><div class=\"ttname\"><a href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">comms_queue_item_t::payload_len</a></div><div class=\"ttdeci\">size_t payload_len</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00031\">Comms_hal.h:31</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a6093fd7b0a9eedba72c3622977639d92\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">Comms_halClass::getAddressLength</a></div><div class=\"ttdeci\">virtual uint8_t getAddressLength()=0</div><div class=\"ttdoc\">Get address length that a specific communication subsystem uses.</div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a></div><div class=\"ttdeci\">@ COMM_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00024\">Comms_hal.h:24</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a38e3e9572cead89962b66c2634a9e2ac\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac\">Comms_halClass::Comms_halClass</a></div><div class=\"ttdeci\">Comms_halClass()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00062\">Comms_hal.h:62</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a1038d7620825a653dfa36af70a2fca04\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04\">Comms_halClass::handle</a></div><div class=\"ttdeci\">virtual void handle()=0</div><div class=\"ttdoc\">Sends next message in the queue.</div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_a43bcbe8a0a3d8d61dd64f1f004864af0\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a></div><div class=\"ttdeci\">void(* comms_hal_rcvd_data)(uint8_t *address, uint8_t *data, uint8_t len)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00035\">Comms_hal.h:35</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">COMM_GATEWAY</a></div><div class=\"ttdeci\">@ COMM_GATEWAY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00026\">Comms_hal.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a5bbed119e5e361b9be85a33404cf2e83\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">Comms_halClass::dataRcvd</a></div><div class=\"ttdeci\">comms_hal_rcvd_data dataRcvd</div><div class=\"ttdoc\">Pointer to a function to be called on every received message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00050\">Comms_hal.h:50</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a6472373c178c2e77f4fc50eafaedc0ab\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">Comms_halClass::_ownPeerType</a></div><div class=\"ttdeci\">peerType_t _ownPeerType</div><div class=\"ttdoc\">Stores peer type, node or gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00052\">Comms_hal.h:52</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ae85cd6a5937cb47f88fb82d06b21087a\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">Comms_halClass::enableTransmit</a></div><div class=\"ttdeci\">virtual void enableTransmit(bool enable)=0</div><div class=\"ttdoc\">Enables or disables transmission of queued messages. Used to disable communication during wifi scan.</div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a6d372da9bf4d1d00c5445b26ef7d0f0b\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">Comms_halClass::COMMS_HAL_ADDR_LEN</a></div><div class=\"ttdeci\">static const uint8_t COMMS_HAL_ADDR_LEN</div><div class=\"ttdoc\">Address length.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00044\">Comms_hal.h:44</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_afd743715a11ed44e16dbb8d28bf3bd8b\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a></div><div class=\"ttdeci\">void(* comms_hal_sent_data)(uint8_t *address, uint8_t status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00036\">Comms_hal.h:36</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a67d74c717b8f3919307738be9d963312\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a67d74c717b8f3919307738be9d963312\">Comms_halClass::initComms</a></div><div class=\"ttdeci\">virtual void initComms(peerType_t peerType)=0</div><div class=\"ttdoc\">Communication subsistem initialization.</div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ac35585ecbc8e936d9f35d32b56164b8e\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">Comms_halClass::gateway</a></div><div class=\"ttdeci\">uint8_t gateway[COMMS_HAL_ADDR_LEN]</div><div class=\"ttdoc\">Gateway address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00047\">Comms_hal.h:47</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ac495fb3d9e576bb2717c1f43197b458e\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">Comms_halClass::channel</a></div><div class=\"ttdeci\">uint8_t channel</div><div class=\"ttdoc\">Comms channel to be used.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00048\">Comms_hal.h:48</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html\"><div class=\"ttname\"><a href=\"classComms__halClass.html\">Comms_halClass</a></div><div class=\"ttdoc\">Interface for communication subsystem abstraction layer definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00041\">Comms_hal.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_aa69c265e65ce31580af6d5dd9b3cd40f\"><div class=\"ttname\"><a href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">Comms_halClass::stop</a></div><div class=\"ttdeci\">virtual void stop()=0</div><div class=\"ttdoc\">Terminates communication and closes all connectrions.</div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/DashButtonController_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-DashButton-Controller/DashButtonController.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b65b262e0a2e64b925763a7d4046e738.html\">EnigmaIOT-DashButton-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">DashButtonController.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;functional&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"DashButtonController_8h_source.html\">DashButtonController.h</a>&quot;</code><br />\n</div>\n<p><a href=\"DashButtonController_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"DashButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = &quot;/customconf.json&quot;</td></tr>\n<tr class=\"memdesc:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Custom configuration file name.  <a href=\"DashButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">More...</a><br /></td></tr>\n<tr class=\"separator:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0a5b20c0a44622656e3028948ca20a47\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0a5b20c0a44622656e3028948ca20a47\">&#9670;&nbsp;</a></span>CONFIG_FILE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto CONFIG_FILE = &quot;/customconf.json&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Custom configuration file name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"DashButtonController_8cpp_source.html#l00011\">11</a> of file <a class=\"el\" href=\"DashButtonController_8cpp_source.html\">DashButtonController.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/DashButtonController_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-DashButton-Controller/DashButtonController.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b65b262e0a2e64b925763a7d4046e738.html\">EnigmaIOT-DashButton-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">DashButtonController.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"DashButtonController_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160; </div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"DashButtonController_8h.html\">DashButtonController.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160; </div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"keyword\">using namespace </span>std;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"keyword\">using namespace </span>placeholders;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\"><a class=\"line\" href=\"DashButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">   11</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"DashButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = <span class=\"stringliteral\">&quot;/customconf.json&quot;</span>; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"comment\">// You may add some global variables you need here,</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// like serial port instances, I2C, etc</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;    <span class=\"comment\">// Process incoming messages here</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;    <span class=\"comment\">// They are normally encoded as MsgPack so you can confert them to JSON very easily</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160; </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160; </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result) {</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;    <span class=\"comment\">// Respond to command with a result: true if successful, false if failed </span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a> () {</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    addHACall (std::bind (&amp;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a>, <span class=\"keyword\">this</span>));</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160; </div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    enigmaIotNode = node;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    <span class=\"comment\">// You do node setup here. Use it as it was the normal setup() Arduino function</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    <span class=\"comment\">// Send a &#39;hello&#39; message when initalizing is finished</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;    <span class=\"comment\">// Not needed as this will reboot after deep sleep</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <span class=\"comment\">// sendStartAnouncement (); </span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Finish begin&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    <span class=\"comment\">// If your node should sleep after sending data do all remaining tasks here</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a> () {</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    <span class=\"comment\">// If your node stays allways awake do your periodic task here</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    <span class=\"comment\">// You can send your data as JSON. This is a basic example</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    <span class=\"keywordflow\">if</span> (!buttonPressSent &amp;&amp; enigmaIotNode-&gt;isRegistered ()) {</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (2);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        json[<span class=\"stringliteral\">&quot;button&quot;</span>] = 1;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160; </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keywordflow\">if</span> (sendJson (json)) {</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Button press sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;            buttonPressSent = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        <span class=\"comment\">//const size_t capacity = JSON_OBJECT_SIZE (4);</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"comment\">//DynamicJsonDocument json (capacity);</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"comment\">//json[&quot;sensor&quot;] = data_description;</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"comment\">//json[&quot;meas&quot;] = measurement;</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"comment\">//sendJson (json);</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160; </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160; </div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a> () {</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    <span class=\"comment\">// It your class uses dynamic data free it up here</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    <span class=\"comment\">// This is normally not needed but it is a good practice</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a> () {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration start ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    <span class=\"comment\">// If you need to add custom configuration parameters do it here</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160; </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration result ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    <span class=\"comment\">// You can read configuration paramenter values here</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160; </div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    <span class=\"comment\">// If you need to read custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160; </div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    <span class=\"comment\">// If you need to save custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160; </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"comment\">// Repeat this method for every entity</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a> () {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    <span class=\"comment\">// Select corresponding HAEntiny type</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    <a class=\"code\" href=\"classHATrigger.html\">HATrigger</a>* haEntity = <span class=\"keyword\">new</span> <a class=\"code\" href=\"classHATrigger.html\">HATrigger</a> ();</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160; </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    uint8_t* msgPackBuffer;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    <span class=\"keywordflow\">if</span> (!haEntity) {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;JSON object instance does not exist&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160; </div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <span class=\"comment\">// Add your characteristics here</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"comment\">// There is no need to futher modify this function</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160; </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">setType</a> (<a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a>);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">setSubtype</a> (<a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">turn_on</a>);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160; </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160; </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <span class=\"keywordtype\">size_t</span> bufferLen = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ();</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160; </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    msgPackBuffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160; </div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    <span class=\"keywordtype\">size_t</span> len = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (bufferLen, msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160; </div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Resulting MSG pack length: %d&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    <span class=\"keywordflow\">if</span> (!sendHADiscovery (msgPackBuffer, len)) {</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending HA discovery message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"keywordflow\">if</span> (haEntity) {</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keyword\">delete</span> (haEntity);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160; </div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    <span class=\"keywordflow\">if</span> (msgPackBuffer) {</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        free (msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aDashButtonController_8cpp_html_a0a5b20c0a44622656e3028948ca20a47\"><div class=\"ttname\"><a href=\"DashButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a></div><div class=\"ttdeci\">constexpr auto CONFIG_FILE</div><div class=\"ttdoc\">Custom configuration file name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"DashButtonController_8cpp_source.html#l00011\">DashButtonController.cpp:11</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_ad299ecdb73519da56e2f5439941af544\"><div class=\"ttname\"><a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">HAEntity::measureMessage</a></div><div class=\"ttdeci\">size_t measureMessage()</div><div class=\"ttdoc\">Gets needed buffer size for discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00217\">haEntity.h:217</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a64140dc1e3e041eafbcd6eca04abb9ef\"><div class=\"ttname\"><a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">HAEntity::getAnounceMessage</a></div><div class=\"ttdeci\">size_t getAnounceMessage(int bufferlen, uint8_t *buffer)</div><div class=\"ttdoc\">Gets entity anounce message to be sent over EnigmaIOT message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00153\">haEntity.h:153</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a4fb9c73855aba7474fb26e13bd74f3cf\"><div class=\"ttname\"><a href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">HATrigger::setSubtype</a></div><div class=\"ttdeci\">void setSubtype(ha_triggerSubtype_t subtype)</div><div class=\"ttdoc\">Set trigger subtype as ha_triggerSubtype_t https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00196\">haTrigger.h:196</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae744508f79e2bdfcc7352908d537a671\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop() override</div><div class=\"ttdoc\">This should be called periodically for module handling.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00053\">ButtonController.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab5ec6ad2c5cd0f6edfb7635aba862915\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a></div><div class=\"ttdeci\">void buildHADiscovery()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00124\">ButtonController.cpp:124</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a6fc95acd652b504ae0e342f7ce5450c3\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart() override</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00103\">ButtonController.cpp:103</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00098\">ButtonController.cpp:98</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4a58511842391487187927dd1b87a0dc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig() override</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00119\">ButtonController.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00031\">ButtonController.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">turn_on</a></div><div class=\"ttdeci\">@ turn_on</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00105\">haTrigger.h:105</a></div></div>\n<div class=\"ttc\" id=\"aDashButtonController_8h_html\"><div class=\"ttname\"><a href=\"DashButtonController_8h.html\">DashButtonController.h</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a></div><div class=\"ttdeci\">@ button_short_press</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00083\">haTrigger.h:83</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a68bf2951e6f5ba11894856104e062e6e\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result) override</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00026\">ButtonController.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html\"><div class=\"ttname\"><a href=\"classHATrigger.html\">HATrigger</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00126\">haTrigger.h:126</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a9fc25e3bff52d9d4a642e5a604dd7c44\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status) override</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00109\">ButtonController.cpp:109</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00040\">ButtonController.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a440e2979ce22f7fac243f6063469db6c\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override</div><div class=\"ttdoc\">Called to process a downlink command.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00019\">ButtonController.cpp:19</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab2dd07a8fecca7f083f2776dbc294dc9\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig() override</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00114\">ButtonController.cpp:114</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_adda48fb69d4ad6c9f95dfb7f7f92b79c\"><div class=\"ttname\"><a href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">HATrigger::setType</a></div><div class=\"ttdeci\">void setType(ha_triggerType_t type)</div><div class=\"ttdoc\">Set trigger type as ha_triggerType_t https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00178\">haTrigger.h:178</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/DashButtonController_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-DashButton-Controller/DashButtonController.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b65b262e0a2e64b925763a7d4046e738.html\">EnigmaIOT-DashButton-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">DashButtonController.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n</div>\n<p><a href=\"DashButtonController_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"DashButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;DashButtonController</td></tr>\n<tr class=\"separator:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"DashButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = &quot;DashButton <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>&quot;</td></tr>\n<tr class=\"separator:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a8257556540571a0fe1f5f05eb434af87\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8257556540571a0fe1f5f05eb434af87\">&#9670;&nbsp;</a></span>CONTROLLER_CLASS_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;DashButtonController</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"DashButtonController_8h_source.html#l00019\">19</a> of file <a class=\"el\" href=\"DashButtonController_8h_source.html\">DashButtonController.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0cf4eba0801e84be66f6198f07bfe287\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0cf4eba0801e84be66f6198f07bfe287\">&#9670;&nbsp;</a></span>CONTROLLER_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* CONTROLLER_NAME = &quot;DashButton <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"DashButtonController_8h_source.html#l00020\">20</a> of file <a class=\"el\" href=\"DashButtonController_8h_source.html\">DashButtonController.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/DashButtonController_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-DashButton-Controller/DashButtonController.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b65b262e0a2e64b925763a7d4046e738.html\">EnigmaIOT-DashButton-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">DashButtonController.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"DashButtonController_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// BasicController.h</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160; </div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#ifndef _DASHBUTTONCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#define _DASHBUTTONCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160; </div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"comment\">//#define DEBUG_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"DashButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87\">   19</a></span>&#160;<span class=\"preprocessor\">#define CONTROLLER_CLASS_NAME DashButtonController</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"DashButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">   20</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"DashButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = <span class=\"stringliteral\">&quot;DashButton controller&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"haTrigger_8h.html\">haTrigger.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">// You may define data structures and constants here</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> : <a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> {</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    <span class=\"comment\">// add all parameters that your project needs here</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ab9f55dca7e50e7bbccd5b01d77fc0f05\">   35</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab9f55dca7e50e7bbccd5b01d77fc0f05\">buttonPressSent</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">   37</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> = NULL);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">   39</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160; </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">   41</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a> ();</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">   43</a></span>&#160;    <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ();</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">   48</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">   54</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">   60</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">   62</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160; </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">   69</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">   71</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160; </div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">   73</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a> () {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"comment\">// You can send a &#39;hello&#39; message when your node starts. Useful to detect unexpected reboot</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (10);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        json[<span class=\"stringliteral\">&quot;status&quot;</span>] = <span class=\"stringliteral\">&quot;start&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        json[<span class=\"stringliteral\">&quot;device&quot;</span>] = <a class=\"code\" href=\"DashButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keywordtype\">char</span> version_buf[10];</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        snprintf (version_buf, 10, <span class=\"stringliteral\">&quot;%d.%d.%d&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                  <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[0], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[1], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[2]);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        json[<span class=\"stringliteral\">&quot;version&quot;</span>] = String (version_buf);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160; </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a> (json);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160; </div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">   87</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a> ();</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;    <span class=\"comment\">// You may add additional method definitions that you need here</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160; </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aa6218f8b72b75932946bb5ca74b5bc14\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart()</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4848555c02bbbddd9af9f3f60a9117f5\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a9c45ffb63a64a645032b9c132f86c821\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a></div><div class=\"ttdeci\">static const uint8_t ENIGMAIOT_PROT_VERS[3]</div><div class=\"ttdoc\">EnitmaIoT Version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00016\">EnigmaIoTconfig.h:16</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a584fb205957a7b3ca83fb76066af5268\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae572fe1f0d2bb7b4fb99067d815d5807\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig()</div><div class=\"ttdoc\">Saves output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab5ec6ad2c5cd0f6edfb7635aba862915\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a></div><div class=\"ttdeci\">void buildHADiscovery()</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae5ece1c030d9063e46127b8a48b7bfa9\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">EnigmaIOTjsonController::sendJson</a></div><div class=\"ttdeci\">bool sendJson(DynamicJsonDocument &amp;json)</div><div class=\"ttdoc\">Sends a JSON encoded message to lower layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00170\">EnigmaIOTjsonController.h:170</a></div></div>\n<div class=\"ttc\" id=\"aDashButtonController_8h_html_a0cf4eba0801e84be66f6198f07bfe287\"><div class=\"ttname\"><a href=\"DashButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a></div><div class=\"ttdeci\">static const char * CONTROLLER_NAME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"DashButtonController_8h_source.html#l00020\">DashButtonController.h:20</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a0965ba804f4f0d1533f888fa9011aa86\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result)</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html\"><div class=\"ttname\"><a href=\"haTrigger_8h.html\">haTrigger.h</a></div><div class=\"ttdoc\">Home Assistant trigger integration.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a92a9cd1826a1a8aaca06c6e208928cdc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab9f55dca7e50e7bbccd5b01d77fc0f05\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab9f55dca7e50e7bbccd5b01d77fc0f05\">CONTROLLER_CLASS_NAME::buttonPressSent</a></div><div class=\"ttdeci\">bool buttonPressSent</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"DashButtonController_8h_source.html#l00035\">DashButtonController.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a2af1a99bb4a2d7b83125861f127279e8\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">CONTROLLER_CLASS_NAME::sendStartAnouncement</a></div><div class=\"ttdeci\">bool sendStartAnouncement()</div><div class=\"ttdoc\">Send a message to notify node has started running.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"DashButtonController_8h_source.html#l00073\">DashButtonController.h:73</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_afad5a8415e36756b812a53bc889fcd4b\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-Button-Controller_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Button-Controller/EnigmaIOT-Button-Controller.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_7b1e976c444ae84a02a576fc7d2ecc0c.html\">EnigmaIOT-Button-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Button-Controller.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n<code>#include &lt;FailSafe.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a>&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;Curve25519.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n<code>#include &lt;DNSServer.h&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a>&#160;&#160;&#160;0</td></tr>\n<tr class=\"separator:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">USE_SERIAL</a></td></tr>\n<tr class=\"separator:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>&#160;&#160;&#160;5</td></tr>\n<tr class=\"separator:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> ()</td></tr>\n<tr class=\"separator:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2d577988d753f4702c13e41090c705a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType)</td></tr>\n<tr class=\"separator:a2d577988d753f4702c13e41090c705a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"separator:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a960401606ecc83efdb2e45646619f277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (boolean <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:a960401606ecc83efdb2e45646619f277\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad151c02682f80a13429640710b842160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> ()</td></tr>\n<tr class=\"separator:ad151c02682f80a13429640710b842160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></td></tr>\n<tr class=\"separator:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 10000</td></tr>\n<tr class=\"separator:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3</td></tr>\n<tr class=\"separator:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0</td></tr>\n<tr class=\"separator:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00049\">49</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00043\">43</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a08bca59db4b190eaaea4d47b7562869c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a08bca59db4b190eaaea4d47b7562869c\">&#9670;&nbsp;</a></span>RESET_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define RESET_PIN&#160;&#160;&#160;5</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00053\">53</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af040306e47883ec3c541ae1a43f77a1d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af040306e47883ec3c541ae1a43f77a1d\">&#9670;&nbsp;</a></span>SLEEPY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SLEEPY&#160;&#160;&#160;0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00040\">40</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2cb4a65422d8c7bd10ff4436e8a79b1b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2cb4a65422d8c7bd10ff4436e8a79b1b\">&#9670;&nbsp;</a></span>USE_SERIAL</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define USE_SERIAL</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00047\">47</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a940f8c4df553df52c9145ef2df107ad3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a940f8c4df553df52c9145ef2df107ad3\">&#9670;&nbsp;</a></span>connectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void connectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00061\">61</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a23fc74fc5731518093d5fa0db24edae1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23fc74fc5731518093d5fa0db24edae1\">&#9670;&nbsp;</a></span>disconnectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void disconnectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00067\">67</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00157\">157</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81397ad933b5a8b902d6161f702838fc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81397ad933b5a8b902d6161f702838fc\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00083\">83</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2d577988d753f4702c13e41090c705a4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2d577988d753f4702c13e41090c705a4\">&#9670;&nbsp;</a></span>sendUplinkData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool sendUplinkData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>dataMsgType</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00072\">72</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00101\">101</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a960401606ecc83efdb2e45646619f277\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a960401606ecc83efdb2e45646619f277\">&#9670;&nbsp;</a></span>wifiManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">boolean&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00092\">92</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad151c02682f80a13429640710b842160\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad151c02682f80a13429640710b842160\">&#9670;&nbsp;</a></span>wifiManagerStarted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerStarted </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00097\">97</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a00c12add296f0d83ff8d3437e23651c9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a00c12add296f0d83ff8d3437e23651c9\">&#9670;&nbsp;</a></span>BOOT_FLAG_TIMEOUT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const time_t BOOT_FLAG_TIMEOUT = 10000</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00055\">55</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6005c1a520c4bd733e221d70e642ebcd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6005c1a520c4bd733e221d70e642ebcd\">&#9670;&nbsp;</a></span>controller</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* controller</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00051\">51</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4d64e953651e420d91f95bacd3078b4e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4d64e953651e420d91f95bacd3078b4e\">&#9670;&nbsp;</a></span>FAILSAFE_RTC_ADDRESS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int FAILSAFE_RTC_ADDRESS = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00058\">58</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a734029c5fc6508cd75bf19cd7f52b66d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a734029c5fc6508cd75bf19cd7f52b66d\">&#9670;&nbsp;</a></span>LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int LED = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00057\">57</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae4fae2891cab0e7811bb5f339d57d213\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae4fae2891cab0e7811bb5f339d57d213\">&#9670;&nbsp;</a></span>MAX_CONSECUTIVE_BOOT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int MAX_CONSECUTIVE_BOOT = 3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00056\">56</a> of file <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">EnigmaIOT-Button-Controller.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-Button-Controller_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Button-Controller/EnigmaIOT-Button-Controller.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_7b1e976c444ae84a02a576fc7d2ecc0c.html\">EnigmaIOT-Button-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Button-Controller.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOT-Button-Controller_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#if !defined ESP8266 &amp;&amp; !defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#error Node only supports ESP8266 or ESP32 platform</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;FailSafe.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"ButtonController_8h.html\">ButtonController.h</a>&quot;</span> <span class=\"comment\">// &lt;-- Include here your controller class header</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266HTTPClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266httpUpdate.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &lt;driver/adc.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &lt;Curve25519.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &lt;DNSServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">   40</a></span>&#160;<span class=\"preprocessor\">#define SLEEPY 0 // Set it to 1 if your node should sleep after sending data</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160; </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   43</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#endif // !LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160; </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"comment\">// If you do need serial for your project you must disable serial debug by commenting next line</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">   47</a></span>&#160;<span class=\"preprocessor\">#define USE_SERIAL // Don&#39;t forget to set DEBUG_LEVEL to NONE if serial is disabled</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   49</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">   51</a></span>&#160;<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>; <span class=\"comment\">// Generic controller is refferenced here. You do not need to modify it</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">   53</a></span>&#160;<span class=\"preprocessor\">#define RESET_PIN 5 // You can set a different configuration reset pin here. Check for conflicts with used pins.</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160; </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">   55</a></span>&#160;<span class=\"keyword\">const</span> time_t <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 10000; <span class=\"comment\">// Time in ms to reset flag</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">   56</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">   57</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">   58</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0; <span class=\"comment\">// If you use RTC memory adjust offset to not overwrite other data</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"comment\">// Called when node is connected to gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">   61</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"comment\">// Called when node is unregistered from gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">   67</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Disconnected. Reason %d&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"comment\">// Called to route messages to EnitmaIOTNode class. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">   72</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType) {</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, payloadEncoding);    </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">sendHADiscoveryMessage</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"comment\">// Called to route incoming messages to your code. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">   83</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">processRxCommand</a> (mac, buffer, length, command, payloadEncoding)) {</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Command processed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Command error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">   92</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (<span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">configManagerExit</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">   97</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> () {</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  101</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160; </div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#ifdef USE_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;    Serial.begin (921600);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    Serial.println ();</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160; </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    FailSafe.checkBoot (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a>, <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a>, <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a>); <span class=\"comment\">// Parameters are optional</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user setup if fail safe mode is activated</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a> = (<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>*)<span class=\"keyword\">new</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> (); <span class=\"comment\">// Use your class name here</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>); <span class=\"comment\">// Set communication LED</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>); <span class=\"comment\">// Set reset pin</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>); <span class=\"comment\">// Configure registration handler</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>); <span class=\"comment\">// Configure unregistration handler</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>); <span class=\"comment\">// Configure incoming data handler</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a> (<span class=\"keyword\">false</span>); <span class=\"comment\">// Set to true if you need this node to get its clock syncronized with gateway</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">onWiFiManagerStarted</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a>);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">onWiFiManagerExit</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a>);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">enableBroadcast</a> ();</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160; </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">loadConfig</a> ()) { <span class=\"comment\">// Trigger custom configuration loading</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error reading config file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"keywordflow\">if</span> (FILESYSTEM.format ())</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Filesystem Formatted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160; </div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>, NULL, NULL, <span class=\"keyword\">true</span>, <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a> == 1); <span class=\"comment\">// Start EnigmaIOT communication</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160; </div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    uint8_t macAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    <span class=\"comment\">// Set Address using internal MAC Address. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    <span class=\"keywordflow\">if</span> (wifi_get_macaddr (STATION_IF, macAddress))</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    <span class=\"keywordflow\">if</span> ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (macAddress);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node address set to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (macAddress));</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160; </div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a>); <span class=\"comment\">// Listen for data from controller class</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">setup</a> (&amp;<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>);            <span class=\"comment\">// Start controller class</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160; </div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\">#if SLEEPY == 1</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a> ();</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160; </div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;END setup&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160; </div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  157</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    FailSafe.loop (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a>); <span class=\"comment\">// Use always this line</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160; </div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user loop code if Fail Safe mode is active</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160; </div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">loop</a> (); <span class=\"comment\">// Loop controller class</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;callHAdiscoveryCalls (); <span class=\"comment\">// Send HA registration messages</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> (); <span class=\"comment\">// Mantain EnigmaIOT connection</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a7d1e90a75f4b1b5abd5480d00102debf\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController::loop</a></div><div class=\"ttdeci\">virtual void loop()=0</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00049\">EnigmaIOT-Button-Controller.cpp:49</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a9d83f8376a37624a551421a2c8a90c5f\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController::configManagerStart</a></div><div class=\"ttdeci\">virtual void configManagerStart()=0</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a844043532561398d54fa45cd7f0cf4ed\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController::configManagerExit</a></div><div class=\"ttdeci\">virtual void configManagerExit(bool status)=0</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a00c12add296f0d83ff8d3437e23651c9\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a></div><div class=\"ttdeci\">const time_t BOOT_FLAG_TIMEOUT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00055\">EnigmaIOT-Button-Controller.cpp:55</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00067\">EnigmaIOT-Button-Controller.cpp:67</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afe087ce005069779bf699e39695397f4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass::enableClockSync</a></div><div class=\"ttdeci\">void enableClockSync(bool clockSync=true)</div><div class=\"ttdoc\">Controls clock synchronization function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00584\">EnigmaIOTNode.h:584</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a6005c1a520c4bd733e221d70e642ebcd\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></div><div class=\"ttdeci\">EnigmaIOTjsonController * controller</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00051\">EnigmaIOT-Button-Controller.cpp:51</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a4d64e953651e420d91f95bacd3078b4e\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a></div><div class=\"ttdeci\">const int FAILSAFE_RTC_ADDRESS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00058\">EnigmaIOT-Button-Controller.cpp:58</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00061\">EnigmaIOT-Button-Controller.cpp:61</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae59a645aaed1e5b550bdc7967c45c170\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">EnigmaIOTjsonController::sendDataCallback</a></div><div class=\"ttdeci\">void sendDataCallback(sendData_cb cb)</div><div class=\"ttdoc\">Register send data callback to run when module needs to send a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00074\">EnigmaIOTjsonController.h:74</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a></div><div class=\"ttdeci\">dataMessageType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00068\">EnigmaIOTNode.h:68</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a48bf137d2f77f2167f2c2d56cdf26c10\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController::loadConfig</a></div><div class=\"ttdeci\">virtual bool loadConfig()=0</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></div><div class=\"ttdeci\">@ DATA_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00069\">EnigmaIOTNode.h:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aafdd17efe90bfc2dd9af758633034f82\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">EnigmaIOTNodeClass::enableBroadcast</a></div><div class=\"ttdeci\">void enableBroadcast(bool broadcast=true)</div><div class=\"ttdoc\">Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00566\">EnigmaIOTNode.h:566</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a81ab5be7b67c28948ea5de40e5d3c360\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a></div><div class=\"ttdeci\">void sleep()</div><div class=\"ttdoc\">Requests transition to sleep mode (low energy state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01564\">EnigmaIOTNode.cpp:1564</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a960401606ecc83efdb2e45646619f277\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a></div><div class=\"ttdeci\">void wifiManagerExit(boolean status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00092\">EnigmaIOT-Button-Controller.cpp:92</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a43809462401bef0a7697175450f025ae\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">EnigmaIOTNodeClass::onWiFiManagerExit</a></div><div class=\"ttdeci\">void onWiFiManagerExit(onWiFiManagerExit_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager exit.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00719\">EnigmaIOTNode.h:719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aButtonController_8h_html\"><div class=\"ttname\"><a href=\"ButtonController_8h.html\">ButtonController.h</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00157\">EnigmaIOT-Button-Controller.cpp:157</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a92cabfdedc76da41398b548ff7e6e799\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">EnigmaIOTNodeClass::onWiFiManagerStarted</a></div><div class=\"ttdeci\">void onWiFiManagerStarted(simpleEventHandler_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager start.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00727\">EnigmaIOTNode.h:727</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00101\">EnigmaIOT-Button-Controller.cpp:101</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ab2f0dacf8b11038d862eb9fa3f1254ca\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController::processRxCommand</a></div><div class=\"ttdeci\">virtual bool processRxCommand(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)=0</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a436eb0a595405e52dc3a937c5968447f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass::sendHADiscoveryMessage</a></div><div class=\"ttdeci\">bool sendHADiscoveryMessage(const uint8_t *data, size_t len)</div><div class=\"ttdoc\">Builds, encrypts and sends a HomeAssistant discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01764\">EnigmaIOTNode.cpp:1764</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_af040306e47883ec3c541ae1a43f77a1d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a></div><div class=\"ttdeci\">#define SLEEPY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00040\">EnigmaIOT-Button-Controller.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a56e99497e68b8f6f9d31822c4ecaf3ea\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController::setup</a></div><div class=\"ttdeci\">virtual void setup(EnigmaIOTNodeClass *node, void *config=NULL)=0</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a187f3eb82f9948d5b53bd7eb480f1dd4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a></div><div class=\"ttdeci\">void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00089\">EnigmaIOTNode.cpp:89</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00083\">EnigmaIOT-Button-Controller.cpp:83</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a734029c5fc6508cd75bf19cd7f52b66d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a></div><div class=\"ttdeci\">const int LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00057\">EnigmaIOT-Button-Controller.cpp:57</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_ad151c02682f80a13429640710b842160\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a></div><div class=\"ttdeci\">void wifiManagerStarted()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00097\">EnigmaIOT-Button-Controller.cpp:97</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_ae4fae2891cab0e7811bb5f339d57d213\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a></div><div class=\"ttdeci\">const int MAX_CONSECUTIVE_BOOT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00056\">EnigmaIOT-Button-Controller.cpp:56</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a450a7c16ead7b3c7b882536b08f30a00\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></div><div class=\"ttdeci\">#define LED_BUILTIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00043\">EnigmaIOT-Button-Controller.cpp:43</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a></div><div class=\"ttdeci\">@ HA_DISC_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00072\">EnigmaIOTNode.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a2d577988d753f4702c13e41090c705a4\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a></div><div class=\"ttdeci\">bool sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00072\">EnigmaIOT-Button-Controller.cpp:72</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a08bca59db4b190eaaea4d47b7562869c\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a></div><div class=\"ttdeci\">#define RESET_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00053\">EnigmaIOT-Button-Controller.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-DashButton-Controller_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-DashButton-Controller/EnigmaIOT-DashButton-Controller.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b65b262e0a2e64b925763a7d4046e738.html\">EnigmaIOT-DashButton-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-DashButton-Controller.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n<code>#include &lt;FailSafe.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"DashButtonController_8h_source.html\">DashButtonController.h</a>&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;Curve25519.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n<code>#include &lt;DNSServer.h&gt;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a>&#160;&#160;&#160;1</td></tr>\n<tr class=\"separator:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">USE_SERIAL</a></td></tr>\n<tr class=\"separator:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>&#160;&#160;&#160;13</td></tr>\n<tr class=\"separator:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> ()</td></tr>\n<tr class=\"separator:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2d577988d753f4702c13e41090c705a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType)</td></tr>\n<tr class=\"separator:a2d577988d753f4702c13e41090c705a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"separator:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a960401606ecc83efdb2e45646619f277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (boolean <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:a960401606ecc83efdb2e45646619f277\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad151c02682f80a13429640710b842160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> ()</td></tr>\n<tr class=\"separator:ad151c02682f80a13429640710b842160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></td></tr>\n<tr class=\"separator:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 7000</td></tr>\n<tr class=\"separator:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3</td></tr>\n<tr class=\"separator:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0</td></tr>\n<tr class=\"separator:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00054\">54</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00048\">48</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a08bca59db4b190eaaea4d47b7562869c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a08bca59db4b190eaaea4d47b7562869c\">&#9670;&nbsp;</a></span>RESET_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define RESET_PIN&#160;&#160;&#160;13</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00058\">58</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af040306e47883ec3c541ae1a43f77a1d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af040306e47883ec3c541ae1a43f77a1d\">&#9670;&nbsp;</a></span>SLEEPY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SLEEPY&#160;&#160;&#160;1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00045\">45</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2cb4a65422d8c7bd10ff4436e8a79b1b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2cb4a65422d8c7bd10ff4436e8a79b1b\">&#9670;&nbsp;</a></span>USE_SERIAL</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define USE_SERIAL</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00052\">52</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a940f8c4df553df52c9145ef2df107ad3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a940f8c4df553df52c9145ef2df107ad3\">&#9670;&nbsp;</a></span>connectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void connectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00066\">66</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a23fc74fc5731518093d5fa0db24edae1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23fc74fc5731518093d5fa0db24edae1\">&#9670;&nbsp;</a></span>disconnectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void disconnectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00072\">72</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00165\">165</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81397ad933b5a8b902d6161f702838fc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81397ad933b5a8b902d6161f702838fc\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00088\">88</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2d577988d753f4702c13e41090c705a4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2d577988d753f4702c13e41090c705a4\">&#9670;&nbsp;</a></span>sendUplinkData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool sendUplinkData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>dataMsgType</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00077\">77</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00106\">106</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a960401606ecc83efdb2e45646619f277\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a960401606ecc83efdb2e45646619f277\">&#9670;&nbsp;</a></span>wifiManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">boolean&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00097\">97</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad151c02682f80a13429640710b842160\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad151c02682f80a13429640710b842160\">&#9670;&nbsp;</a></span>wifiManagerStarted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerStarted </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00102\">102</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a00c12add296f0d83ff8d3437e23651c9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a00c12add296f0d83ff8d3437e23651c9\">&#9670;&nbsp;</a></span>BOOT_FLAG_TIMEOUT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const time_t BOOT_FLAG_TIMEOUT = 7000</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00060\">60</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6005c1a520c4bd733e221d70e642ebcd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6005c1a520c4bd733e221d70e642ebcd\">&#9670;&nbsp;</a></span>controller</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* controller</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00056\">56</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4d64e953651e420d91f95bacd3078b4e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4d64e953651e420d91f95bacd3078b4e\">&#9670;&nbsp;</a></span>FAILSAFE_RTC_ADDRESS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int FAILSAFE_RTC_ADDRESS = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00063\">63</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a734029c5fc6508cd75bf19cd7f52b66d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a734029c5fc6508cd75bf19cd7f52b66d\">&#9670;&nbsp;</a></span>LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int LED = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00062\">62</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae4fae2891cab0e7811bb5f339d57d213\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae4fae2891cab0e7811bb5f339d57d213\">&#9670;&nbsp;</a></span>MAX_CONSECUTIVE_BOOT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int MAX_CONSECUTIVE_BOOT = 3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00061\">61</a> of file <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">EnigmaIOT-DashButton-Controller.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-DashButton-Controller_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-DashButton-Controller/EnigmaIOT-DashButton-Controller.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b65b262e0a2e64b925763a7d4046e738.html\">EnigmaIOT-DashButton-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-DashButton-Controller.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOT-DashButton-Controller_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#if !defined ESP8266 &amp;&amp; !defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#error Node only supports ESP8266 or ESP32 platform</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;FailSafe.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"DashButtonController_8h.html\">DashButtonController.h</a>&quot;</span> <span class=\"comment\">// &lt;-- Include here your controller class header</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266HTTPClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266httpUpdate.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP32</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &lt;AsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP8266</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &lt;driver/adc.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &lt;Curve25519.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &lt;DNSServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">   45</a></span>&#160;<span class=\"preprocessor\">#define SLEEPY 1 // Set it to 1 if your node should sleep after sending data</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   48</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#endif // !LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">// If you do need serial for your project you must disable serial debug by commenting next line</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">   52</a></span>&#160;<span class=\"preprocessor\">#define USE_SERIAL // Don&#39;t forget to set DEBUG_LEVEL to NONE if serial is disabled</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   54</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">   56</a></span>&#160;<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>; <span class=\"comment\">// Generic controller is refferenced here. You do not need to modify it</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">   58</a></span>&#160;<span class=\"preprocessor\">#define RESET_PIN 13 // You can set a different configuration reset pin here. Check for conflicts with used pins.</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">   60</a></span>&#160;<span class=\"keyword\">const</span> time_t <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 7000; <span class=\"comment\">// Time in ms to reset flag</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">   61</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">   62</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">   63</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0; <span class=\"comment\">// If you use RTC memory adjust offset to not overwrite other data</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160; </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"comment\">// Called when node is connected to gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">   66</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"comment\">// Called when node is unregistered from gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">   72</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Disconnected. Reason %d&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"comment\">// Called to route messages to EnitmaIOTNode class. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">   77</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType) {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">sendHADiscoveryMessage</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160; </div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"comment\">// Called to route incoming messages to your code. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">   88</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">processRxCommand</a> (mac, buffer, length, command, payloadEncoding)) {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Command processed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Command error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">   97</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (<span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">configManagerExit</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">  102</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> () {</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160; </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  106</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160; </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#ifdef USE_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    Serial.begin (921600);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    <span class=\"comment\">//delay (1000);</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    Serial.println ();</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160; </div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    FailSafe.checkBoot (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a>, <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a>, <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a>); <span class=\"comment\">// Parameters are optional</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user setup if fail safe mode is activated</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a> = (<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>*)<span class=\"keyword\">new</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> (); <span class=\"comment\">// Use your class name here</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160; </div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a> (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>); <span class=\"comment\">// Set communication LED</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>); <span class=\"comment\">// Set reset pin</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>); <span class=\"comment\">// Configure registration handler</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>); <span class=\"comment\">// Configure unregistration handler</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>); <span class=\"comment\">// Configure incoming data handler</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a> (<span class=\"keyword\">false</span>); <span class=\"comment\">// Set to true if you need this node to get its clock syncronized with gateway</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">onWiFiManagerStarted</a> (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a>);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">onWiFiManagerExit</a> (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a>);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160; </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">loadConfig</a> ()) { <span class=\"comment\">// Trigger custom configuration loading</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error reading config file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keywordflow\">if</span> (FILESYSTEM.format ())</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;SPIFFS Formatted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160; </div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>, NULL, NULL, <span class=\"keyword\">true</span>, <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a> == 1); <span class=\"comment\">// Start EnigmaIOT communication</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">setSleepTime</a> (0, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    uint8_t macAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;    <span class=\"comment\">// Set Address using internal MAC Address. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    <span class=\"keywordflow\">if</span> (wifi_get_macaddr (STATION_IF, macAddress))</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    <span class=\"keywordflow\">if</span> ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (macAddress);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node address set to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (macAddress));</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a> (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a>); <span class=\"comment\">// Listen for data from controller class</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">setup</a> (&amp;<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>);            <span class=\"comment\">// Start controller class</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160; </div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\">#if SLEEPY == 1</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a> ();</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160; </div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;END setup&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160; </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  165</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    FailSafe.loop (<a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a>); <span class=\"comment\">// Use always this line</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160; </div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user loop code if Fail Safe mode is active</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160; </div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">loop</a> (); <span class=\"comment\">// Loop controller class</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;callHAdiscoveryCalls (); <span class=\"comment\">// Send HA registration messages</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY </span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> (); <span class=\"comment\">// Mantain EnigmaIOT connection</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160; </div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;    FailSafe.resetFlag ();</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a7d1e90a75f4b1b5abd5480d00102debf\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController::loop</a></div><div class=\"ttdeci\">virtual void loop()=0</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a9d83f8376a37624a551421a2c8a90c5f\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController::configManagerStart</a></div><div class=\"ttdeci\">virtual void configManagerStart()=0</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a844043532561398d54fa45cd7f0cf4ed\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController::configManagerExit</a></div><div class=\"ttdeci\">virtual void configManagerExit(bool status)=0</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a4d64e953651e420d91f95bacd3078b4e\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a></div><div class=\"ttdeci\">const int FAILSAFE_RTC_ADDRESS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00063\">EnigmaIOT-DashButton-Controller.cpp:63</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a734029c5fc6508cd75bf19cd7f52b66d\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a></div><div class=\"ttdeci\">const int LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00062\">EnigmaIOT-DashButton-Controller.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afe087ce005069779bf699e39695397f4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass::enableClockSync</a></div><div class=\"ttdeci\">void enableClockSync(bool clockSync=true)</div><div class=\"ttdoc\">Controls clock synchronization function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00584\">EnigmaIOTNode.h:584</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_ad151c02682f80a13429640710b842160\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a></div><div class=\"ttdeci\">void wifiManagerStarted()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00102\">EnigmaIOT-DashButton-Controller.cpp:102</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00072\">EnigmaIOT-DashButton-Controller.cpp:72</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a2d577988d753f4702c13e41090c705a4\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a></div><div class=\"ttdeci\">bool sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00077\">EnigmaIOT-DashButton-Controller.cpp:77</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a6432011ed34012e55d393bfd0c99219e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">EnigmaIOTNodeClass::setSleepTime</a></div><div class=\"ttdeci\">void setSleepTime(uint32_t sleepTime, bool forceSleepForever=false)</div><div class=\"ttdoc\">Allows to configure a new sleep time period from user code.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00948\">EnigmaIOTNode.cpp:948</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_af040306e47883ec3c541ae1a43f77a1d\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a></div><div class=\"ttdeci\">#define SLEEPY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00045\">EnigmaIOT-DashButton-Controller.cpp:45</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00054\">EnigmaIOT-DashButton-Controller.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae59a645aaed1e5b550bdc7967c45c170\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">EnigmaIOTjsonController::sendDataCallback</a></div><div class=\"ttdeci\">void sendDataCallback(sendData_cb cb)</div><div class=\"ttdoc\">Register send data callback to run when module needs to send a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00074\">EnigmaIOTjsonController.h:74</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a450a7c16ead7b3c7b882536b08f30a00\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></div><div class=\"ttdeci\">#define LED_BUILTIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00048\">EnigmaIOT-DashButton-Controller.cpp:48</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a></div><div class=\"ttdeci\">dataMessageType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00068\">EnigmaIOTNode.h:68</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a48bf137d2f77f2167f2c2d56cdf26c10\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController::loadConfig</a></div><div class=\"ttdeci\">virtual bool loadConfig()=0</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00088\">EnigmaIOT-DashButton-Controller.cpp:88</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></div><div class=\"ttdeci\">@ DATA_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00069\">EnigmaIOTNode.h:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a81ab5be7b67c28948ea5de40e5d3c360\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a></div><div class=\"ttdeci\">void sleep()</div><div class=\"ttdoc\">Requests transition to sleep mode (low energy state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01564\">EnigmaIOTNode.cpp:1564</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a43809462401bef0a7697175450f025ae\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">EnigmaIOTNodeClass::onWiFiManagerExit</a></div><div class=\"ttdeci\">void onWiFiManagerExit(onWiFiManagerExit_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager exit.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00719\">EnigmaIOTNode.h:719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_ae4fae2891cab0e7811bb5f339d57d213\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a></div><div class=\"ttdeci\">const int MAX_CONSECUTIVE_BOOT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00061\">EnigmaIOT-DashButton-Controller.cpp:61</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a00c12add296f0d83ff8d3437e23651c9\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a></div><div class=\"ttdeci\">const time_t BOOT_FLAG_TIMEOUT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00060\">EnigmaIOT-DashButton-Controller.cpp:60</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a08bca59db4b190eaaea4d47b7562869c\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a></div><div class=\"ttdeci\">#define RESET_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00058\">EnigmaIOT-DashButton-Controller.cpp:58</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a92cabfdedc76da41398b548ff7e6e799\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">EnigmaIOTNodeClass::onWiFiManagerStarted</a></div><div class=\"ttdeci\">void onWiFiManagerStarted(simpleEventHandler_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager start.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00727\">EnigmaIOTNode.h:727</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ab2f0dacf8b11038d862eb9fa3f1254ca\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController::processRxCommand</a></div><div class=\"ttdeci\">virtual bool processRxCommand(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)=0</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a436eb0a595405e52dc3a937c5968447f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass::sendHADiscoveryMessage</a></div><div class=\"ttdeci\">bool sendHADiscoveryMessage(const uint8_t *data, size_t len)</div><div class=\"ttdoc\">Builds, encrypts and sends a HomeAssistant discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01764\">EnigmaIOTNode.cpp:1764</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a56e99497e68b8f6f9d31822c4ecaf3ea\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController::setup</a></div><div class=\"ttdeci\">virtual void setup(EnigmaIOTNodeClass *node, void *config=NULL)=0</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aDashButtonController_8h_html\"><div class=\"ttname\"><a href=\"DashButtonController_8h.html\">DashButtonController.h</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00165\">EnigmaIOT-DashButton-Controller.cpp:165</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a187f3eb82f9948d5b53bd7eb480f1dd4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a></div><div class=\"ttdeci\">void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00089\">EnigmaIOTNode.cpp:89</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a960401606ecc83efdb2e45646619f277\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a></div><div class=\"ttdeci\">void wifiManagerExit(boolean status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00097\">EnigmaIOT-DashButton-Controller.cpp:97</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a6005c1a520c4bd733e221d70e642ebcd\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></div><div class=\"ttdeci\">EnigmaIOTjsonController * controller</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00056\">EnigmaIOT-DashButton-Controller.cpp:56</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00106\">EnigmaIOT-DashButton-Controller.cpp:106</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a></div><div class=\"ttdeci\">@ HA_DISC_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00072\">EnigmaIOTNode.h:71</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-DashButton-Controller_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html#l00066\">EnigmaIOT-DashButton-Controller.cpp:66</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-Json-Controller-Template_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Json-Controller-Template/EnigmaIOT-Json-Controller-Template.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d330a1fb834c3b104c380ea4a26b63bb.html\">EnigmaIOT-Json-Controller-Template</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Json-Controller-Template.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n<code>#include &lt;FailSafe.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"BasicController_8h_source.html\">BasicController.h</a>&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a>&#160;&#160;&#160;0</td></tr>\n<tr class=\"separator:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">USE_SERIAL</a></td></tr>\n<tr class=\"separator:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>&#160;&#160;&#160;13</td></tr>\n<tr class=\"separator:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> ()</td></tr>\n<tr class=\"separator:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2d577988d753f4702c13e41090c705a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType)</td></tr>\n<tr class=\"separator:a2d577988d753f4702c13e41090c705a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"separator:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4d022fc715d83a4b69c587df0201b63d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d022fc715d83a4b69c587df0201b63d\">wifiManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:a4d022fc715d83a4b69c587df0201b63d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad151c02682f80a13429640710b842160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> ()</td></tr>\n<tr class=\"separator:ad151c02682f80a13429640710b842160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></td></tr>\n<tr class=\"separator:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 10000</td></tr>\n<tr class=\"separator:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3</td></tr>\n<tr class=\"separator:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0</td></tr>\n<tr class=\"separator:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00047\">47</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00041\">41</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a08bca59db4b190eaaea4d47b7562869c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a08bca59db4b190eaaea4d47b7562869c\">&#9670;&nbsp;</a></span>RESET_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define RESET_PIN&#160;&#160;&#160;13</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00051\">51</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af040306e47883ec3c541ae1a43f77a1d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af040306e47883ec3c541ae1a43f77a1d\">&#9670;&nbsp;</a></span>SLEEPY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SLEEPY&#160;&#160;&#160;0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00037\">37</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2cb4a65422d8c7bd10ff4436e8a79b1b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2cb4a65422d8c7bd10ff4436e8a79b1b\">&#9670;&nbsp;</a></span>USE_SERIAL</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define USE_SERIAL</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00045\">45</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a940f8c4df553df52c9145ef2df107ad3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a940f8c4df553df52c9145ef2df107ad3\">&#9670;&nbsp;</a></span>connectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void connectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00062\">62</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a23fc74fc5731518093d5fa0db24edae1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23fc74fc5731518093d5fa0db24edae1\">&#9670;&nbsp;</a></span>disconnectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void disconnectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00068\">68</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00162\">162</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81397ad933b5a8b902d6161f702838fc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81397ad933b5a8b902d6161f702838fc\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00084\">84</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2d577988d753f4702c13e41090c705a4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2d577988d753f4702c13e41090c705a4\">&#9670;&nbsp;</a></span>sendUplinkData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool sendUplinkData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>dataMsgType</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00073\">73</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00102\">102</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4d022fc715d83a4b69c587df0201b63d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4d022fc715d83a4b69c587df0201b63d\">&#9670;&nbsp;</a></span>wifiManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00093\">93</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad151c02682f80a13429640710b842160\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad151c02682f80a13429640710b842160\">&#9670;&nbsp;</a></span>wifiManagerStarted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerStarted </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00098\">98</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a00c12add296f0d83ff8d3437e23651c9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a00c12add296f0d83ff8d3437e23651c9\">&#9670;&nbsp;</a></span>BOOT_FLAG_TIMEOUT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const time_t BOOT_FLAG_TIMEOUT = 10000</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00053\">53</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6005c1a520c4bd733e221d70e642ebcd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6005c1a520c4bd733e221d70e642ebcd\">&#9670;&nbsp;</a></span>controller</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* controller</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00049\">49</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4d64e953651e420d91f95bacd3078b4e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4d64e953651e420d91f95bacd3078b4e\">&#9670;&nbsp;</a></span>FAILSAFE_RTC_ADDRESS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int FAILSAFE_RTC_ADDRESS = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00056\">56</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a734029c5fc6508cd75bf19cd7f52b66d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a734029c5fc6508cd75bf19cd7f52b66d\">&#9670;&nbsp;</a></span>LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int LED = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00055\">55</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae4fae2891cab0e7811bb5f339d57d213\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae4fae2891cab0e7811bb5f339d57d213\">&#9670;&nbsp;</a></span>MAX_CONSECUTIVE_BOOT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int MAX_CONSECUTIVE_BOOT = 3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00054\">54</a> of file <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">EnigmaIOT-Json-Controller-Template.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-Json-Controller-Template_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Json-Controller-Template/EnigmaIOT-Json-Controller-Template.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d330a1fb834c3b104c380ea4a26b63bb.html\">EnigmaIOT-Json-Controller-Template</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Json-Controller-Template.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#if !defined ESP8266 &amp;&amp; !defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#error Node only supports ESP8266 or ESP32 platform</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160; </div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;FailSafe.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"BasicController_8h.html\">BasicController.h</a>&quot;</span> <span class=\"comment\">// &lt;-- Include here your controller class header</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &lt;driver/adc.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160; </div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#ifndef SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">   37</a></span>&#160;<span class=\"preprocessor\">#define SLEEPY 0 // Set it to 1 if your node should sleep after sending data</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#endif // SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   41</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#endif // LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160; </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"comment\">// If you do need serial for your project you must disable serial debug by commenting next line</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">   45</a></span>&#160;<span class=\"preprocessor\">#define USE_SERIAL // Don&#39;t forget to set DEBUG_LEVEL to NONE if serial is disabled</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   47</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">   49</a></span>&#160;<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>; <span class=\"comment\">// Generic controller is refferenced here. You do not need to modify it</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">   51</a></span>&#160;<span class=\"preprocessor\">#define RESET_PIN 13 // You can set a different configuration reset pin here. Check for conflicts with used pins.</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">   53</a></span>&#160;<span class=\"keyword\">const</span> time_t <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 10000; <span class=\"comment\">// Time in ms to reset flag</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">   54</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">   55</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">   56</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0; <span class=\"comment\">// If you use RTC memory adjust offset to not overwrite other data</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">SLEEP_TIME</a> = 10; <span class=\"comment\">// Sleep time time in secons.</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160; </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"comment\">// Called when node is connected to gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">   62</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"comment\">// Called when node is unregistered from gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">   68</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Disconnected. Reason %d&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"comment\">// Called to route messages to EnitmaIOTNode class. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2d577988d753f4702c13e41090c705a4\">   73</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType) {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">sendHADiscoveryMessage</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160; </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"comment\">// Called to route incoming messages to your code. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">   84</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">processRxCommand</a> (mac, buffer, length, command, payloadEncoding)) {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Command processed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Command error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d022fc715d83a4b69c587df0201b63d\">   93</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d022fc715d83a4b69c587df0201b63d\">wifiManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">configManagerExit</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ad151c02682f80a13429640710b842160\">   98</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> () {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  102</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"preprocessor\">#ifdef USE_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    Serial.begin (921600);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    delay (1000); <span class=\"comment\">// Only for testing</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    Serial.println ();</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160; </div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    FailSafe.checkBoot (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a>, <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a>, <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a>); <span class=\"comment\">// Parameters are optional</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user setup if fail safe mode is activated</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a> = (<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>*)<span class=\"keyword\">new</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> (); <span class=\"comment\">// Use your class name here</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160; </div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a> (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>); <span class=\"comment\">// Set communication LED</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>); <span class=\"comment\">// Set reset pin</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>); <span class=\"comment\">// Configure registration handler</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>); <span class=\"comment\">// Configure unregistration handler</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>); <span class=\"comment\">// Configure incoming data handler</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a> (<span class=\"keyword\">false</span>); <span class=\"comment\">// Set to true if you need this node to get its clock syncronized with gateway</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">onWiFiManagerStarted</a> (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a>);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">onWiFiManagerExit</a> (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d022fc715d83a4b69c587df0201b63d\">wifiManagerExit</a>);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">enableBroadcast</a> ();</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160; </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">loadConfig</a> ()) { <span class=\"comment\">// Trigger custom configuration loading</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error reading config file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keywordflow\">if</span> (FILESYSTEM.format ())</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;File System Formatted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160; </div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>, NULL, NULL, <span class=\"keyword\">true</span>, <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a> == 1); <span class=\"comment\">// Start EnigmaIOT communication</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    <span class=\"comment\">// EnigmaIOTNode.setSleepTime (SLEEP_TIME, true); // Optional</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160; </div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    uint8_t macAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"comment\">// Set Address using internal MAC Address. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    <span class=\"keywordflow\">if</span> (wifi_get_macaddr (STATION_IF, macAddress))</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    <span class=\"keywordflow\">if</span> ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (macAddress);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node address set to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (macAddress));</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a> (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a>); <span class=\"comment\">// Listen for data from controller class</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">setup</a> (&amp;<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>);            <span class=\"comment\">// Start controller class</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a> ();</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160; </div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;END setup&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160; </div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  162</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    FailSafe.loop (<a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a>); <span class=\"comment\">// Use always this line</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160; </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user loop code if Fail Safe mode is active</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160; </div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">loop</a> (); <span class=\"comment\">// Loop controller class</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY </span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;callHAdiscoveryCalls (); <span class=\"comment\">// Send HA registration messages</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY </span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> (); <span class=\"comment\">// Mantain EnigmaIOT connection</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160; </div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    FailSafe.resetFlag ();</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160; </div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a7d1e90a75f4b1b5abd5480d00102debf\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController::loop</a></div><div class=\"ttdeci\">virtual void loop()=0</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a4d64e953651e420d91f95bacd3078b4e\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a></div><div class=\"ttdeci\">const int FAILSAFE_RTC_ADDRESS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00056\">EnigmaIOT-Json-Controller-Template.cpp:56</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a6005c1a520c4bd733e221d70e642ebcd\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></div><div class=\"ttdeci\">EnigmaIOTjsonController * controller</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00049\">EnigmaIOT-Json-Controller-Template.cpp:49</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a9d83f8376a37624a551421a2c8a90c5f\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController::configManagerStart</a></div><div class=\"ttdeci\">virtual void configManagerStart()=0</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a844043532561398d54fa45cd7f0cf4ed\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController::configManagerExit</a></div><div class=\"ttdeci\">virtual void configManagerExit(bool status)=0</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00068\">EnigmaIOT-Json-Controller-Template.cpp:68</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_af040306e47883ec3c541ae1a43f77a1d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a></div><div class=\"ttdeci\">#define SLEEPY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00037\">EnigmaIOT-Json-Controller-Template.cpp:37</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afe087ce005069779bf699e39695397f4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass::enableClockSync</a></div><div class=\"ttdeci\">void enableClockSync(bool clockSync=true)</div><div class=\"ttdoc\">Controls clock synchronization function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00584\">EnigmaIOTNode.h:584</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae59a645aaed1e5b550bdc7967c45c170\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">EnigmaIOTjsonController::sendDataCallback</a></div><div class=\"ttdeci\">void sendDataCallback(sendData_cb cb)</div><div class=\"ttdoc\">Register send data callback to run when module needs to send a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00074\">EnigmaIOTjsonController.h:74</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00047\">EnigmaIOT-Json-Controller-Template.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a91ca03d6b7d66ece63e5bfdc9b0d3260\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">SLEEP_TIME</a></div><div class=\"ttdeci\">const int SLEEP_TIME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00069\">EnigmaIOT-Sensor-Controller.cpp:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a00c12add296f0d83ff8d3437e23651c9\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a></div><div class=\"ttdeci\">const time_t BOOT_FLAG_TIMEOUT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00053\">EnigmaIOT-Json-Controller-Template.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a></div><div class=\"ttdeci\">dataMessageType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00068\">EnigmaIOTNode.h:68</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00062\">EnigmaIOT-Json-Controller-Template.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a48bf137d2f77f2167f2c2d56cdf26c10\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController::loadConfig</a></div><div class=\"ttdeci\">virtual bool loadConfig()=0</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aBasicController_8h_html\"><div class=\"ttname\"><a href=\"BasicController_8h.html\">BasicController.h</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></div><div class=\"ttdeci\">@ DATA_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00069\">EnigmaIOTNode.h:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aafdd17efe90bfc2dd9af758633034f82\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">EnigmaIOTNodeClass::enableBroadcast</a></div><div class=\"ttdeci\">void enableBroadcast(bool broadcast=true)</div><div class=\"ttdoc\">Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00566\">EnigmaIOTNode.h:566</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a81ab5be7b67c28948ea5de40e5d3c360\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a></div><div class=\"ttdeci\">void sleep()</div><div class=\"ttdoc\">Requests transition to sleep mode (low energy state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01564\">EnigmaIOTNode.cpp:1564</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a43809462401bef0a7697175450f025ae\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">EnigmaIOTNodeClass::onWiFiManagerExit</a></div><div class=\"ttdeci\">void onWiFiManagerExit(onWiFiManagerExit_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager exit.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00719\">EnigmaIOTNode.h:719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00162\">EnigmaIOT-Json-Controller-Template.cpp:162</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_ad151c02682f80a13429640710b842160\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a></div><div class=\"ttdeci\">void wifiManagerStarted()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00098\">EnigmaIOT-Json-Controller-Template.cpp:98</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a92cabfdedc76da41398b548ff7e6e799\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">EnigmaIOTNodeClass::onWiFiManagerStarted</a></div><div class=\"ttdeci\">void onWiFiManagerStarted(simpleEventHandler_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager start.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00727\">EnigmaIOTNode.h:727</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ab2f0dacf8b11038d862eb9fa3f1254ca\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController::processRxCommand</a></div><div class=\"ttdeci\">virtual bool processRxCommand(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)=0</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a436eb0a595405e52dc3a937c5968447f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass::sendHADiscoveryMessage</a></div><div class=\"ttdeci\">bool sendHADiscoveryMessage(const uint8_t *data, size_t len)</div><div class=\"ttdoc\">Builds, encrypts and sends a HomeAssistant discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01764\">EnigmaIOTNode.cpp:1764</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a56e99497e68b8f6f9d31822c4ecaf3ea\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController::setup</a></div><div class=\"ttdeci\">virtual void setup(EnigmaIOTNodeClass *node, void *config=NULL)=0</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a4d022fc715d83a4b69c587df0201b63d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d022fc715d83a4b69c587df0201b63d\">wifiManagerExit</a></div><div class=\"ttdeci\">void wifiManagerExit(bool status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00093\">EnigmaIOT-Json-Controller-Template.cpp:93</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a450a7c16ead7b3c7b882536b08f30a00\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></div><div class=\"ttdeci\">#define LED_BUILTIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00041\">EnigmaIOT-Json-Controller-Template.cpp:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a187f3eb82f9948d5b53bd7eb480f1dd4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a></div><div class=\"ttdeci\">void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00089\">EnigmaIOTNode.cpp:89</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00084\">EnigmaIOT-Json-Controller-Template.cpp:84</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_ae4fae2891cab0e7811bb5f339d57d213\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a></div><div class=\"ttdeci\">const int MAX_CONSECUTIVE_BOOT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00054\">EnigmaIOT-Json-Controller-Template.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a2d577988d753f4702c13e41090c705a4\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a></div><div class=\"ttdeci\">bool sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00073\">EnigmaIOT-Json-Controller-Template.cpp:73</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a></div><div class=\"ttdeci\">@ HA_DISC_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00072\">EnigmaIOTNode.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a734029c5fc6508cd75bf19cd7f52b66d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a></div><div class=\"ttdeci\">const int LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00055\">EnigmaIOT-Json-Controller-Template.cpp:55</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00102\">EnigmaIOT-Json-Controller-Template.cpp:102</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Json-Controller-Template_8cpp_html_a08bca59db4b190eaaea4d47b7562869c\"><div class=\"ttname\"><a href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a></div><div class=\"ttdeci\">#define RESET_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html#l00051\">EnigmaIOT-Json-Controller-Template.cpp:51</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-Led-Controller_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Led-Controller/EnigmaIOT-Led-Controller.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_56fe63de1287a706a7081958f8373778.html\">EnigmaIOT-Led-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Led-Controller.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n<code>#include &lt;FailSafe.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"LedController_8h_source.html\">LedController.h</a>&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;Curve25519.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n<code>#include &lt;DNSServer.h&gt;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a>&#160;&#160;&#160;0</td></tr>\n<tr class=\"separator:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">USE_SERIAL</a></td></tr>\n<tr class=\"separator:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>&#160;&#160;&#160;13</td></tr>\n<tr class=\"separator:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> ()</td></tr>\n<tr class=\"separator:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2d577988d753f4702c13e41090c705a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType)</td></tr>\n<tr class=\"separator:a2d577988d753f4702c13e41090c705a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"separator:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a960401606ecc83efdb2e45646619f277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (boolean <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:a960401606ecc83efdb2e45646619f277\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad151c02682f80a13429640710b842160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> ()</td></tr>\n<tr class=\"separator:ad151c02682f80a13429640710b842160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></td></tr>\n<tr class=\"separator:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 10000</td></tr>\n<tr class=\"separator:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3</td></tr>\n<tr class=\"separator:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0</td></tr>\n<tr class=\"separator:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00054\">54</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00048\">48</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a08bca59db4b190eaaea4d47b7562869c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a08bca59db4b190eaaea4d47b7562869c\">&#9670;&nbsp;</a></span>RESET_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define RESET_PIN&#160;&#160;&#160;13</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00058\">58</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af040306e47883ec3c541ae1a43f77a1d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af040306e47883ec3c541ae1a43f77a1d\">&#9670;&nbsp;</a></span>SLEEPY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SLEEPY&#160;&#160;&#160;0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00045\">45</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2cb4a65422d8c7bd10ff4436e8a79b1b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2cb4a65422d8c7bd10ff4436e8a79b1b\">&#9670;&nbsp;</a></span>USE_SERIAL</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define USE_SERIAL</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00052\">52</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a940f8c4df553df52c9145ef2df107ad3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a940f8c4df553df52c9145ef2df107ad3\">&#9670;&nbsp;</a></span>connectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void connectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00069\">69</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a23fc74fc5731518093d5fa0db24edae1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23fc74fc5731518093d5fa0db24edae1\">&#9670;&nbsp;</a></span>disconnectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void disconnectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00075\">75</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00169\">169</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81397ad933b5a8b902d6161f702838fc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81397ad933b5a8b902d6161f702838fc\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00091\">91</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2d577988d753f4702c13e41090c705a4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2d577988d753f4702c13e41090c705a4\">&#9670;&nbsp;</a></span>sendUplinkData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool sendUplinkData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>dataMsgType</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00080\">80</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00109\">109</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a960401606ecc83efdb2e45646619f277\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a960401606ecc83efdb2e45646619f277\">&#9670;&nbsp;</a></span>wifiManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">boolean&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00100\">100</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad151c02682f80a13429640710b842160\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad151c02682f80a13429640710b842160\">&#9670;&nbsp;</a></span>wifiManagerStarted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerStarted </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00105\">105</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a00c12add296f0d83ff8d3437e23651c9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a00c12add296f0d83ff8d3437e23651c9\">&#9670;&nbsp;</a></span>BOOT_FLAG_TIMEOUT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const time_t BOOT_FLAG_TIMEOUT = 10000</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00060\">60</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6005c1a520c4bd733e221d70e642ebcd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6005c1a520c4bd733e221d70e642ebcd\">&#9670;&nbsp;</a></span>controller</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* controller</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00056\">56</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4d64e953651e420d91f95bacd3078b4e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4d64e953651e420d91f95bacd3078b4e\">&#9670;&nbsp;</a></span>FAILSAFE_RTC_ADDRESS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int FAILSAFE_RTC_ADDRESS = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00063\">63</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a734029c5fc6508cd75bf19cd7f52b66d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a734029c5fc6508cd75bf19cd7f52b66d\">&#9670;&nbsp;</a></span>LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int LED = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00062\">62</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae4fae2891cab0e7811bb5f339d57d213\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae4fae2891cab0e7811bb5f339d57d213\">&#9670;&nbsp;</a></span>MAX_CONSECUTIVE_BOOT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int MAX_CONSECUTIVE_BOOT = 3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00061\">61</a> of file <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">EnigmaIOT-Led-Controller.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-Led-Controller_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Led-Controller/EnigmaIOT-Led-Controller.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_56fe63de1287a706a7081958f8373778.html\">EnigmaIOT-Led-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Led-Controller.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOT-Led-Controller_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#if !defined ESP8266 &amp;&amp; !defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#error Node only supports ESP8266 or ESP32 platform</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;FailSafe.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"LedController_8h.html\">LedController.h</a>&quot;</span> <span class=\"comment\">// &lt;-- Include here your controller class header</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266HTTPClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266httpUpdate.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP32</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &lt;AsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP8266</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &lt;driver/adc.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &lt;Curve25519.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &lt;DNSServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">   45</a></span>&#160;<span class=\"preprocessor\">#define SLEEPY 0 // Set it to 1 if your node should sleep after sending data</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   48</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#endif // !LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">// If you do need serial for your project you must disable serial debug by commenting next line</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">   52</a></span>&#160;<span class=\"preprocessor\">#define USE_SERIAL // Don&#39;t forget to set DEBUG_LEVEL to NONE if serial is disabled</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   54</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">   56</a></span>&#160;<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>; <span class=\"comment\">// Generic controller is refferenced here. You do not need to modify it</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">   58</a></span>&#160;<span class=\"preprocessor\">#define RESET_PIN 13 // You can set a different configuration reset pin here. Check for conflicts with used pins.</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">   60</a></span>&#160;<span class=\"keyword\">const</span> time_t <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 10000; <span class=\"comment\">// Time in ms to reset flag</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">   61</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">   62</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">   63</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0; <span class=\"comment\">// If you use RTC memory adjust offset to not overwrite other data</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">SLEEP_TIME</a> = 10; <span class=\"comment\">// Sleep time time in secons.</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160; </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"comment\">// Called when node is connected to gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">   69</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160; </div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"comment\">// Called when node is unregistered from gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">   75</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Disconnected. Reason %d&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160; </div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"comment\">// Called to route messages to EnitmaIOTNode class. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">   80</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType) {</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">sendHADiscoveryMessage</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160; </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"comment\">// Called to route incoming messages to your code. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">   91</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">processRxCommand</a> (mac, buffer, length, command, payloadEncoding)) {</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Command processed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Command error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160; </div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">  100</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (<span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">configManagerExit</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">  105</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> () {</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160; </div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  109</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160; </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"preprocessor\">#ifdef USE_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    Serial.begin (921600);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    <span class=\"comment\">//delay (1000);</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    Serial.println ();</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    FailSafe.checkBoot (<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a>, <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a>, <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a>); <span class=\"comment\">// Parameters are optional</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user setup if fail safe mode is activated</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160; </div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a> = (<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>*)<span class=\"keyword\">new</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> (); <span class=\"comment\">// Use your class name here</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160; </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <span class=\"comment\">//EnigmaIOTNode.setLed (BLUE_LED); // Set communication LED</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>); <span class=\"comment\">// Set reset pin</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>); <span class=\"comment\">// Configure registration handler</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>); <span class=\"comment\">// Configure unregistration handler</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>); <span class=\"comment\">// Configure incoming data handler</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a> (<span class=\"keyword\">true</span>); <span class=\"comment\">// Set to true if you need this node to get its clock syncronized with gateway</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                                          <span class=\"comment\">// You should enable it if your node noes not send any periodic data</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">onWiFiManagerStarted</a> (<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a>);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">onWiFiManagerExit</a> (<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a>);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160; </div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">loadConfig</a> ()) { <span class=\"comment\">// Trigger custom configuration loading</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error reading config file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keywordflow\">if</span> (FILESYSTEM.format ())</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;SPIFFS Formatted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>, NULL, NULL, <span class=\"keyword\">true</span>, <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a> == 1); <span class=\"comment\">// Start EnigmaIOT communication</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">setSleepTime</a> (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">SLEEP_TIME</a>, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    uint8_t macAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    <span class=\"comment\">// Set Address using internal MAC Address. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    <span class=\"keywordflow\">if</span> (wifi_get_macaddr (STATION_IF, macAddress))</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    <span class=\"keywordflow\">if</span> ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (macAddress);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        <span class=\"keywordtype\">char</span> macStr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node address set to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (macAddress, macStr));</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160; </div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a> (<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a>); <span class=\"comment\">// Listen for data from controller class</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">setup</a> (&amp;<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>);            <span class=\"comment\">// Start controller class</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160; </div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a> ();</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160; </div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;END setup&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160; </div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Led-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  169</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    FailSafe.loop (<a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a>); <span class=\"comment\">// Use always this line</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160; </div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user loop code if Fail Safe mode is active</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160; </div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">loop</a> (); <span class=\"comment\">// Loop controller class</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY </span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;callHAdiscoveryCalls (); <span class=\"comment\">// Send HA registration messages</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY </span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> (); <span class=\"comment\">// Mantain EnigmaIOT connection</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a7d1e90a75f4b1b5abd5480d00102debf\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController::loop</a></div><div class=\"ttdeci\">virtual void loop()=0</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a9d83f8376a37624a551421a2c8a90c5f\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController::configManagerStart</a></div><div class=\"ttdeci\">virtual void configManagerStart()=0</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a844043532561398d54fa45cd7f0cf4ed\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController::configManagerExit</a></div><div class=\"ttdeci\">virtual void configManagerExit(bool status)=0</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00069\">EnigmaIOT-Led-Controller.cpp:69</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afe087ce005069779bf699e39695397f4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass::enableClockSync</a></div><div class=\"ttdeci\">void enableClockSync(bool clockSync=true)</div><div class=\"ttdoc\">Controls clock synchronization function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00584\">EnigmaIOTNode.h:584</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a450a7c16ead7b3c7b882536b08f30a00\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></div><div class=\"ttdeci\">#define LED_BUILTIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00048\">EnigmaIOT-Led-Controller.cpp:48</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a6432011ed34012e55d393bfd0c99219e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">EnigmaIOTNodeClass::setSleepTime</a></div><div class=\"ttdeci\">void setSleepTime(uint32_t sleepTime, bool forceSleepForever=false)</div><div class=\"ttdoc\">Allows to configure a new sleep time period from user code.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00948\">EnigmaIOTNode.cpp:948</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae59a645aaed1e5b550bdc7967c45c170\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">EnigmaIOTjsonController::sendDataCallback</a></div><div class=\"ttdeci\">void sendDataCallback(sendData_cb cb)</div><div class=\"ttdoc\">Register send data callback to run when module needs to send a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00074\">EnigmaIOTjsonController.h:74</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a00c12add296f0d83ff8d3437e23651c9\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a></div><div class=\"ttdeci\">const time_t BOOT_FLAG_TIMEOUT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00060\">EnigmaIOT-Led-Controller.cpp:60</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a91ca03d6b7d66ece63e5bfdc9b0d3260\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">SLEEP_TIME</a></div><div class=\"ttdeci\">const int SLEEP_TIME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00069\">EnigmaIOT-Sensor-Controller.cpp:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a></div><div class=\"ttdeci\">dataMessageType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00068\">EnigmaIOTNode.h:68</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_ae4fae2891cab0e7811bb5f339d57d213\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a></div><div class=\"ttdeci\">const int MAX_CONSECUTIVE_BOOT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00061\">EnigmaIOT-Led-Controller.cpp:61</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a48bf137d2f77f2167f2c2d56cdf26c10\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController::loadConfig</a></div><div class=\"ttdeci\">virtual bool loadConfig()=0</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a6005c1a520c4bd733e221d70e642ebcd\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></div><div class=\"ttdeci\">EnigmaIOTjsonController * controller</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00056\">EnigmaIOT-Led-Controller.cpp:56</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></div><div class=\"ttdeci\">@ DATA_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00069\">EnigmaIOTNode.h:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00109\">EnigmaIOT-Led-Controller.cpp:109</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a81ab5be7b67c28948ea5de40e5d3c360\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a></div><div class=\"ttdeci\">void sleep()</div><div class=\"ttdoc\">Requests transition to sleep mode (low energy state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01564\">EnigmaIOTNode.cpp:1564</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a43809462401bef0a7697175450f025ae\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">EnigmaIOTNodeClass::onWiFiManagerExit</a></div><div class=\"ttdeci\">void onWiFiManagerExit(onWiFiManagerExit_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager exit.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00719\">EnigmaIOTNode.h:719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00075\">EnigmaIOT-Led-Controller.cpp:75</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a92cabfdedc76da41398b548ff7e6e799\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">EnigmaIOTNodeClass::onWiFiManagerStarted</a></div><div class=\"ttdeci\">void onWiFiManagerStarted(simpleEventHandler_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager start.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00727\">EnigmaIOTNode.h:727</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00169\">EnigmaIOT-Led-Controller.cpp:169</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ab2f0dacf8b11038d862eb9fa3f1254ca\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController::processRxCommand</a></div><div class=\"ttdeci\">virtual bool processRxCommand(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)=0</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a436eb0a595405e52dc3a937c5968447f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass::sendHADiscoveryMessage</a></div><div class=\"ttdeci\">bool sendHADiscoveryMessage(const uint8_t *data, size_t len)</div><div class=\"ttdoc\">Builds, encrypts and sends a HomeAssistant discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01764\">EnigmaIOTNode.cpp:1764</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a56e99497e68b8f6f9d31822c4ecaf3ea\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController::setup</a></div><div class=\"ttdeci\">virtual void setup(EnigmaIOTNodeClass *node, void *config=NULL)=0</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a08bca59db4b190eaaea4d47b7562869c\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a></div><div class=\"ttdeci\">#define RESET_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00058\">EnigmaIOT-Led-Controller.cpp:58</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a4d64e953651e420d91f95bacd3078b4e\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a></div><div class=\"ttdeci\">const int FAILSAFE_RTC_ADDRESS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00063\">EnigmaIOT-Led-Controller.cpp:63</a></div></div>\n<div class=\"ttc\" id=\"aLedController_8h_html\"><div class=\"ttname\"><a href=\"LedController_8h.html\">LedController.h</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_af040306e47883ec3c541ae1a43f77a1d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a></div><div class=\"ttdeci\">#define SLEEPY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00045\">EnigmaIOT-Led-Controller.cpp:45</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a960401606ecc83efdb2e45646619f277\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a></div><div class=\"ttdeci\">void wifiManagerExit(boolean status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00100\">EnigmaIOT-Led-Controller.cpp:100</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00091\">EnigmaIOT-Led-Controller.cpp:91</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a></div><div class=\"ttdeci\">@ HA_DISC_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00072\">EnigmaIOTNode.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_ad151c02682f80a13429640710b842160\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a></div><div class=\"ttdeci\">void wifiManagerStarted()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00105\">EnigmaIOT-Led-Controller.cpp:105</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a734029c5fc6508cd75bf19cd7f52b66d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a></div><div class=\"ttdeci\">const int LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00062\">EnigmaIOT-Led-Controller.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Led-Controller_8cpp_html_a2d577988d753f4702c13e41090c705a4\"><div class=\"ttname\"><a href=\"EnigmaIOT-Led-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a></div><div class=\"ttdeci\">bool sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html#l00080\">EnigmaIOT-Led-Controller.cpp:80</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-Sensor-Controller_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Sensor-Controller/EnigmaIOT-Sensor-Controller.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_00c6ed3b0ef8b691ed3b9ecb58c6534d.html\">EnigmaIOT-Sensor-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Sensor-Controller.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n<code>#include &lt;FailSafe.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a>&quot;</code><br />\n<code>#include &lt;OneWire.h&gt;</code><br />\n<code>#include &lt;DallasTemperature.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;Curve25519.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n<code>#include &lt;DNSServer.h&gt;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a>&#160;&#160;&#160;1</td></tr>\n<tr class=\"separator:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">USE_SERIAL</a></td></tr>\n<tr class=\"separator:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>&#160;&#160;&#160;13</td></tr>\n<tr class=\"separator:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> ()</td></tr>\n<tr class=\"separator:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2d577988d753f4702c13e41090c705a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType)</td></tr>\n<tr class=\"separator:a2d577988d753f4702c13e41090c705a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"separator:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a960401606ecc83efdb2e45646619f277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (boolean <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:a960401606ecc83efdb2e45646619f277\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad151c02682f80a13429640710b842160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> ()</td></tr>\n<tr class=\"separator:ad151c02682f80a13429640710b842160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></td></tr>\n<tr class=\"separator:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 10000</td></tr>\n<tr class=\"separator:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3</td></tr>\n<tr class=\"separator:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0</td></tr>\n<tr class=\"separator:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91ca03d6b7d66ece63e5bfdc9b0d3260\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">SLEEP_TIME</a> = 10</td></tr>\n<tr class=\"separator:a91ca03d6b7d66ece63e5bfdc9b0d3260\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00058\">58</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00052\">52</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a08bca59db4b190eaaea4d47b7562869c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a08bca59db4b190eaaea4d47b7562869c\">&#9670;&nbsp;</a></span>RESET_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define RESET_PIN&#160;&#160;&#160;13</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00062\">62</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af040306e47883ec3c541ae1a43f77a1d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af040306e47883ec3c541ae1a43f77a1d\">&#9670;&nbsp;</a></span>SLEEPY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SLEEPY&#160;&#160;&#160;1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00049\">49</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2cb4a65422d8c7bd10ff4436e8a79b1b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2cb4a65422d8c7bd10ff4436e8a79b1b\">&#9670;&nbsp;</a></span>USE_SERIAL</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define USE_SERIAL</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00056\">56</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a940f8c4df553df52c9145ef2df107ad3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a940f8c4df553df52c9145ef2df107ad3\">&#9670;&nbsp;</a></span>connectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void connectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00073\">73</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a23fc74fc5731518093d5fa0db24edae1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23fc74fc5731518093d5fa0db24edae1\">&#9670;&nbsp;</a></span>disconnectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void disconnectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00079\">79</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00175\">175</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81397ad933b5a8b902d6161f702838fc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81397ad933b5a8b902d6161f702838fc\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00095\">95</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2d577988d753f4702c13e41090c705a4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2d577988d753f4702c13e41090c705a4\">&#9670;&nbsp;</a></span>sendUplinkData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool sendUplinkData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>dataMsgType</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00084\">84</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00113\">113</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a960401606ecc83efdb2e45646619f277\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a960401606ecc83efdb2e45646619f277\">&#9670;&nbsp;</a></span>wifiManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">boolean&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00104\">104</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad151c02682f80a13429640710b842160\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad151c02682f80a13429640710b842160\">&#9670;&nbsp;</a></span>wifiManagerStarted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerStarted </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00109\">109</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a00c12add296f0d83ff8d3437e23651c9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a00c12add296f0d83ff8d3437e23651c9\">&#9670;&nbsp;</a></span>BOOT_FLAG_TIMEOUT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const time_t BOOT_FLAG_TIMEOUT = 10000</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00064\">64</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6005c1a520c4bd733e221d70e642ebcd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6005c1a520c4bd733e221d70e642ebcd\">&#9670;&nbsp;</a></span>controller</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* controller</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00060\">60</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4d64e953651e420d91f95bacd3078b4e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4d64e953651e420d91f95bacd3078b4e\">&#9670;&nbsp;</a></span>FAILSAFE_RTC_ADDRESS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int FAILSAFE_RTC_ADDRESS = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00067\">67</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a734029c5fc6508cd75bf19cd7f52b66d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a734029c5fc6508cd75bf19cd7f52b66d\">&#9670;&nbsp;</a></span>LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int LED = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00066\">66</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae4fae2891cab0e7811bb5f339d57d213\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae4fae2891cab0e7811bb5f339d57d213\">&#9670;&nbsp;</a></span>MAX_CONSECUTIVE_BOOT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int MAX_CONSECUTIVE_BOOT = 3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00065\">65</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a91ca03d6b7d66ece63e5bfdc9b0d3260\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a91ca03d6b7d66ece63e5bfdc9b0d3260\">&#9670;&nbsp;</a></span>SLEEP_TIME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int SLEEP_TIME = 10</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00069\">69</a> of file <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">EnigmaIOT-Sensor-Controller.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-Sensor-Controller_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Sensor-Controller/EnigmaIOT-Sensor-Controller.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_00c6ed3b0ef8b691ed3b9ecb58c6534d.html\">EnigmaIOT-Sensor-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Sensor-Controller.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOT-Sensor-Controller_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#if !defined ESP8266 &amp;&amp; !defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#error Node only supports ESP8266 or ESP32 platform</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160; </div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;FailSafe.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"ds18b20Controller_8h.html\">ds18b20Controller.h</a>&quot;</span> <span class=\"comment\">// &lt;-- Include here your controller class header</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;OneWire.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;DallasTemperature.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160; </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160; </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266HTTPClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266httpUpdate.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP32</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &lt;AsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP8266</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &lt;driver/adc.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &lt;Curve25519.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#include &lt;DNSServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">   49</a></span>&#160;<span class=\"preprocessor\">#define SLEEPY 1 // Set it to 1 if your node should sleep after sending data</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   52</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#endif // !LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160; </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"comment\">// If you do need serial for your project you must disable serial debug by commenting next line</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">   56</a></span>&#160;<span class=\"preprocessor\">#define USE_SERIAL // Don&#39;t forget to set DEBUG_LEVEL to NONE if serial is disabled</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   58</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">   60</a></span>&#160;<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>; <span class=\"comment\">// Generic controller is refferenced here. You do not need to modify it</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">   62</a></span>&#160;<span class=\"preprocessor\">#define RESET_PIN 13 // You can set a different configuration reset pin here. Check for conflicts with used pins.</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160; </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">   64</a></span>&#160;<span class=\"keyword\">const</span> time_t <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 10000; <span class=\"comment\">// Time in ms to reset flag</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">   65</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">   66</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">   67</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0; <span class=\"comment\">// If you use RTC memory adjust offset to not overwrite other data</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">   69</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">SLEEP_TIME</a> = 10; <span class=\"comment\">// Sleep time time in secons.</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"comment\">// Called when node is connected to gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">   73</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160; </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"comment\">// Called when node is unregistered from gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">   79</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Disconnected. Reason %d&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160; </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"comment\">// Called to route messages to EnitmaIOTNode class. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">   84</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType) {</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">sendHADiscoveryMessage</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160; </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"comment\">// Called to route incoming messages to your code. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">   95</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">processRxCommand</a> (mac, buffer, length, command, payloadEncoding)) {</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Command processed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Command error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160; </div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">  104</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (<span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">configManagerExit</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160; </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">  109</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> () {</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  113</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\">#ifdef USE_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    Serial.begin (921600);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"comment\">//delay (1000);</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    Serial.println ();</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160; </div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    FailSafe.checkBoot (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a>, <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a>, <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a>); <span class=\"comment\">// Parameters are optional</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user setup if fail safe mode is activated</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160; </div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a> = (<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>*)<span class=\"keyword\">new</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> (); <span class=\"comment\">// Use your class name here</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160; </div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a> (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>); <span class=\"comment\">// Set communication LED</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>); <span class=\"comment\">// Set reset pin</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>); <span class=\"comment\">// Configure registration handler</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>); <span class=\"comment\">// Configure unregistration handler</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>); <span class=\"comment\">// Configure incoming data handler</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a> (<span class=\"keyword\">false</span>); <span class=\"comment\">// Set to true if you need this node to get its clock syncronized with gateway</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">onWiFiManagerStarted</a> (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a>);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">onWiFiManagerExit</a> (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a>);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"preprocessor\">#if !SLEEPY </span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">enableBroadcast</a> ();</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">loadConfig</a> ()) { <span class=\"comment\">// Trigger custom configuration loading</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error reading config file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"keywordflow\">if</span> (FILESYSTEM.format ())</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Filesystem Formatted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160; </div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>, NULL, NULL, <span class=\"keyword\">true</span>, <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a> == 1); <span class=\"comment\">// Start EnigmaIOT communication</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    <span class=\"comment\">// EnigmaIOTNode.setSleepTime (SLEEP_TIME, true);</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    uint8_t macAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <span class=\"comment\">// Set Address using internal MAC Address. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;    <span class=\"keywordflow\">if</span> (wifi_get_macaddr (STATION_IF, macAddress))</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    <span class=\"keywordflow\">if</span> ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (macAddress);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node address set to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (macAddress));</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160; </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a> (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a>); <span class=\"comment\">// Listen for data from controller class</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">setup</a> (&amp;<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>);            <span class=\"comment\">// Start controller class</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160; </div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a> ();</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160; </div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;END setup&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160; </div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  175</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    FailSafe.loop (<a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a>); <span class=\"comment\">// Use always this line</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160; </div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user loop code if Fail Safe mode is active</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160; </div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">loop</a> (); <span class=\"comment\">// Loop controller class</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY </span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;callHAdiscoveryCalls (); <span class=\"comment\">// Send HA registration messages</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY </span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> (); <span class=\"comment\">// Mantain EnigmaIOT connection</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160; </div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;    FailSafe.resetFlag ();</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a7d1e90a75f4b1b5abd5480d00102debf\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController::loop</a></div><div class=\"ttdeci\">virtual void loop()=0</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a9d83f8376a37624a551421a2c8a90c5f\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController::configManagerStart</a></div><div class=\"ttdeci\">virtual void configManagerStart()=0</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a844043532561398d54fa45cd7f0cf4ed\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController::configManagerExit</a></div><div class=\"ttdeci\">virtual void configManagerExit(bool status)=0</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"ads18b20Controller_8h_html\"><div class=\"ttname\"><a href=\"ds18b20Controller_8h.html\">ds18b20Controller.h</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a450a7c16ead7b3c7b882536b08f30a00\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></div><div class=\"ttdeci\">#define LED_BUILTIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00052\">EnigmaIOT-Sensor-Controller.cpp:52</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afe087ce005069779bf699e39695397f4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass::enableClockSync</a></div><div class=\"ttdeci\">void enableClockSync(bool clockSync=true)</div><div class=\"ttdoc\">Controls clock synchronization function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00584\">EnigmaIOTNode.h:584</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00095\">EnigmaIOT-Sensor-Controller.cpp:95</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a00c12add296f0d83ff8d3437e23651c9\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a></div><div class=\"ttdeci\">const time_t BOOT_FLAG_TIMEOUT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00064\">EnigmaIOT-Sensor-Controller.cpp:64</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00113\">EnigmaIOT-Sensor-Controller.cpp:113</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae59a645aaed1e5b550bdc7967c45c170\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">EnigmaIOTjsonController::sendDataCallback</a></div><div class=\"ttdeci\">void sendDataCallback(sendData_cb cb)</div><div class=\"ttdoc\">Register send data callback to run when module needs to send a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00074\">EnigmaIOTjsonController.h:74</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a4d64e953651e420d91f95bacd3078b4e\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a></div><div class=\"ttdeci\">const int FAILSAFE_RTC_ADDRESS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00067\">EnigmaIOT-Sensor-Controller.cpp:67</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_ae4fae2891cab0e7811bb5f339d57d213\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a></div><div class=\"ttdeci\">const int MAX_CONSECUTIVE_BOOT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00065\">EnigmaIOT-Sensor-Controller.cpp:65</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a91ca03d6b7d66ece63e5bfdc9b0d3260\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">SLEEP_TIME</a></div><div class=\"ttdeci\">const int SLEEP_TIME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00069\">EnigmaIOT-Sensor-Controller.cpp:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a></div><div class=\"ttdeci\">dataMessageType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00068\">EnigmaIOTNode.h:68</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a48bf137d2f77f2167f2c2d56cdf26c10\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController::loadConfig</a></div><div class=\"ttdeci\">virtual bool loadConfig()=0</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a08bca59db4b190eaaea4d47b7562869c\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a></div><div class=\"ttdeci\">#define RESET_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00062\">EnigmaIOT-Sensor-Controller.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></div><div class=\"ttdeci\">@ DATA_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00069\">EnigmaIOTNode.h:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aafdd17efe90bfc2dd9af758633034f82\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">EnigmaIOTNodeClass::enableBroadcast</a></div><div class=\"ttdeci\">void enableBroadcast(bool broadcast=true)</div><div class=\"ttdoc\">Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00566\">EnigmaIOTNode.h:566</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a81ab5be7b67c28948ea5de40e5d3c360\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a></div><div class=\"ttdeci\">void sleep()</div><div class=\"ttdoc\">Requests transition to sleep mode (low energy state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01564\">EnigmaIOTNode.cpp:1564</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a6005c1a520c4bd733e221d70e642ebcd\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></div><div class=\"ttdeci\">EnigmaIOTjsonController * controller</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00060\">EnigmaIOT-Sensor-Controller.cpp:60</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a43809462401bef0a7697175450f025ae\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">EnigmaIOTNodeClass::onWiFiManagerExit</a></div><div class=\"ttdeci\">void onWiFiManagerExit(onWiFiManagerExit_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager exit.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00719\">EnigmaIOTNode.h:719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00079\">EnigmaIOT-Sensor-Controller.cpp:79</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a92cabfdedc76da41398b548ff7e6e799\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">EnigmaIOTNodeClass::onWiFiManagerStarted</a></div><div class=\"ttdeci\">void onWiFiManagerStarted(simpleEventHandler_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager start.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00727\">EnigmaIOTNode.h:727</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a960401606ecc83efdb2e45646619f277\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a></div><div class=\"ttdeci\">void wifiManagerExit(boolean status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00104\">EnigmaIOT-Sensor-Controller.cpp:104</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a2d577988d753f4702c13e41090c705a4\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a></div><div class=\"ttdeci\">bool sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00084\">EnigmaIOT-Sensor-Controller.cpp:84</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ab2f0dacf8b11038d862eb9fa3f1254ca\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController::processRxCommand</a></div><div class=\"ttdeci\">virtual bool processRxCommand(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)=0</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a436eb0a595405e52dc3a937c5968447f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass::sendHADiscoveryMessage</a></div><div class=\"ttdeci\">bool sendHADiscoveryMessage(const uint8_t *data, size_t len)</div><div class=\"ttdoc\">Builds, encrypts and sends a HomeAssistant discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01764\">EnigmaIOTNode.cpp:1764</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a56e99497e68b8f6f9d31822c4ecaf3ea\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController::setup</a></div><div class=\"ttdeci\">virtual void setup(EnigmaIOTNodeClass *node, void *config=NULL)=0</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_af040306e47883ec3c541ae1a43f77a1d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a></div><div class=\"ttdeci\">#define SLEEPY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00049\">EnigmaIOT-Sensor-Controller.cpp:49</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a187f3eb82f9948d5b53bd7eb480f1dd4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a></div><div class=\"ttdeci\">void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00089\">EnigmaIOTNode.cpp:89</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00058\">EnigmaIOT-Sensor-Controller.cpp:58</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00073\">EnigmaIOT-Sensor-Controller.cpp:73</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_ad151c02682f80a13429640710b842160\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a></div><div class=\"ttdeci\">void wifiManagerStarted()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00109\">EnigmaIOT-Sensor-Controller.cpp:109</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a></div><div class=\"ttdeci\">@ HA_DISC_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00072\">EnigmaIOTNode.h:71</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_a734029c5fc6508cd75bf19cd7f52b66d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a></div><div class=\"ttdeci\">const int LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00066\">EnigmaIOT-Sensor-Controller.cpp:66</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Sensor-Controller_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"EnigmaIOT-Sensor-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html#l00175\">EnigmaIOT-Sensor-Controller.cpp:175</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-SmartSwitch-Controller_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-SmartSwitch-Controller/EnigmaIOT-SmartSwitch-Controller.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_85c13f167532cd35b89eb457361e1e18.html\">EnigmaIOT-SmartSwitch-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-SmartSwitch-Controller.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n<code>#include &lt;FailSafe.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;Curve25519.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n<code>#include &lt;DNSServer.h&gt;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a>&#160;&#160;&#160;0</td></tr>\n<tr class=\"separator:af040306e47883ec3c541ae1a43f77a1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">USE_SERIAL</a></td></tr>\n<tr class=\"separator:a2cb4a65422d8c7bd10ff4436e8a79b1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>&#160;&#160;&#160;4</td></tr>\n<tr class=\"separator:a08bca59db4b190eaaea4d47b7562869c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> ()</td></tr>\n<tr class=\"separator:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2d577988d753f4702c13e41090c705a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType)</td></tr>\n<tr class=\"separator:a2d577988d753f4702c13e41090c705a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"separator:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a960401606ecc83efdb2e45646619f277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (boolean <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:a960401606ecc83efdb2e45646619f277\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad151c02682f80a13429640710b842160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> ()</td></tr>\n<tr class=\"separator:ad151c02682f80a13429640710b842160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></td></tr>\n<tr class=\"separator:a6005c1a520c4bd733e221d70e642ebcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 10000</td></tr>\n<tr class=\"separator:a00c12add296f0d83ff8d3437e23651c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3</td></tr>\n<tr class=\"separator:ae4fae2891cab0e7811bb5f339d57d213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a734029c5fc6508cd75bf19cd7f52b66d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0</td></tr>\n<tr class=\"separator:a4d64e953651e420d91f95bacd3078b4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00054\">54</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00048\">48</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a08bca59db4b190eaaea4d47b7562869c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a08bca59db4b190eaaea4d47b7562869c\">&#9670;&nbsp;</a></span>RESET_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define RESET_PIN&#160;&#160;&#160;4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00058\">58</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af040306e47883ec3c541ae1a43f77a1d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af040306e47883ec3c541ae1a43f77a1d\">&#9670;&nbsp;</a></span>SLEEPY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SLEEPY&#160;&#160;&#160;0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00045\">45</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2cb4a65422d8c7bd10ff4436e8a79b1b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2cb4a65422d8c7bd10ff4436e8a79b1b\">&#9670;&nbsp;</a></span>USE_SERIAL</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define USE_SERIAL</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00052\">52</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a940f8c4df553df52c9145ef2df107ad3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a940f8c4df553df52c9145ef2df107ad3\">&#9670;&nbsp;</a></span>connectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void connectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00066\">66</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a23fc74fc5731518093d5fa0db24edae1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23fc74fc5731518093d5fa0db24edae1\">&#9670;&nbsp;</a></span>disconnectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void disconnectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00072\">72</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00162\">162</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81397ad933b5a8b902d6161f702838fc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81397ad933b5a8b902d6161f702838fc\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00088\">88</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2d577988d753f4702c13e41090c705a4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2d577988d753f4702c13e41090c705a4\">&#9670;&nbsp;</a></span>sendUplinkData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool sendUplinkData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>dataMsgType</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00077\">77</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00106\">106</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a960401606ecc83efdb2e45646619f277\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a960401606ecc83efdb2e45646619f277\">&#9670;&nbsp;</a></span>wifiManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">boolean&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00097\">97</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad151c02682f80a13429640710b842160\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad151c02682f80a13429640710b842160\">&#9670;&nbsp;</a></span>wifiManagerStarted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerStarted </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00102\">102</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a00c12add296f0d83ff8d3437e23651c9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a00c12add296f0d83ff8d3437e23651c9\">&#9670;&nbsp;</a></span>BOOT_FLAG_TIMEOUT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const time_t BOOT_FLAG_TIMEOUT = 10000</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00060\">60</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6005c1a520c4bd733e221d70e642ebcd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6005c1a520c4bd733e221d70e642ebcd\">&#9670;&nbsp;</a></span>controller</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* controller</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00056\">56</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4d64e953651e420d91f95bacd3078b4e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4d64e953651e420d91f95bacd3078b4e\">&#9670;&nbsp;</a></span>FAILSAFE_RTC_ADDRESS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int FAILSAFE_RTC_ADDRESS = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00063\">63</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a734029c5fc6508cd75bf19cd7f52b66d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a734029c5fc6508cd75bf19cd7f52b66d\">&#9670;&nbsp;</a></span>LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int LED = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00062\">62</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae4fae2891cab0e7811bb5f339d57d213\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae4fae2891cab0e7811bb5f339d57d213\">&#9670;&nbsp;</a></span>MAX_CONSECUTIVE_BOOT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int MAX_CONSECUTIVE_BOOT = 3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00061\">61</a> of file <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOT-SmartSwitch-Controller_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-SmartSwitch-Controller/EnigmaIOT-SmartSwitch-Controller.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_85c13f167532cd35b89eb457361e1e18.html\">EnigmaIOT-SmartSwitch-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-SmartSwitch-Controller.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#if !defined ESP8266 &amp;&amp; !defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#error Node only supports ESP8266 or ESP32 platform</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;FailSafe.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"SmartSwitchController_8h.html\">SmartSwitchController.h</a>&quot;</span> <span class=\"comment\">// &lt;-- Include here your controller class header</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266HTTPClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266httpUpdate.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP32</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &lt;AsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP8266</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &lt;driver/adc.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &lt;Curve25519.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &lt;DNSServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">   45</a></span>&#160;<span class=\"preprocessor\">#define SLEEPY 0 // Set it to 1 if your node should sleep after sending data</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   48</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#endif // !LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">// If you do need serial for your project you must disable serial debug by commenting next line</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">   52</a></span>&#160;<span class=\"preprocessor\">#define USE_SERIAL // Don&#39;t forget to set DEBUG_LEVEL to NONE if serial is disabled</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   54</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">   56</a></span>&#160;<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>* <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>; <span class=\"comment\">// Generic controller is refferenced here. You do not need to modify it</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">   58</a></span>&#160;<span class=\"preprocessor\">#define RESET_PIN 4 // You can set a different configuration reset pin here. Check for conflicts with used pins.</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">   60</a></span>&#160;<span class=\"keyword\">const</span> time_t <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a> = 10000; <span class=\"comment\">// Time in ms to reset flag</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">   61</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a> = 3; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">   62</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a> = <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>; <span class=\"comment\">// Number of rapid boot cycles before enabling fail safe mode</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">   63</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a> = 0; <span class=\"comment\">// If you use RTC memory adjust offset to not overwrite other data</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160; </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"comment\">// Called when node is connected to gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">   66</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"comment\">// Called when node is unregistered from gateway. You don&#39;t need to do anything here usually</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">   72</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Disconnected. Reason %d&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"comment\">// Called to route messages to EnitmaIOTNode class. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">   77</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType) {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">sendHADiscoveryMessage</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160; </div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"comment\">// Called to route incoming messages to your code. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">   88</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">processRxCommand</a> (mac, buffer, length, command, payloadEncoding)) {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Command processed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Command error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">   97</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (<span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">configManagerExit</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"comment\">// Do not modify</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">  102</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> () {</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160; </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  106</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160; </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#ifdef USE_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    Serial.begin (921600);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    <span class=\"comment\">//delay (1000);</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    Serial.println ();</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    FailSafe.checkBoot (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a>, <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a>, <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a>); <span class=\"comment\">// Parameters are optional</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user setup if fail safe mode is activated</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160; </div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a> = (<a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>*)<span class=\"keyword\">new</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> (); <span class=\"comment\">// Use your class name here</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160; </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a> (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>); <span class=\"comment\">// Set communication LED</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a>); <span class=\"comment\">// Set reset pin</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>); <span class=\"comment\">// Configure registration handler</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>); <span class=\"comment\">// Configure unregistration handler</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>); <span class=\"comment\">// Configure incoming data handler</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a> (<span class=\"keyword\">true</span>); <span class=\"comment\">// Set to true if you need this node to get its clock syncronized with gateway</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">onWiFiManagerStarted</a> (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">onWiFiManagerExit</a> (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a>);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">enableBroadcast</a> ();</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160; </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">loadConfig</a> ()) { <span class=\"comment\">// Trigger custom configuration loading</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error reading config file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keywordflow\">if</span> (FILESYSTEM.format ())</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;FILESYSTEM Formatted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160; </div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>, NULL, NULL, <span class=\"keyword\">true</span>, <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a> == 1); <span class=\"comment\">// Start EnigmaIOT communication</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    uint8_t macAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"comment\">// Set Address using internal MAC Address. Do not modify</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    <span class=\"keywordflow\">if</span> (wifi_get_macaddr (STATION_IF, macAddress))</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    <span class=\"keywordflow\">if</span> ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (macAddress);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node address set to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (macAddress));</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a> (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a>); <span class=\"comment\">// Listen for data from controller class</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">setup</a> (&amp;<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>);            <span class=\"comment\">// Start controller class</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\">#if SLEEPY == 1</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a> ();</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160; </div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;END setup&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160; </div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  162</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    FailSafe.loop (<a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a>); <span class=\"comment\">// Use always this line</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160; </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <span class=\"keywordflow\">if</span> (FailSafe.isActive ()) { <span class=\"comment\">// Skip all user loop code if Fail Safe mode is active</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160; </div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">loop</a> (); <span class=\"comment\">// Loop controller class</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY </span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;    <a class=\"code\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>-&gt;callHAdiscoveryCalls (); <span class=\"comment\">// Send HA registration messages</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY </span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> (); <span class=\"comment\">// Mantain EnigmaIOT connection</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160; </div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">#if SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    FailSafe.resetFlag ();</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a7d1e90a75f4b1b5abd5480d00102debf\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController::loop</a></div><div class=\"ttdeci\">virtual void loop()=0</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00054\">EnigmaIOT-SmartSwitch-Controller.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a9d83f8376a37624a551421a2c8a90c5f\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController::configManagerStart</a></div><div class=\"ttdeci\">virtual void configManagerStart()=0</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a844043532561398d54fa45cd7f0cf4ed\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController::configManagerExit</a></div><div class=\"ttdeci\">virtual void configManagerExit(bool status)=0</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a734029c5fc6508cd75bf19cd7f52b66d\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">LED</a></div><div class=\"ttdeci\">const int LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00062\">EnigmaIOT-SmartSwitch-Controller.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afe087ce005069779bf699e39695397f4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass::enableClockSync</a></div><div class=\"ttdeci\">void enableClockSync(bool clockSync=true)</div><div class=\"ttdoc\">Controls clock synchronization function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00584\">EnigmaIOTNode.h:584</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a4d64e953651e420d91f95bacd3078b4e\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">FAILSAFE_RTC_ADDRESS</a></div><div class=\"ttdeci\">const int FAILSAFE_RTC_ADDRESS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00063\">EnigmaIOT-SmartSwitch-Controller.cpp:63</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html\">SmartSwitchController.h</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00162\">EnigmaIOT-SmartSwitch-Controller.cpp:162</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_ae4fae2891cab0e7811bb5f339d57d213\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">MAX_CONSECUTIVE_BOOT</a></div><div class=\"ttdeci\">const int MAX_CONSECUTIVE_BOOT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00061\">EnigmaIOT-SmartSwitch-Controller.cpp:61</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00088\">EnigmaIOT-SmartSwitch-Controller.cpp:88</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a450a7c16ead7b3c7b882536b08f30a00\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></div><div class=\"ttdeci\">#define LED_BUILTIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00048\">EnigmaIOT-SmartSwitch-Controller.cpp:48</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae59a645aaed1e5b550bdc7967c45c170\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">EnigmaIOTjsonController::sendDataCallback</a></div><div class=\"ttdeci\">void sendDataCallback(sendData_cb cb)</div><div class=\"ttdoc\">Register send data callback to run when module needs to send a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00074\">EnigmaIOTjsonController.h:74</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a></div><div class=\"ttdeci\">dataMessageType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00068\">EnigmaIOTNode.h:68</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a00c12add296f0d83ff8d3437e23651c9\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">BOOT_FLAG_TIMEOUT</a></div><div class=\"ttdeci\">const time_t BOOT_FLAG_TIMEOUT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00060\">EnigmaIOT-SmartSwitch-Controller.cpp:60</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a48bf137d2f77f2167f2c2d56cdf26c10\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController::loadConfig</a></div><div class=\"ttdeci\">virtual bool loadConfig()=0</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></div><div class=\"ttdeci\">@ DATA_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00069\">EnigmaIOTNode.h:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a6005c1a520c4bd733e221d70e642ebcd\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a></div><div class=\"ttdeci\">EnigmaIOTjsonController * controller</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00056\">EnigmaIOT-SmartSwitch-Controller.cpp:56</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aafdd17efe90bfc2dd9af758633034f82\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">EnigmaIOTNodeClass::enableBroadcast</a></div><div class=\"ttdeci\">void enableBroadcast(bool broadcast=true)</div><div class=\"ttdoc\">Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00566\">EnigmaIOTNode.h:566</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a960401606ecc83efdb2e45646619f277\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a></div><div class=\"ttdeci\">void wifiManagerExit(boolean status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00097\">EnigmaIOT-SmartSwitch-Controller.cpp:97</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a81ab5be7b67c28948ea5de40e5d3c360\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a></div><div class=\"ttdeci\">void sleep()</div><div class=\"ttdoc\">Requests transition to sleep mode (low energy state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01564\">EnigmaIOTNode.cpp:1564</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_ad151c02682f80a13429640710b842160\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a></div><div class=\"ttdeci\">void wifiManagerStarted()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00102\">EnigmaIOT-SmartSwitch-Controller.cpp:102</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a43809462401bef0a7697175450f025ae\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">EnigmaIOTNodeClass::onWiFiManagerExit</a></div><div class=\"ttdeci\">void onWiFiManagerExit(onWiFiManagerExit_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager exit.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00719\">EnigmaIOTNode.h:719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a92cabfdedc76da41398b548ff7e6e799\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">EnigmaIOTNodeClass::onWiFiManagerStarted</a></div><div class=\"ttdeci\">void onWiFiManagerStarted(simpleEventHandler_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager start.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00727\">EnigmaIOTNode.h:727</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_af040306e47883ec3c541ae1a43f77a1d\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">SLEEPY</a></div><div class=\"ttdeci\">#define SLEEPY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00045\">EnigmaIOT-SmartSwitch-Controller.cpp:45</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ab2f0dacf8b11038d862eb9fa3f1254ca\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController::processRxCommand</a></div><div class=\"ttdeci\">virtual bool processRxCommand(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)=0</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a436eb0a595405e52dc3a937c5968447f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass::sendHADiscoveryMessage</a></div><div class=\"ttdeci\">bool sendHADiscoveryMessage(const uint8_t *data, size_t len)</div><div class=\"ttdoc\">Builds, encrypts and sends a HomeAssistant discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01764\">EnigmaIOTNode.cpp:1764</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00106\">EnigmaIOT-SmartSwitch-Controller.cpp:106</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a56e99497e68b8f6f9d31822c4ecaf3ea\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController::setup</a></div><div class=\"ttdeci\">virtual void setup(EnigmaIOTNodeClass *node, void *config=NULL)=0</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a187f3eb82f9948d5b53bd7eb480f1dd4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a></div><div class=\"ttdeci\">void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00089\">EnigmaIOTNode.cpp:89</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00066\">EnigmaIOT-SmartSwitch-Controller.cpp:66</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a2d577988d753f4702c13e41090c705a4\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">sendUplinkData</a></div><div class=\"ttdeci\">bool sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00077\">EnigmaIOT-SmartSwitch-Controller.cpp:77</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00072\">EnigmaIOT-SmartSwitch-Controller.cpp:72</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a></div><div class=\"ttdeci\">@ HA_DISC_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00072\">EnigmaIOTNode.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-SmartSwitch-Controller_8cpp_html_a08bca59db4b190eaaea4d47b7562869c\"><div class=\"ttname\"><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">RESET_PIN</a></div><div class=\"ttdeci\">#define RESET_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html#l00058\">EnigmaIOT-SmartSwitch-Controller.cpp:58</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTGatewayDummy_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayDummy/EnigmaIOTGatewayDummy.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8b0ea9d4c22a99833616492a9ee0642b.html\">EnigmaIOTGatewayDummy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGatewayDummy.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"GwOutput__dummy_8h_source.html\">GwOutput_dummy.h</a>&quot;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;Curve25519.h&gt;</code><br />\n<code>#include &lt;ChaChaPoly.h&gt;</code><br />\n<code>#include &lt;Poly1305.h&gt;</code><br />\n<code>#include &lt;SHA256.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;DNSServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a4a71aecac635579082c10addb16df4a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a>&#160;&#160;&#160;5</td></tr>\n<tr class=\"separator:a4a71aecac635579082c10addb16df4a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a073dbcb7f5bc4f4b45dc048b55eaff3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">RED_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a></td></tr>\n<tr class=\"separator:a073dbcb7f5bc4f4b45dc048b55eaff3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ae6fc0fcbb7779efc63d50434dbd44d7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">flashConnectionLed</a> (void *led)</td></tr>\n<tr class=\"separator:ae6fc0fcbb7779efc63d50434dbd44d7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ff09343e5169937476aa04932b76915\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a6ff09343e5169937476aa04932b76915\">startConnectionFlash</a> (int period)</td></tr>\n<tr class=\"separator:a6ff09343e5169937476aa04932b76915\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad85ae6aaf68f30aa59facd8f80635ffd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">stopConnectionFlash</a> ()</td></tr>\n<tr class=\"separator:ad85ae6aaf68f30aa59facd8f80635ffd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a960401606ecc83efdb2e45646619f277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (boolean <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:a960401606ecc83efdb2e45646619f277\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad151c02682f80a13429640710b842160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> ()</td></tr>\n<tr class=\"separator:ad151c02682f80a13429640710b842160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acecaff385e13802f95e84d1ece4f6322\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">processRxControlData</a> (char *macStr, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t length)</td></tr>\n<tr class=\"separator:acecaff385e13802f95e84d1ece4f6322\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5fd7dd2cafc98a62e99242dd11968a7c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">processRxData</a> (uint8_t *mac, uint8_t *buffer, uint8_t length, uint16_t lostMessages, bool control, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> payload_type, char *nodeName=NULL)</td></tr>\n<tr class=\"separator:a5fd7dd2cafc98a62e99242dd11968a7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad84b439af2caa4fa2b92ba383b9513a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">onDownlinkData</a> (uint8_t *address, char *nodeName, <a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> msgType, char *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, unsigned int len)</td></tr>\n<tr class=\"separator:ad84b439af2caa4fa2b92ba383b9513a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a60e672b8465063bff29ed39899e15948\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948\">newNodeConnected</a> (uint8_t *mac, uint16_t node_id, char *nodeName=NULL)</td></tr>\n<tr class=\"separator:a60e672b8465063bff29ed39899e15948\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ade106fbc95d08320451d9b901aafd230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a> (uint8_t *mac, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:ade106fbc95d08320451d9b901aafd230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a86bc66f6ecbde6ad8502d0cefb1a67f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">connectionLed</a> = <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a></td></tr>\n<tr class=\"separator:a86bc66f6ecbde6ad8502d0cefb1a67f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a54adb71fcf29bc72c8a829133e425d80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">boolean&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a> = false</td></tr>\n<tr class=\"separator:a54adb71fcf29bc72c8a829133e425d80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00053\">53</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4a71aecac635579082c10addb16df4a0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4a71aecac635579082c10addb16df4a0\">&#9670;&nbsp;</a></span>BUILTIN_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BUILTIN_LED&#160;&#160;&#160;5</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00050\">50</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a073dbcb7f5bc4f4b45dc048b55eaff3d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a073dbcb7f5bc4f4b45dc048b55eaff3d\">&#9670;&nbsp;</a></span>RED_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define RED_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00054\">54</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"ae6fc0fcbb7779efc63d50434dbd44d7a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae6fc0fcbb7779efc63d50434dbd44d7a\">&#9670;&nbsp;</a></span>flashConnectionLed()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void flashConnectionLed </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>led</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00065\">65</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00319\">319</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a60e672b8465063bff29ed39899e15948\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a60e672b8465063bff29ed39899e15948\">&#9670;&nbsp;</a></span>newNodeConnected()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void newNodeConnected </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>node_id</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00205\">205</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ade106fbc95d08320451d9b901aafd230\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ade106fbc95d08320451d9b901aafd230\">&#9670;&nbsp;</a></span>nodeDisconnected()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void nodeDisconnected </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00224\">224</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad84b439af2caa4fa2b92ba383b9513a8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad84b439af2caa4fa2b92ba383b9513a8\">&#9670;&nbsp;</a></span>onDownlinkData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void onDownlinkData </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a>&#160;</td>\n          <td class=\"paramname\"><em>msgType</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00180\">180</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"acecaff385e13802f95e84d1ece4f6322\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acecaff385e13802f95e84d1ece4f6322\">&#9670;&nbsp;</a></span>processRxControlData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxControlData </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>macStr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00110\">110</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5fd7dd2cafc98a62e99242dd11968a7c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5fd7dd2cafc98a62e99242dd11968a7c\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>lostMessages</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>control</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payload_type</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00116\">116</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00254\">254</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6ff09343e5169937476aa04932b76915\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6ff09343e5169937476aa04932b76915\">&#9670;&nbsp;</a></span>startConnectionFlash()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void startConnectionFlash </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>period</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00070\">70</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad85ae6aaf68f30aa59facd8f80635ffd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad85ae6aaf68f30aa59facd8f80635ffd\">&#9670;&nbsp;</a></span>stopConnectionFlash()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void stopConnectionFlash </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00086\">86</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a960401606ecc83efdb2e45646619f277\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a960401606ecc83efdb2e45646619f277\">&#9670;&nbsp;</a></span>wifiManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">boolean&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00102\">102</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad151c02682f80a13429640710b842160\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad151c02682f80a13429640710b842160\">&#9670;&nbsp;</a></span>wifiManagerStarted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerStarted </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00106\">106</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a86bc66f6ecbde6ad8502d0cefb1a67f0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a86bc66f6ecbde6ad8502d0cefb1a67f0\">&#9670;&nbsp;</a></span>connectionLed</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int connectionLed = <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00062\">62</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a54adb71fcf29bc72c8a829133e425d80\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a54adb71fcf29bc72c8a829133e425d80\">&#9670;&nbsp;</a></span>connectionLedFlashing</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">boolean connectionLedFlashing = false</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00063\">63</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">EnigmaIOTGatewayDummy.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTGatewayDummy_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayDummy/EnigmaIOTGatewayDummy.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8b0ea9d4c22a99833616492a9ee0642b.html\">EnigmaIOTGatewayDummy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGatewayDummy.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOTGatewayDummy_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"GwOutput__generic_8h.html\">GwOutput_generic.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"GwOutput__dummy_8h.html\">GwOutput_dummy.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160; </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;AsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP8266</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;esp_system.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;esp_event.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;esp_tls.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;soc/soc.h&quot;</span>           <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;soc/rtc_cntl_reg.h&quot;</span>  <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP32</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &lt;SPI.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160; </div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160; </div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &lt;Curve25519.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &lt;ChaChaPoly.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &lt;Poly1305.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &lt;SHA256.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &lt;DNSServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#ifndef BUILTIN_LED</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">   50</a></span>&#160;<span class=\"preprocessor\">#define BUILTIN_LED 5</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#endif // BUILTIN_LED</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   53</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED BUILTIN_LED</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">   54</a></span>&#160;<span class=\"preprocessor\">#define RED_LED BUILTIN_LED</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;TimerHandle_t connectionLedTimer;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;ETSTimer connectionLedTimer;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">   62</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">connectionLed</a> = <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a>;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">   63</a></span>&#160;<span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160; </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">   65</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">flashConnectionLed</a> (<span class=\"keywordtype\">void</span>* led) {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    <span class=\"comment\">//digitalWrite (*(int*)led, !digitalRead (*(int*)led));</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    digitalWrite (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a>, !digitalRead (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a>));</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160; </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a6ff09343e5169937476aa04932b76915\">   70</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a6ff09343e5169937476aa04932b76915\">startConnectionFlash</a> (<span class=\"keywordtype\">int</span> period) {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        connectionLedTimer = xTimerCreate (<span class=\"stringliteral\">&quot;led_flash&quot;</span>, pdMS_TO_TICKS (period), pdTRUE, (<span class=\"keywordtype\">void</span>*)0, <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">flashConnectionLed</a>);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        xTimerStart (connectionLedTimer, 0);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#elif defined (ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    ets_timer_disarm (&amp;connectionLedTimer);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        ets_timer_arm_new (&amp;connectionLedTimer, period, <span class=\"keyword\">true</span>, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">   86</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">stopConnectionFlash</a> () {</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        xTimerStop (connectionLedTimer, 0);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        xTimerDelete (connectionLedTimer, 0);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        ets_timer_disarm (&amp;connectionLedTimer);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        digitalWrite (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">connectionLed</a>, HIGH);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a960401606ecc83efdb2e45646619f277\">  102</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (<span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">configManagerExit</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160; </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad151c02682f80a13429640710b842160\">  106</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> () {</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">configManagerStart</a> (&amp;<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160; </div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">  110</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">processRxControlData</a> (<span class=\"keywordtype\">char</span>* macStr, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t length) {</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">outputControlSend</a> (macStr, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, length);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160; </div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">  116</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">processRxData</a> (uint8_t* mac, uint8_t* buffer, uint8_t length, uint16_t lostMessages, <span class=\"keywordtype\">bool</span> control, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> payload_type, <span class=\"keywordtype\">char</span>* nodeName = NULL) {</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"comment\">//uint8_t *addr = mac;</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <span class=\"keywordtype\">size_t</span> pld_size;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> PAYLOAD_SIZE = 512;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"keywordtype\">char</span> payload[PAYLOAD_SIZE];</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160; </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <span class=\"comment\">//payload = (char*)malloc (PAYLOAD_SIZE);</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160; </div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <span class=\"keywordtype\">char</span> mac_str[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac, mac_str);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    <span class=\"keywordflow\">if</span> (control) {</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">processRxControlData</a> (nodeName ? nodeName : mac_str, buffer, length);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <span class=\"comment\">//char* netName = EnigmaIOTGateway.getNetworkName ();</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    <span class=\"keywordflow\">if</span> (payload_type == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>) {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> capacity = JSON_ARRAY_SIZE (25) + 25 * JSON_OBJECT_SIZE (4);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        DynamicJsonDocument jsonBuffer (capacity);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        JsonArray root = jsonBuffer.createNestedArray ();</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        CayenneLPP cayennelpp (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160; </div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        cayennelpp.decode ((uint8_t*)buffer, length, root);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        uint8_t error = cayennelpp.getError ();</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        <span class=\"keywordflow\">if</span> (error != LPP_ERROR_OK) {</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error decoding CayenneLPP data: %d&quot;</span>, error);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;            <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        pld_size = serializeJson (root, payload, PAYLOAD_SIZE);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (payload_type == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>) {</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> capacity = JSON_ARRAY_SIZE (25) + 25 * JSON_OBJECT_SIZE (4);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        DynamicJsonDocument jsonBuffer (capacity);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        DeserializationError error = deserializeMsgPack (jsonBuffer, buffer, length);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"keywordflow\">if</span> (error != DeserializationError::Ok) {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error decoding MSG Pack data: %s&quot;</span>, error.c_str ());</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;            <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        pld_size = serializeJson (jsonBuffer, payload, PAYLOAD_SIZE);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (payload_type == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a>) {</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keywordflow\">if</span> (length &lt;= PAYLOAD_SIZE) {</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;            memcpy (payload, buffer, length);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;            pld_size = length;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        } <span class=\"keywordflow\">else</span> { <span class=\"comment\">// This will not happen but may lead to errors in case of using another physical transport</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;            memcpy (payload, buffer, PAYLOAD_SIZE);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;            pld_size = PAYLOAD_SIZE;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160; </div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a> (mac_str, payload, pld_size);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Published data message from %s: %s&quot;</span>, mac_str, payload);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <span class=\"keywordflow\">if</span> (lostMessages &gt; 0) {</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;%u&quot;</span>, lostMessages);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a> (mac_str, payload, pld_size, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">GwOutput_data_type::lostmessages</a>);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        <span class=\"comment\">//DEBUG_INFO (&quot;Published MQTT from %s: %s&quot;, mac_str, payload);</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;per\\&quot;:%e,\\&quot;lostmessages\\&quot;:%u,\\&quot;totalmessages\\&quot;:%u,\\&quot;packetshour\\&quot;:%.2f}&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                         <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">getPER</a> ((uint8_t*)mac),</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                         <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">getErrorPackets</a> ((uint8_t*)mac),</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;                         <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">getTotalPackets</a> ((uint8_t*)mac),</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                         <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">getPacketsHour</a> ((uint8_t*)mac));</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a> (mac_str, payload, pld_size, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">GwOutput_data_type::status</a>);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    <span class=\"comment\">//DEBUG_INFO (&quot;Published MQTT from %s: %s&quot;, mac_str, payload);</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;    <span class=\"comment\">//free (payload);</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160; </div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">  180</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">onDownlinkData</a> (uint8_t* address, <span class=\"keywordtype\">char</span>* nodeName, <a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> msgType, <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> len) {</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    <span class=\"comment\">//char* buffer;</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    <span class=\"keywordtype\">char</span> buffer[1024];</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;    <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> bufferLen = len;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160; </div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;    <span class=\"keywordflow\">if</span> (nodeName) {</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;DL Message for %s. Type 0x%02X&quot;</span>, nodeName, msgType);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;DL Message for &quot;</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a> <span class=\"stringliteral\">&quot;. Type 0x%02X&quot;</span>, MAC2STR (address), msgType);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Data: %.*s&quot;</span>, len, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160; </div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;    <span class=\"comment\">//buffer = (char*)malloc (len + 1);</span></div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    sprintf (buffer, <span class=\"stringliteral\">&quot;%.*s&quot;</span>, len, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>);</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;    bufferLen++;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160; </div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">sendDownstream</a> (address, (uint8_t*)buffer, bufferLen, msgType)) {</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error sending esp_now message to &quot;</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a>, MAC2STR (address));</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Esp-now message sent or queued correctly&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160; </div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;    <span class=\"comment\">//free (buffer);</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160; </div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948\">  205</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948\">newNodeConnected</a> (uint8_t* mac, uint16_t node_id, <span class=\"keywordtype\">char</span>* nodeName = NULL) {</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;    <span class=\"keywordflow\">if</span> (nodeName) {</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">newNodeSend</a> (nodeName, node_id)) {</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending new node %s&quot;</span>, nodeName);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;New node %s message sent&quot;</span>, nodeName);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"keywordtype\">char</span> macstr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac, macstr);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">newNodeSend</a> (macstr, node_id)) {</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending new node %s&quot;</span>, macstr);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;New node %s message sent&quot;</span>, macstr);</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160; </div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160; </div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230\">  224</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a> (uint8_t* mac, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;    <span class=\"keywordtype\">char</span> macstr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac, macstr);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;    <span class=\"comment\">//Serial.printf (&quot;Node %s disconnected. Reason %u\\n&quot;, macstr, reason);</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">nodeDisconnectedSend</a> (macstr, reason)) {</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending node disconnected %s reason %d&quot;</span>, macstr, reason);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node %s disconnected message sent. Reason %d&quot;</span>, macstr, reason);</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160; </div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;<span class=\"comment\">// void EnigmaIOTGateway_handle (void* param) {</span></div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;<span class=\"comment\">//  for (;;) {</span></div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;<span class=\"comment\">//      EnigmaIOTGateway.handle ();</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"comment\">//      vTaskDelay (0);</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;<span class=\"comment\">//  }</span></div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;<span class=\"comment\">// }</span></div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160; </div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"comment\">// void GwOutput_handle (void* param) {</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;<span class=\"comment\">//  for (;;) {</span></div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"comment\">//      GwOutput.loop ();</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;<span class=\"comment\">//      vTaskDelay (0);</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;<span class=\"comment\">//  }</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;<span class=\"comment\">// }</span></div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160; </div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;TaskHandle_t xEnigmaIOTGateway_handle = NULL;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;TaskHandle_t gwoutput_handle = NULL;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160; </div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  254</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;    Serial.begin (115200); Serial.println (); Serial.println ();</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160; </div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;    <span class=\"comment\">// Turn-off the &#39;brownout detector&#39; to avoid random restarts during wake up,</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;    <span class=\"comment\">// normally due to bad quality regulator on board</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;    WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160; </div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;    ets_timer_setfn (&amp;connectionLedTimer, <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">flashConnectionLed</a>, (<span class=\"keywordtype\">void</span>*)&amp;<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">connectionLed</a>);</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160; </div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;    pinMode (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a>, OUTPUT);</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;    digitalWrite (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a>, HIGH);</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a6ff09343e5169937476aa04932b76915\">startConnectionFlash</a> (100);</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160; </div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160; </div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">loadConfig</a> ()) {</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error reading config file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160; </div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">setRxLed</a> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>);</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">setTxLed</a> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">RED_LED</a>);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">onNewNode</a> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948\">newNodeConnected</a>);</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">onNodeDisconnected</a> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a>);</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">onWiFiManagerStarted</a> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a>);</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">onWiFiManagerExit</a> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a>);</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">processRxData</a>);</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>);</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160; </div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;<span class=\"preprocessor\">#if CONNECT_TO_WIFI_AP == 1</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;    WiFi.mode (WIFI_AP_STA);</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;    WiFi.begin ();</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">configWiFiManager</a> ();</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;    <span class=\"comment\">//WiFi.mode (WIFI_AP);</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;<span class=\"preprocessor\">#endif // CONNECT_TO_WIFI_AP</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160; </div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160; </div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;    WiFi.softAP (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">getNetworkName</a> (), <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">getNetworkKey</a> ());</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">stopConnectionFlash</a> ();</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160; </div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;STA MAC Address: %s&quot;</span>, WiFi.macAddress ().c_str ());</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;AP MAC Address: %s&quot;</span>, WiFi.softAPmacAddress ().c_str ());</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;BSSID Address: %s&quot;</span>, WiFi.BSSIDstr ().c_str ());</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160; </div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;IP address: %s&quot;</span>, WiFi.localIP ().toString ().c_str ());</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;AP IP address: %s&quot;</span>, WiFi.softAPIP ().toString ().c_str ());</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;WiFi Channel: %d&quot;</span>, WiFi.channel ());</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160; </div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;WiFi SSID: %s&quot;</span>, WiFi.SSID ().c_str ());</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Network Name: %s&quot;</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">getNetworkName</a> ());</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160; </div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">setDlCallback</a> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">onDownlinkData</a>);</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">begin</a> ();</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160; </div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;    <span class=\"comment\">//xTaskCreate (EnigmaIOTGateway_handle, &quot;handle&quot;, 10000, NULL, 1, &amp;xEnigmaIOTGateway_handle);</span></div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;    <span class=\"comment\">//xTaskCreatePinnedToCore (EnigmaIOTGateway_handle, &quot;handle&quot;, 4096, NULL, 0, &amp;xEnigmaIOTGateway_handle, 1);</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;    <span class=\"comment\">//xTaskCreatePinnedToCore (GwOutput_handle, &quot;gwoutput&quot;, 10000, NULL, 2, &amp;gwoutput_handle, 1);</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160; </div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayDummy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  319</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160; </div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">loop</a> ();</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a> ();</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160; </div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a74f3b21d578650defdb63b334102dc48\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">EnigmaIOTGatewayClass::onWiFiManagerExit</a></div><div class=\"ttdeci\">void onWiFiManagerExit(onWiFiManagerExit_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager exit.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00378\">EnigmaIOTGateway.h:378</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a359bd95cdb353b885d4bd691239b64fa\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">GatewayOutput_dummy::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00039\">GwOutput_dummy.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00319\">EnigmaIOTGatewayDummy.cpp:319</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a975c9b549e113deebe5581d5107d34b2\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">EnigmaIOTGatewayClass::onNodeDisconnected</a></div><div class=\"ttdeci\">void onNodeDisconnected(onNodeDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called every time a node is disconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00557\">EnigmaIOTGateway.h:557</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_acc9d7df320e4b4fb7ce459eac0e6639d\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">GatewayOutput_dummy::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart(EnigmaIOTGatewayClass *enigmaIotGw)</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00031\">GwOutput_dummy.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a2611c30452fc9785b3958eddca02daf8\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">EnigmaIOTGatewayClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onGwDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00449\">EnigmaIOTGateway.h:449</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a86bc66f6ecbde6ad8502d0cefb1a67f0\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">connectionLed</a></div><div class=\"ttdeci\">const int connectionLed</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00062\">EnigmaIOTGatewayDummy.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html\">GwOutput_generic.h</a></div><div class=\"ttdoc\">Generic Gateway output module template.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a8df0346a1f3e282d6875b04a9fe4ec8f\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a></div><div class=\"ttdeci\">static const int MAX_DATA_PAYLOAD_SIZE</div><div class=\"ttdoc\">Maximun payload size for data packets.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00048\">EnigmaIoTconfigAdvanced.h:48</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a3ae96525b5a48e7bea23a36cedca7949\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">GatewayOutput_dummy::nodeDisconnectedSend</a></div><div class=\"ttdeci\">bool nodeDisconnectedSend(char *address, gwInvalidateReason_t reason)</div><div class=\"ttdoc\">Send node disconnection notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00072\">GwOutput_dummy.cpp:72</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad6c301b780bd802ee98bbe25885c0cfd\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">EnigmaIOTGatewayClass::configWiFiManager</a></div><div class=\"ttdeci\">bool configWiFiManager()</div><div class=\"ttdoc\">Starts configuration AP and web server and gets settings from it.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00494\">EnigmaIOTGateway.cpp:494</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a></div><div class=\"ttdeci\">@ RAW</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00062\">EnigmaIOTGateway.h:62</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a29ed1ba0c2a04911013795cb11ff13e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">EnigmaIOTGatewayClass::getNetworkName</a></div><div class=\"ttdeci\">char * getNetworkName()</div><div class=\"ttdoc\">Gets EnigmaIOT network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00349\">EnigmaIOTGateway.h:349</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__dummy_8cpp_html_aea3ab74ce495f6e6d8c5916aab3aaa95\"><div class=\"ttname\"><a href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a></div><div class=\"ttdeci\">GatewayOutput_dummy GwOutput</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00029\">GwOutput_dummy.cpp:29</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a39a2abbde4e46e34c30e418b87e8d0b8\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">GatewayOutput_dummy::begin</a></div><div class=\"ttdeci\">bool begin()</div><div class=\"ttdoc\">Starts output module.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00047\">GwOutput_dummy.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a960401606ecc83efdb2e45646619f277\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a></div><div class=\"ttdeci\">void wifiManagerExit(boolean status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00102\">EnigmaIOTGatewayDummy.cpp:102</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_ade106fbc95d08320451d9b901aafd230\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a></div><div class=\"ttdeci\">void nodeDisconnected(uint8_t *mac, gwInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00224\">EnigmaIOTGatewayDummy.cpp:224</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a514a694eb41c0cbb43e43c1621313187\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">EnigmaIOTGatewayClass::setRxLed</a></div><div class=\"ttdeci\">void setRxLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is received.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00066\">EnigmaIOTGateway.cpp:66</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a52bbd932eb2a7fac9a3dc1debbc62e5b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">EnigmaIOTGatewayClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00867\">EnigmaIOTGateway.cpp:867</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a330863b8dd757d66f990a14298f2faf0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">EnigmaIOTGatewayClass::setTxLed</a></div><div class=\"ttdeci\">void setTxLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00059\">EnigmaIOTGateway.cpp:59</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_ad151c02682f80a13429640710b842160\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a></div><div class=\"ttdeci\">void wifiManagerStarted()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00106\">EnigmaIOTGatewayDummy.cpp:106</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_ad5def4e2c7a3e1de387bf16a3f5ad8d7\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">GatewayOutput_dummy::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">Should be called often for module management.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00053\">GwOutput_dummy.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a54adb71fcf29bc72c8a829133e425d80\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">connectionLedFlashing</a></div><div class=\"ttdeci\">boolean connectionLedFlashing</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00063\">EnigmaIOTGatewayDummy.cpp:63</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_ad84b439af2caa4fa2b92ba383b9513a8\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">onDownlinkData</a></div><div class=\"ttdeci\">void onDownlinkData(uint8_t *address, char *nodeName, control_message_type_t msgType, char *data, unsigned int len)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00180\">EnigmaIOTGatewayDummy.cpp:180</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a></div><div class=\"ttdeci\">gatewayPayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00061\">EnigmaIOTGateway.h:61</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a8eed8023d964354b6a2533c9662037e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">EnigmaIOTGatewayClass::getTotalPackets</a></div><div class=\"ttdeci\">uint32_t getTotalPackets(uint8_t *address)</div><div class=\"ttdoc\">Gets total packets sent by node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01470\">EnigmaIOTGateway.cpp:1470</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a1726020bc65217b9ec4d01bb0216a526\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">EnigmaIOTGatewayClass::onNewNode</a></div><div class=\"ttdeci\">void onNewNode(onNewNode_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called every time a node gets connected or reconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00528\">EnigmaIOTGateway.h:528</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_abcd4985de3ef6fbe1994af85093ca034\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a></div><div class=\"ttdeci\">EnigmaIOTGatewayClass EnigmaIOTGateway</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l02050\">EnigmaIOTGateway.cpp:2050</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_ae57d8fc0470c3b2fd22201eb1e3da9d4\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">GatewayOutput_dummy::newNodeSend</a></div><div class=\"ttdeci\">bool newNodeSend(char *address, uint16_t node_id)</div><div class=\"ttdoc\">Send new node notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00067\">GwOutput_dummy.cpp:67</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a5fd7dd2cafc98a62e99242dd11968a7c\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">processRxData</a></div><div class=\"ttdeci\">void processRxData(uint8_t *mac, uint8_t *buffer, uint8_t length, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char *nodeName=NULL)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00116\">EnigmaIOTGatewayDummy.cpp:116</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a037f8a0b338363b5555f353df30120ca\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">EnigmaIOTGatewayClass::onWiFiManagerStarted</a></div><div class=\"ttdeci\">void onWiFiManagerStarted(simpleEventHandler_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager start.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00386\">EnigmaIOTGateway.h:386</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_ad6e69a2870c8f219cc679677af110849\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a></div><div class=\"ttdeci\">#define MACSTR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00083\">helperFunctions.cpp:83</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a500819e2a3f4478adc06a72af00ebb9a\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">GatewayOutput_dummy::outputControlSend</a></div><div class=\"ttdeci\">bool outputControlSend(char *address, uint8_t *data, size_t length)</div><div class=\"ttdoc\">Send control data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00062\">GwOutput_dummy.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_adac909737089f601e9ee3ea0ad521dc7\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">GatewayOutput_dummy::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00043\">GwOutput_dummy.cpp:43</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a073dbcb7f5bc4f4b45dc048b55eaff3d\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">RED_LED</a></div><div class=\"ttdeci\">#define RED_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00054\">EnigmaIOTGatewayDummy.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a60e672b8465063bff29ed39899e15948\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948\">newNodeConnected</a></div><div class=\"ttdeci\">void newNodeConnected(uint8_t *mac, uint16_t node_id, char *nodeName=NULL)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00205\">EnigmaIOTGatewayDummy.cpp:205</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a4a71aecac635579082c10addb16df4a0\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">BUILTIN_LED</a></div><div class=\"ttdeci\">#define BUILTIN_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00050\">EnigmaIOTGatewayDummy.cpp:50</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5d5ce4312735008866cf84559bc645c4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">EnigmaIOTGatewayClass::sendDownstream</a></div><div class=\"ttdeci\">bool sendDownstream(uint8_t *mac, const uint8_t *data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t payload_type=RAW, char *nodeName=NULL)</div><div class=\"ttdoc\">Starts a downstream data message transmission.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00364\">EnigmaIOTGateway.cpp:364</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a160b39becf7cdf8700059947eaf6a73b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">EnigmaIOTGatewayClass::getErrorPackets</a></div><div class=\"ttdeci\">uint32_t getErrorPackets(uint8_t *address)</div><div class=\"ttdoc\">Gets number of errored packets of node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01476\">EnigmaIOTGateway.cpp:1476</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">lostmessages</a></div><div class=\"ttdeci\">@ lostmessages</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00024\">GwOutput_generic.h:24</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00254\">EnigmaIOTGatewayDummy.cpp:254</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a77da5264eb27ff8d378a8b279c8b97c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">EnigmaIOTGatewayClass::getPacketsHour</a></div><div class=\"ttdeci\">double getPacketsHour(uint8_t *address)</div><div class=\"ttdoc\">Gets packet rate sent by node that has a specific address, in packets per hour.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01482\">EnigmaIOTGateway.cpp:1482</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_aa2a2fb3ae886350f38e8d6d534278a00\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">GatewayOutput_dummy::outputDataSend</a></div><div class=\"ttdeci\">bool outputDataSend(char *address, char *data, size_t length, GwOutput_data_type_t type=data)</div><div class=\"ttdoc\">Send data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00057\">GwOutput_dummy.cpp:57</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a></div><div class=\"ttdoc\">Library to build a gateway for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></div><div class=\"ttdeci\">gwInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00075\">EnigmaIOTGateway.h:75</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTdebug_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a></div><div class=\"ttdoc\">Auxiliary functions for debugging over Serial.</div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_ac5c28a5827b5a3b34222c13589adeba7\"><div class=\"ttname\"><a href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a></div><div class=\"ttdeci\">enum control_message_type control_message_type_t</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_ae6fc0fcbb7779efc63d50434dbd44d7a\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">flashConnectionLed</a></div><div class=\"ttdeci\">void flashConnectionLed(void *led)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00065\">EnigmaIOTGatewayDummy.cpp:65</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_afb41f49d1291eebbd676d4915ee193d1\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">EnigmaIOTGatewayClass::getPER</a></div><div class=\"ttdeci\">double getPER(uint8_t *address)</div><div class=\"ttdoc\">Gets packet error rate of node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01460\">EnigmaIOTGateway.cpp:1460</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></div><div class=\"ttdeci\">@ CAYENNELPP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00063\">EnigmaIOTGateway.h:63</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_ad85ae6aaf68f30aa59facd8f80635ffd\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">stopConnectionFlash</a></div><div class=\"ttdeci\">void stopConnectionFlash()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00086\">EnigmaIOTGatewayDummy.cpp:86</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ac015f00758aac57a7f7ef2ffe26298b3\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">EnigmaIOTGatewayClass::getNetworkKey</a></div><div class=\"ttdeci\">char * getNetworkKey(bool plain=false)</div><div class=\"ttdoc\">Gets hashed EnigmaIOT network key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00357\">EnigmaIOTGateway.h:357</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a9a6b2d2a88c39a839f414e9ce861c5a0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">EnigmaIOTGatewayClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *networkKey=NULL, bool useDataCounter=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts accepting node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00736\">EnigmaIOTGateway.cpp:736</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_acecaff385e13802f95e84d1ece4f6322\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">processRxControlData</a></div><div class=\"ttdeci\">void processRxControlData(char *macStr, uint8_t *data, uint8_t length)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00110\">EnigmaIOTGatewayDummy.cpp:110</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__dummy_8h_html\"><div class=\"ttname\"><a href=\"GwOutput__dummy_8h.html\">GwOutput_dummy.h</a></div><div class=\"ttdoc\">Dummy Gateway output module.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00053\">EnigmaIOTGatewayDummy.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a6ff09343e5169937476aa04932b76915\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a6ff09343e5169937476aa04932b76915\">startConnectionFlash</a></div><div class=\"ttdeci\">void startConnectionFlash(int period)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00070\">EnigmaIOTGatewayDummy.cpp:70</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a6f9117dde5be2d5c40b41c3b44287dbd\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">GatewayOutput_dummy::setDlCallback</a></div><div class=\"ttdeci\">void setDlCallback(onDlData_t cb)</div><div class=\"ttdoc\">Set data processing function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8h_source.html#l00108\">GwOutput_dummy.h:108</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTGatewayMQTT_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayMQTT/EnigmaIOTGatewayMQTT.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\">EnigmaIOTGatewayMQTT</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGatewayMQTT.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>&quot;</code><br />\n<code>#include &lt;WiFiClient.h&gt;</code><br />\n<code>#include &lt;ArduinoOTA.h&gt;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;5</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a073dbcb7f5bc4f4b45dc048b55eaff3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">RED_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a073dbcb7f5bc4f4b45dc048b55eaff3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ae6fc0fcbb7779efc63d50434dbd44d7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">flashConnectionLed</a> (void *led)</td></tr>\n<tr class=\"separator:ae6fc0fcbb7779efc63d50434dbd44d7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ff09343e5169937476aa04932b76915\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a6ff09343e5169937476aa04932b76915\">startConnectionFlash</a> (int period)</td></tr>\n<tr class=\"separator:a6ff09343e5169937476aa04932b76915\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad85ae6aaf68f30aa59facd8f80635ffd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">stopConnectionFlash</a> ()</td></tr>\n<tr class=\"separator:ad85ae6aaf68f30aa59facd8f80635ffd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d52c8107e0bcc9687be62f7e0b388ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a8d52c8107e0bcc9687be62f7e0b388ae\">arduinoOTAConfigure</a> ()</td></tr>\n<tr class=\"separator:a8d52c8107e0bcc9687be62f7e0b388ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a960401606ecc83efdb2e45646619f277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (boolean <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:a960401606ecc83efdb2e45646619f277\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad151c02682f80a13429640710b842160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> ()</td></tr>\n<tr class=\"separator:ad151c02682f80a13429640710b842160\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acecaff385e13802f95e84d1ece4f6322\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">processRxControlData</a> (char *macStr, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t length)</td></tr>\n<tr class=\"separator:acecaff385e13802f95e84d1ece4f6322\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4e0b35257234db80b4d6771ec42153a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4e0b35257234db80b4d6771ec42153a3\">doRestart</a> ()</td></tr>\n<tr class=\"separator:a4e0b35257234db80b4d6771ec42153a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5fd7dd2cafc98a62e99242dd11968a7c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">processRxData</a> (uint8_t *mac, uint8_t *buffer, uint8_t length, uint16_t lostMessages, bool control, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> payload_type, char *nodeName=NULL)</td></tr>\n<tr class=\"separator:a5fd7dd2cafc98a62e99242dd11968a7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad84b439af2caa4fa2b92ba383b9513a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">onDownlinkData</a> (uint8_t *address, char *nodeName, <a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> msgType, char *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, unsigned int len)</td></tr>\n<tr class=\"separator:ad84b439af2caa4fa2b92ba383b9513a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa1ed5eb542d16a6542d77742a8b62677\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aa1ed5eb542d16a6542d77742a8b62677\">newNodeConnected</a> (uint8_t *mac, uint16_t node_id, char *nodeName=nullptr)</td></tr>\n<tr class=\"separator:aa1ed5eb542d16a6542d77742a8b62677\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ade106fbc95d08320451d9b901aafd230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a> (uint8_t *mac, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:ade106fbc95d08320451d9b901aafd230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a86bc66f6ecbde6ad8502d0cefb1a67f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">connectionLed</a> = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a86bc66f6ecbde6ad8502d0cefb1a67f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aed1b30f3a8b90f8c59e6372f7641ba17\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a> = false</td></tr>\n<tr class=\"separator:aed1b30f3a8b90f8c59e6372f7641ba17\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a827c388d92651f51d34097598a52a92a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a827c388d92651f51d34097598a52a92a\">restartRequested</a> = false</td></tr>\n<tr class=\"separator:a827c388d92651f51d34097598a52a92a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a37e5a736d8dfa2198aa9607a61ff1695\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a37e5a736d8dfa2198aa9607a61ff1695\">restartRequestTime</a></td></tr>\n<tr class=\"separator:a37e5a736d8dfa2198aa9607a61ff1695\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00060\">60</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;5</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00057\">57</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a073dbcb7f5bc4f4b45dc048b55eaff3d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a073dbcb7f5bc4f4b45dc048b55eaff3d\">&#9670;&nbsp;</a></span>RED_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define RED_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00061\">61</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a8d52c8107e0bcc9687be62f7e0b388ae\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8d52c8107e0bcc9687be62f7e0b388ae\">&#9670;&nbsp;</a></span>arduinoOTAConfigure()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void arduinoOTAConfigure </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00113\">113</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4e0b35257234db80b4d6771ec42153a3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4e0b35257234db80b4d6771ec42153a3\">&#9670;&nbsp;</a></span>doRestart()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void doRestart </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00184\">184</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae6fc0fcbb7779efc63d50434dbd44d7a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae6fc0fcbb7779efc63d50434dbd44d7a\">&#9670;&nbsp;</a></span>flashConnectionLed()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void flashConnectionLed </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>led</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00076\">76</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00488\">488</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa1ed5eb542d16a6542d77742a8b62677\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa1ed5eb542d16a6542d77742a8b62677\">&#9670;&nbsp;</a></span>newNodeConnected()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void newNodeConnected </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>node_id</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em> = <code>nullptr</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00330\">330</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ade106fbc95d08320451d9b901aafd230\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ade106fbc95d08320451d9b901aafd230\">&#9670;&nbsp;</a></span>nodeDisconnected()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void nodeDisconnected </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00352\">352</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad84b439af2caa4fa2b92ba383b9513a8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad84b439af2caa4fa2b92ba383b9513a8\">&#9670;&nbsp;</a></span>onDownlinkData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void onDownlinkData </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a>&#160;</td>\n          <td class=\"paramname\"><em>msgType</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00281\">281</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"acecaff385e13802f95e84d1ece4f6322\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acecaff385e13802f95e84d1ece4f6322\">&#9670;&nbsp;</a></span>processRxControlData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxControlData </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>macStr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00171\">171</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5fd7dd2cafc98a62e99242dd11968a7c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5fd7dd2cafc98a62e99242dd11968a7c\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>lostMessages</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>control</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payload_type</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00213\">213</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00382\">382</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6ff09343e5169937476aa04932b76915\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6ff09343e5169937476aa04932b76915\">&#9670;&nbsp;</a></span>startConnectionFlash()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void startConnectionFlash </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>period</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00081\">81</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad85ae6aaf68f30aa59facd8f80635ffd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad85ae6aaf68f30aa59facd8f80635ffd\">&#9670;&nbsp;</a></span>stopConnectionFlash()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void stopConnectionFlash </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00097\">97</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a960401606ecc83efdb2e45646619f277\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a960401606ecc83efdb2e45646619f277\">&#9670;&nbsp;</a></span>wifiManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">boolean&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00163\">163</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad151c02682f80a13429640710b842160\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad151c02682f80a13429640710b842160\">&#9670;&nbsp;</a></span>wifiManagerStarted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void wifiManagerStarted </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00167\">167</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a86bc66f6ecbde6ad8502d0cefb1a67f0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a86bc66f6ecbde6ad8502d0cefb1a67f0\">&#9670;&nbsp;</a></span>connectionLed</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int connectionLed = <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00069\">69</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aed1b30f3a8b90f8c59e6372f7641ba17\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aed1b30f3a8b90f8c59e6372f7641ba17\">&#9670;&nbsp;</a></span>connectionLedFlashing</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool connectionLedFlashing = false</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00070\">70</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a827c388d92651f51d34097598a52a92a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a827c388d92651f51d34097598a52a92a\">&#9670;&nbsp;</a></span>restartRequested</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool restartRequested = false</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00072\">72</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a37e5a736d8dfa2198aa9607a61ff1695\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a37e5a736d8dfa2198aa9607a61ff1695\">&#9670;&nbsp;</a></span>restartRequestTime</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t restartRequestTime</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00073\">73</a> of file <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">EnigmaIOTGatewayMQTT.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTGatewayMQTT_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayMQTT/EnigmaIOTGatewayMQTT.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\">EnigmaIOTGatewayMQTT</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGatewayMQTT.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOTGatewayMQTT_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"GwOutput__mqtt_8h.html\">GwOutput_mqtt.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160; </div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;WiFiClientSecure.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;WiFiClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif // SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;soc/soc.h&quot;</span>           <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;soc/rtc_cntl_reg.h&quot;</span>  <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#elif defined ESP8266</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160; </div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoOTA.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160; </div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160; </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"comment\">//#define MEAS_TEMP // Temperature measurement for Gateway monitoring using DS18B20</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160; </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#ifdef MEAS_TEMP</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &lt;DallasTemperature.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#include &lt;OneWire.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"keyword\">const</span> time_t statusPeriod = 300 * 1000;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> DS18B20_PIN = 16;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> DS18B20_PREC = 12;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;OneWire ow (DS18B20_PIN);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;DallasTemperature ds18b20 (&amp;ow);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;DeviceAddress dsAddress;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"keywordtype\">float</span> temperature;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   57</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 5</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#endif // BUILTIN_LED</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   60</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">   61</a></span>&#160;<span class=\"preprocessor\">#define RED_LED LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160; </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;TimerHandle_t connectionLedTimer;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;ETSTimer connectionLedTimer;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160; </div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">   69</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">connectionLed</a> = <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">   70</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a827c388d92651f51d34097598a52a92a\">   72</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a827c388d92651f51d34097598a52a92a\">restartRequested</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a37e5a736d8dfa2198aa9607a61ff1695\">   73</a></span>&#160;time_t <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a37e5a736d8dfa2198aa9607a61ff1695\">restartRequestTime</a>;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160; </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">   76</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">flashConnectionLed</a> (<span class=\"keywordtype\">void</span>* led) {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    <span class=\"comment\">//digitalWrite (*(int*)led, !digitalRead (*(int*)led));</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    digitalWrite (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>, !digitalRead (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>));</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160; </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a6ff09343e5169937476aa04932b76915\">   81</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a6ff09343e5169937476aa04932b76915\">startConnectionFlash</a> (<span class=\"keywordtype\">int</span> period) {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        connectionLedTimer = xTimerCreate (<span class=\"stringliteral\">&quot;led_flash&quot;</span>, pdMS_TO_TICKS (period), pdTRUE, (<span class=\"keywordtype\">void</span>*)0, <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">flashConnectionLed</a>);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        xTimerStart (connectionLedTimer, 0);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">#elif defined (ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    ets_timer_disarm (&amp;connectionLedTimer);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        ets_timer_arm_new (&amp;connectionLedTimer, period, <span class=\"keyword\">true</span>, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">   97</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">stopConnectionFlash</a> () {</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        xTimerStop (connectionLedTimer, 0);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        xTimerDelete (connectionLedTimer, 0);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        ets_timer_disarm (&amp;connectionLedTimer);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        digitalWrite (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">connectionLed</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a8d52c8107e0bcc9687be62f7e0b388ae\">  113</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a8d52c8107e0bcc9687be62f7e0b388ae\">arduinoOTAConfigure</a> () {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    <span class=\"comment\">// Port defaults to 3232</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <span class=\"comment\">// ArduinoOTA.setPort(3232);</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160; </div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"comment\">// Hostname defaults to esp3232-[MAC]</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    ArduinoOTA.setHostname (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">getNetworkName</a> ());</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160; </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"comment\">// No authentication by default</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    ArduinoOTA.setPassword (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">getNetworkKey</a> (<span class=\"keyword\">true</span>));</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160; </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <span class=\"comment\">// Password can be set with it&#39;s md5 value as well</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <span class=\"comment\">// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <span class=\"comment\">// ArduinoOTA.setPasswordHash(&quot;21232f297a57a5a743894a0e4a801fc3&quot;);</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160; </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    ArduinoOTA.onStart ([] () {</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keywordflow\">if</span> (ArduinoOTA.getCommand () == U_FLASH) {</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Start updating sketch&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        } <span class=\"keywordflow\">else</span> {<span class=\"comment\">// U_SPIFFS</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Start updating filesystem&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;            <span class=\"comment\">// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                        });</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    ArduinoOTA.onEnd ([] () {</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA Finished&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                      });</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    ArduinoOTA.onProgress ([] (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> progress, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> total) {</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> printed = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> percent = progress / (total / 100);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        digitalWrite (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>, !digitalRead (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>));</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"comment\">// if (!(percent % 1)) {</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"comment\">//  //Serial.print (&#39;.&#39;);</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"comment\">// }</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        <span class=\"keywordflow\">if</span> (!(percent % 20) &amp;&amp; !printed &amp;&amp; percent != 0) {</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot; %d%%\\n&quot;</span>, percent);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;            printed = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (percent % 20) {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;            printed = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        <span class=\"keywordflow\">if</span> (progress == total) {</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA transfer finished&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;                           });</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    ArduinoOTA.onError ([] (ota_error_t error) {</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA Error[%u]: &quot;</span>, error);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keywordflow\">if</span> (error == OTA_AUTH_ERROR) { DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA Auth Failed&quot;</span>); }        <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (error == OTA_BEGIN_ERROR) { DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA Begin Failed&quot;</span>); }         <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (error == OTA_CONNECT_ERROR) { DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA Connect Failed&quot;</span>); }         <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (error == OTA_RECEIVE_ERROR) { DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA Receive Failed&quot;</span>); }         <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (error == OTA_END_ERROR) { DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA End Failed&quot;</span>); }</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                        });</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160; </div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    ArduinoOTA.begin ();</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160; </div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a960401606ecc83efdb2e45646619f277\">  163</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a> (<span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">configManagerExit</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160; </div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad151c02682f80a13429640710b842160\">  167</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a> () {</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">configManagerStart</a> (&amp;<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160; </div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">  171</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">processRxControlData</a> (<span class=\"keywordtype\">char</span>* macStr, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t length) {</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">VERSION_ANS</a> &amp;&amp; length &gt;= 4) {</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Version message: %d.%d.%d&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1], <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[2], <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[3]);</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;            <a class=\"code\" href=\"classNode.html\">Node</a>* node = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">getNodes</a> ()-&gt;<a class=\"code\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">getNodeFromName</a> (macStr);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;            <span class=\"keywordflow\">if</span> (node) {</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                node-&gt;<a class=\"code\" href=\"classNode.html#accf5025ffbf53e48db9ab7f429c68b1e\">setVersion</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1], <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[2], <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[3]);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">outputControlSend</a> (macStr, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, length);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160; </div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4e0b35257234db80b4d6771ec42153a3\">  184</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4e0b35257234db80b4d6771ec42153a3\">doRestart</a> () {</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Restart requested&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (1);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;    <span class=\"keywordtype\">size_t</span> len;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;    <span class=\"keywordtype\">char</span>* payload;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160; </div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;    DynamicJsonDocument doc (capacity);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160; </div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;    doc[<span class=\"stringliteral\">&quot;action&quot;</span>] = <span class=\"stringliteral\">&quot;restart&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160; </div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;    len = measureJson (doc) + 1;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;    payload = (<span class=\"keywordtype\">char</span>*)malloc (len);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;    serializeJson (doc, (<span class=\"keywordtype\">char</span>*)payload, len);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;    <span class=\"keywordtype\">char</span> addr[] = <span class=\"stringliteral\">&quot;gateway&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a> (addr, payload, len - 1);</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;    free (payload);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160; </div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a827c388d92651f51d34097598a52a92a\">restartRequested</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a37e5a736d8dfa2198aa9607a61ff1695\">restartRequestTime</a> = millis ();</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160; </div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160; </div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"keywordtype\">void</span> processHADiscovery (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* topic, <span class=\"keywordtype\">char</span>* message, <span class=\"keywordtype\">size_t</span> len) {</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;About to process HA discovery. Len: %d - %s --&gt; %.*s&quot;</span>, len, topic, len, message);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.rawMsgSend (topic, message, len, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160; </div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">  213</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">processRxData</a> (uint8_t* mac, uint8_t* buffer, uint8_t length, uint16_t lostMessages, <span class=\"keywordtype\">bool</span> control, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> payload_type, <span class=\"keywordtype\">char</span>* nodeName = NULL) {</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;    uint8_t* addr = mac;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;    <span class=\"keywordtype\">size_t</span> pld_size = 0;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> PAYLOAD_SIZE = 1024; <span class=\"comment\">// Max MQTT payload in PubSubClient library normal operation.</span></div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160; </div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;    <span class=\"keywordtype\">char</span> payload[PAYLOAD_SIZE];</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160; </div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;    <span class=\"keywordtype\">char</span> mac_str[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (addr, mac_str);</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160; </div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;    <span class=\"keywordflow\">if</span> (control) {</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">processRxControlData</a> (nodeName ? nodeName : mac_str, buffer, length);</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;    <span class=\"comment\">//char* netName = EnigmaIOTGateway.getNetworkName ();</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;    <span class=\"keywordflow\">if</span> (payload_type == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>) {</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;CayenneLPP message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> capacity = JSON_ARRAY_SIZE (25) + 25 * JSON_OBJECT_SIZE (4);</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;        DynamicJsonDocument jsonBuffer (capacity);</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;        JsonArray root = jsonBuffer.createNestedArray ();</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        CayenneLPP cayennelpp (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160; </div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        cayennelpp.decode ((uint8_t*)buffer, length, root);</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;        uint8_t error = cayennelpp.getError ();</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;        <span class=\"keywordflow\">if</span> (error != LPP_ERROR_OK) {</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error decoding CayenneLPP data: %d&quot;</span>, error);</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;            <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        pld_size = serializeJson (root, payload, PAYLOAD_SIZE);</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (payload_type == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>) {</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;MsgPack message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> capacity = JSON_ARRAY_SIZE (25) + 25 * JSON_OBJECT_SIZE (4);</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;        DynamicJsonDocument jsonBuffer (capacity);</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        DeserializationError error = deserializeMsgPack (jsonBuffer, buffer, length);</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        <span class=\"keywordflow\">if</span> (error != DeserializationError::Ok) {</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error decoding MSG Pack data: %s&quot;</span>, error.c_str ());</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;            <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        pld_size = serializeJson (jsonBuffer, payload, PAYLOAD_SIZE);</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (payload_type == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a>) {</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;RAW message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        <span class=\"keywordflow\">if</span> (length &lt;= PAYLOAD_SIZE) {</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;            memcpy (payload, buffer, length);</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;            pld_size = length;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        } <span class=\"keywordflow\">else</span> { <span class=\"comment\">// This will not happen but may lead to errors in case of using another physical transport</span></div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;            memcpy (payload, buffer, PAYLOAD_SIZE);</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;            pld_size = PAYLOAD_SIZE;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160; </div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a> (nodeName ? nodeName : mac_str, payload, pld_size);</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Published data message from %s, length %d: %s, Encoding 0x%02X&quot;</span>, nodeName ? nodeName : mac_str, pld_size, payload, payload_type);</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;    <span class=\"keywordflow\">if</span> (lostMessages &gt; 0) {</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;        pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;lostMessages\\&quot;:%u}&quot;</span>, lostMessages);</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;        <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a> (nodeName ? nodeName : mac_str, payload, pld_size, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">GwOutput_data_type::lostmessages</a>);</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT from %s: %s&quot;</span>, nodeName ? nodeName : mac_str, payload);</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;<span class=\"preprocessor\">#if ENABLE_STATUS_MESSAGES</span></div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;    pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;per\\&quot;:%e,\\&quot;lostmessages\\&quot;:%u,\\&quot;totalmessages\\&quot;:%u,\\&quot;packetshour\\&quot;:%.2f}&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;                         <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">getPER</a> ((uint8_t*)mac),</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;                         <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">getErrorPackets</a> ((uint8_t*)mac),</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;                         <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">getTotalPackets</a> ((uint8_t*)mac),</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;                         <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">getPacketsHour</a> ((uint8_t*)mac));</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a> (nodeName ? nodeName : mac_str, payload, pld_size, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">GwOutput_data_type::status</a>);</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT from %s: %s&quot;</span>, nodeName ? nodeName : mac_str, payload);</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160; </div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">  281</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">onDownlinkData</a> (uint8_t* address, <span class=\"keywordtype\">char</span>* nodeName, <a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> msgType, <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> len) {</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;    uint8_t* buffer;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;    <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> bufferLen = len;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> encoding = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">ENIGMAIOT</a>;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160; </div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;    <span class=\"keywordflow\">if</span> (nodeName) {</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;DL Message for %s. Type 0x%02X&quot;</span>, nodeName, msgType);</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;DL Message for &quot;</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a> <span class=\"stringliteral\">&quot;. Type 0x%02X&quot;</span>, MAC2STR (address), msgType);</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Data: %.*s Length: %d&quot;</span>, len, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160; </div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;    <span class=\"keywordflow\">if</span> (msgType == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">USERDATA_GET</a> || msgType == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">USERDATA_SET</a>) {</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> capacity = JSON_ARRAY_SIZE (25) + 25 * JSON_OBJECT_SIZE (4);</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        DeserializationError error = deserializeJson (json, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, DeserializationOption::NestingLimit (3));</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;        <span class=\"keywordflow\">if</span> (error == DeserializationError::Ok) {</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;JSON Message. Result %s&quot;</span>, error.c_str ());</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;            bufferLen = measureMsgPack (json) + 1; <span class=\"comment\">// Add place for \\0</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;            buffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;            bufferLen = serializeMsgPack (json, (<span class=\"keywordtype\">char</span>*)buffer, bufferLen);</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;            encoding = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Not JSON Message. Error %s&quot;</span>, error.c_str ());</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;            bufferLen++; <span class=\"comment\">// Add place for \\0</span></div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;            buffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;            sprintf ((<span class=\"keywordtype\">char</span>*)buffer, <span class=\"stringliteral\">&quot;%.*s&quot;</span>, len, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>);</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;            encoding = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a>;</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        bufferLen = len + 1;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;        buffer = (uint8_t*)calloc (<span class=\"keyword\">sizeof</span> (uint8_t), bufferLen);</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;        memcpy (buffer, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160; </div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160; </div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">sendDownstream</a> (address, buffer, bufferLen, msgType, encoding, nodeName)) {</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <span class=\"keywordflow\">if</span> (nodeName) {</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending esp_now message to %s&quot;</span>, nodeName);</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending esp_now message to &quot;</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a>, MAC2STR (address));</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Esp-now message sent or queued correctly&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160; </div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;    free (buffer);</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160; </div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aa1ed5eb542d16a6542d77742a8b62677\">  330</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aa1ed5eb542d16a6542d77742a8b62677\">newNodeConnected</a> (uint8_t* mac, uint16_t node_id, <span class=\"keywordtype\">char</span>* nodeName = <span class=\"keyword\">nullptr</span>) {</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160; </div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;    <span class=\"comment\">//Serial.printf (&quot;New node connected: %s\\n&quot;, macstr);</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160; </div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;    <span class=\"keywordflow\">if</span> (nodeName) {</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">newNodeSend</a> (nodeName, node_id)) {</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending new node %s&quot;</span>, nodeName);</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;New node %s message sent&quot;</span>, nodeName);</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        <span class=\"keywordtype\">char</span> macstr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac, macstr);</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">newNodeSend</a> (macstr, node_id)) {</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending new node %s&quot;</span>, macstr);</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;New node %s message sent&quot;</span>, macstr);</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160; </div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160; </div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ade106fbc95d08320451d9b901aafd230\">  352</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a> (uint8_t* mac, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;    <span class=\"keywordtype\">char</span> macstr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac, macstr);</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;    <span class=\"comment\">//Serial.printf (&quot;Node %s disconnected. Reason %u\\n&quot;, macstr, reason);</span></div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">nodeDisconnectedSend</a> (macstr, reason)) {</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending node disconnected %s reason %d&quot;</span>, macstr, reason);</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node %s disconnected message sent. Reason %d&quot;</span>, macstr, reason);</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160; </div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"comment\">//#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"comment\">//void EnigmaIOTGateway_handle (void * param) {</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;<span class=\"comment\">//  for (;;) {</span></div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"comment\">//      EnigmaIOTGateway.handle ();</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"comment\">//      vTaskDelay (0);</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"comment\">//  }</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;<span class=\"comment\">//}</span></div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;<span class=\"comment\">//void GwOutput_handle (void* param) {</span></div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"comment\">//  for (;;) {</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;<span class=\"comment\">//      GwOutput.loop ();</span></div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"comment\">//      vTaskDelay (0);</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"comment\">//  }</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"comment\">//}</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"comment\">//TaskHandle_t xEnigmaIOTGateway_handle = NULL;</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"comment\">//TaskHandle_t gwoutput_handle = NULL;</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;<span class=\"comment\">//#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160; </div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  382</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;    Serial.begin (921600); Serial.println (); Serial.println ();</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160; </div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"comment\">// Turn-off the &#39;brownout detector&#39; to avoid random restarts during wake up,</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"comment\">// normally due to bad quality regulator on board</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;    WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160; </div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;    ets_timer_setfn (&amp;connectionLedTimer, <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">flashConnectionLed</a>, (<span class=\"keywordtype\">void</span>*)&amp;<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">connectionLed</a>);</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160; </div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;    pinMode (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>, OUTPUT);</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;    digitalWrite (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a>);</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160; </div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;<span class=\"preprocessor\">#ifdef MEAS_TEMP</span></div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;    ds18b20.begin ();</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Found %u sensors&quot;</span>, ds18b20.getDeviceCount ());</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;    <span class=\"keywordflow\">if</span> (ds18b20.getAddress (dsAddress, 0)) {</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;DS18B20 address: %02X %02X %02X %02X %02X %02X %02X %02X&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;                    dsAddress[0], dsAddress[1], dsAddress[2], dsAddress[3],</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;                    dsAddress[4], dsAddress[5], dsAddress[6], dsAddress[7]);</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;No DS18B20 found&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;    ds18b20.setWaitForConversion (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;    ds18b20.setResolution (DS18B20_PREC);</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;<span class=\"preprocessor\">#endif // MEAS_TEMP</span></div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160; </div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a6ff09343e5169937476aa04932b76915\">startConnectionFlash</a> (100);</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">loadConfig</a> ()) {</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error reading config file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160; </div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">setRxLed</a> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>);</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">setTxLed</a> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">RED_LED</a>);</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">onNewNode</a> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aa1ed5eb542d16a6542d77742a8b62677\">newNodeConnected</a>);</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">onNodeDisconnected</a> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a>);</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">onWiFiManagerStarted</a> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a>);</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">onWiFiManagerExit</a> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a>);</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">processRxData</a>);</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83\">onHADiscovery</a> (processHADiscovery);</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db\">onGatewayRestartRequested</a> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4e0b35257234db80b4d6771ec42153a3\">doRestart</a>);</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160; </div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>);</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160; </div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;    WiFi.mode (WIFI_AP_STA);</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;    WiFi.begin ();</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160; </div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">configWiFiManager</a> ();</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160; </div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;    WiFi.softAP (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">getNetworkName</a> (), <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">getNetworkKey</a> (<span class=\"keyword\">true</span>));</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">stopConnectionFlash</a> ();</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160; </div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;STA MAC Address: %s&quot;</span>, WiFi.macAddress ().c_str ());</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;AP MAC Address: %s&quot;</span>, WiFi.softAPmacAddress ().c_str ());</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;BSSID Address: %s&quot;</span>, WiFi.BSSIDstr ().c_str ());</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160; </div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;IP address: %s&quot;</span>, WiFi.localIP ().toString ().c_str ());</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;WiFi Channel: %d&quot;</span>, WiFi.channel ());</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;WiFi SSID: %s&quot;</span>, WiFi.SSID ().c_str ());</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Network Name: %s&quot;</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">getNetworkName</a> ());</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160; </div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">setDlCallback</a> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">onDownlinkData</a>);</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">begin</a> ();</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160; </div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a8d52c8107e0bcc9687be62f7e0b388ae\">arduinoOTAConfigure</a> ();</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160; </div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;    <span class=\"comment\">//xTaskCreate (EnigmaIOTGateway_handle, &quot;handle&quot;, 10000, NULL, 1, &amp;xEnigmaIOTGateway_handle);</span></div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;    <span class=\"comment\">//xTaskCreatePinnedToCore (EnigmaIOTGateway_handle, &quot;handle&quot;, 4096, NULL, 0, &amp;xEnigmaIOTGateway_handle, 1);</span></div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;    <span class=\"comment\">//xTaskCreatePinnedToCore (GwOutput_handle, &quot;gwoutput&quot;, 10000, NULL, 2, &amp;gwoutput_handle, 1);</span></div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160; </div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;<span class=\"preprocessor\">#ifdef MEAS_TEMP</span></div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;<span class=\"keywordtype\">void</span> sendStatus (<span class=\"keywordtype\">float</span> temperature) {</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (3) + 30;;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;    <span class=\"keywordtype\">size_t</span> len;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;    <span class=\"keywordtype\">char</span>* payload;</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160; </div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;    DynamicJsonDocument doc (capacity);</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160; </div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;    JsonObject <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> = doc.createNestedObject (<span class=\"stringliteral\">&quot;status&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;    <span class=\"keywordflow\">if</span> (temperature &gt; -100) {</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;        <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>[<span class=\"stringliteral\">&quot;temp&quot;</span>] = temperature;</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>[<span class=\"stringliteral\">&quot;nodes&quot;</span>] = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">getActiveNodesNumber</a> ();</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>[<span class=\"stringliteral\">&quot;mem&quot;</span>] = ESP.getFreeHeap ();</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160; </div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;    len = measureJson (doc) + 1;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;    payload = (<span class=\"keywordtype\">char</span>*)malloc (len);</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;    serializeJson (doc, (<span class=\"keywordtype\">char</span>*)payload, len);</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;    <span class=\"keywordtype\">char</span> addr[] = <span class=\"stringliteral\">&quot;gateway&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a> (addr, payload, len - 1);</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;    free (payload);</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;<span class=\"preprocessor\">#endif // MEAS_TEMP</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160; </div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  488</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;    <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">loop</a> ();</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a> ();</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;    ArduinoOTA.handle ();</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160; </div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;<span class=\"preprocessor\">#ifdef MEAS_TEMP</span></div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> tempRequested = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;    <span class=\"keyword\">static</span> time_t lastTempTime = 0;</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160; </div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;    <span class=\"keywordflow\">if</span> (ds18b20.validAddress (dsAddress)) {</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;        <span class=\"keywordflow\">if</span> ((millis () - lastTempTime &gt; statusPeriod &amp;&amp; !tempRequested) || !lastTempTime) {</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;            <span class=\"keywordflow\">if</span> (ds18b20.requestTemperaturesByIndex (0)) {</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Temperature requested&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;                lastTempTime = millis ();</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;                tempRequested = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Temperature request error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;        <span class=\"keywordflow\">if</span> (tempRequested) {</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;            <span class=\"keywordflow\">if</span> (ds18b20.isConversionComplete ()) {</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;                temperature = ds18b20.getTempC (dsAddress);</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;                sendStatus (temperature);</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Temperature: %f&quot;</span>, temperature);</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;                tempRequested = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;<span class=\"preprocessor\">#endif // MEAS_TEMP</span></div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160; </div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a827c388d92651f51d34097598a52a92a\">restartRequested</a>) {</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;        <span class=\"keywordflow\">if</span> (millis () - <a class=\"code\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a37e5a736d8dfa2198aa9607a61ff1695\">restartRequestTime</a> &gt; 100) {</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;            ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a74f3b21d578650defdb63b334102dc48\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">EnigmaIOTGatewayClass::onWiFiManagerExit</a></div><div class=\"ttdeci\">void onWiFiManagerExit(onWiFiManagerExit_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager exit.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00378\">EnigmaIOTGateway.h:378</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a4a8fee82bf25fa412846a5ffa2a3cbbb\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">EnigmaIOTGatewayClass::getActiveNodesNumber</a></div><div class=\"ttdeci\">int getActiveNodesNumber()</div><div class=\"ttdoc\">Gets number of active nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00592\">EnigmaIOTGateway.h:592</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">VERSION_ANS</a></div><div class=\"ttdeci\">@ VERSION_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00053\">NodeList.h:53</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a359bd95cdb353b885d4bd691239b64fa\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">GatewayOutput_dummy::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00039\">GwOutput_dummy.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a08caf502661a3bf1b75ba6860eb1bebe\"><div class=\"ttname\"><a href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">NodeList::getNodeFromName</a></div><div class=\"ttdeci\">Node * getNodeFromName(const char *name)</div><div class=\"ttdoc\">Gets node that correspond with given node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00174\">NodeList.cpp:174</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">USERDATA_SET</a></div><div class=\"ttdeci\">@ USERDATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00071\">NodeList.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a975c9b549e113deebe5581d5107d34b2\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">EnigmaIOTGatewayClass::onNodeDisconnected</a></div><div class=\"ttdeci\">void onNodeDisconnected(onNodeDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called every time a node is disconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00557\">EnigmaIOTGateway.h:557</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_acc9d7df320e4b4fb7ce459eac0e6639d\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">GatewayOutput_dummy::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart(EnigmaIOTGatewayClass *enigmaIotGw)</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00031\">GwOutput_dummy.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a2611c30452fc9785b3958eddca02daf8\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">EnigmaIOTGatewayClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onGwDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00449\">EnigmaIOTGateway.h:449</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5ddb096aa5a0ec2113307a1480992a83\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83\">EnigmaIOTGatewayClass::onHADiscovery</a></div><div class=\"ttdeci\">void onHADiscovery(onHADiscovery_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called when a Home Assistant discovery message is received f...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00458\">EnigmaIOTGateway.h:458</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a8df0346a1f3e282d6875b04a9fe4ec8f\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a></div><div class=\"ttdeci\">static const int MAX_DATA_PAYLOAD_SIZE</div><div class=\"ttdoc\">Maximun payload size for data packets.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00048\">EnigmaIoTconfigAdvanced.h:48</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a3ae96525b5a48e7bea23a36cedca7949\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">GatewayOutput_dummy::nodeDisconnectedSend</a></div><div class=\"ttdeci\">bool nodeDisconnectedSend(char *address, gwInvalidateReason_t reason)</div><div class=\"ttdoc\">Send node disconnection notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00072\">GwOutput_dummy.cpp:72</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_ae6fc0fcbb7779efc63d50434dbd44d7a\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">flashConnectionLed</a></div><div class=\"ttdeci\">void flashConnectionLed(void *led)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00076\">EnigmaIOTGatewayMQTT.cpp:76</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad6c301b780bd802ee98bbe25885c0cfd\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">EnigmaIOTGatewayClass::configWiFiManager</a></div><div class=\"ttdeci\">bool configWiFiManager()</div><div class=\"ttdoc\">Starts configuration AP and web server and gets settings from it.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00494\">EnigmaIOTGateway.cpp:494</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_ad85ae6aaf68f30aa59facd8f80635ffd\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">stopConnectionFlash</a></div><div class=\"ttdeci\">void stopConnectionFlash()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00097\">EnigmaIOTGatewayMQTT.cpp:97</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a></div><div class=\"ttdeci\">@ RAW</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00062\">EnigmaIOTGateway.h:62</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a29ed1ba0c2a04911013795cb11ff13e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">EnigmaIOTGatewayClass::getNetworkName</a></div><div class=\"ttdeci\">char * getNetworkName()</div><div class=\"ttdoc\">Gets EnigmaIOT network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00349\">EnigmaIOTGateway.h:349</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_aa1ed5eb542d16a6542d77742a8b62677\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#aa1ed5eb542d16a6542d77742a8b62677\">newNodeConnected</a></div><div class=\"ttdeci\">void newNodeConnected(uint8_t *mac, uint16_t node_id, char *nodeName=nullptr)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00330\">EnigmaIOTGatewayMQTT.cpp:330</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__dummy_8cpp_html_aea3ab74ce495f6e6d8c5916aab3aaa95\"><div class=\"ttname\"><a href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a></div><div class=\"ttdeci\">GatewayOutput_dummy GwOutput</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00029\">GwOutput_dummy.cpp:29</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a86bc66f6ecbde6ad8502d0cefb1a67f0\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">connectionLed</a></div><div class=\"ttdeci\">const int connectionLed</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00069\">EnigmaIOTGatewayMQTT.cpp:69</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a39a2abbde4e46e34c30e418b87e8d0b8\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">GatewayOutput_dummy::begin</a></div><div class=\"ttdeci\">bool begin()</div><div class=\"ttdoc\">Starts output module.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00047\">GwOutput_dummy.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_a80700bb63bd56ebabbb4728aa433fd29\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a></div><div class=\"ttdeci\">#define LED_OFF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00040\">enigmaiot_led_flasher.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_ade106fbc95d08320451d9b901aafd230\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a></div><div class=\"ttdeci\">void nodeDisconnected(uint8_t *mac, gwInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00352\">EnigmaIOTGatewayMQTT.cpp:352</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">ENIGMAIOT</a></div><div class=\"ttdeci\">@ ENIGMAIOT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00070\">EnigmaIOTGateway.h:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_ad151c02682f80a13429640710b842160\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad151c02682f80a13429640710b842160\">wifiManagerStarted</a></div><div class=\"ttdeci\">void wifiManagerStarted()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00167\">EnigmaIOTGatewayMQTT.cpp:167</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a514a694eb41c0cbb43e43c1621313187\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">EnigmaIOTGatewayClass::setRxLed</a></div><div class=\"ttdeci\">void setRxLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is received.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00066\">EnigmaIOTGateway.cpp:66</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a52bbd932eb2a7fac9a3dc1debbc62e5b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">EnigmaIOTGatewayClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00867\">EnigmaIOTGateway.cpp:867</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_accf5025ffbf53e48db9ab7f429c68b1e\"><div class=\"ttname\"><a href=\"classNode.html#accf5025ffbf53e48db9ab7f429c68b1e\">Node::setVersion</a></div><div class=\"ttdeci\">void setVersion(uint8_t major, uint8_t minor, uint8_t incremental)</div><div class=\"ttdoc\">Sets node EnigmaIOT version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00459\">NodeList.h:459</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_aed1b30f3a8b90f8c59e6372f7641ba17\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">connectionLedFlashing</a></div><div class=\"ttdeci\">bool connectionLedFlashing</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00070\">EnigmaIOTGatewayMQTT.cpp:70</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a330863b8dd757d66f990a14298f2faf0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">EnigmaIOTGatewayClass::setTxLed</a></div><div class=\"ttdeci\">void setTxLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00059\">EnigmaIOTGateway.cpp:59</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00060\">EnigmaIOTGatewayMQTT.cpp:60</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a37e5a736d8dfa2198aa9607a61ff1695\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a37e5a736d8dfa2198aa9607a61ff1695\">restartRequestTime</a></div><div class=\"ttdeci\">time_t restartRequestTime</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00073\">EnigmaIOTGatewayMQTT.cpp:73</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_ad5def4e2c7a3e1de387bf16a3f5ad8d7\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">GatewayOutput_dummy::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">Should be called often for module management.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00053\">GwOutput_dummy.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a4e0b35257234db80b4d6771ec42153a3\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4e0b35257234db80b4d6771ec42153a3\">doRestart</a></div><div class=\"ttdeci\">void doRestart()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00184\">EnigmaIOTGatewayMQTT.cpp:184</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a8d52c8107e0bcc9687be62f7e0b388ae\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a8d52c8107e0bcc9687be62f7e0b388ae\">arduinoOTAConfigure</a></div><div class=\"ttdeci\">void arduinoOTAConfigure()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00113\">EnigmaIOTGatewayMQTT.cpp:113</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">USERDATA_GET</a></div><div class=\"ttdeci\">@ USERDATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00070\">NodeList.h:70</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a></div><div class=\"ttdeci\">gatewayPayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00061\">EnigmaIOTGateway.h:61</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a8eed8023d964354b6a2533c9662037e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">EnigmaIOTGatewayClass::getTotalPackets</a></div><div class=\"ttdeci\">uint32_t getTotalPackets(uint8_t *address)</div><div class=\"ttdoc\">Gets total packets sent by node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01470\">EnigmaIOTGateway.cpp:1470</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a1726020bc65217b9ec4d01bb0216a526\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">EnigmaIOTGatewayClass::onNewNode</a></div><div class=\"ttdeci\">void onNewNode(onNewNode_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called every time a node gets connected or reconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00528\">EnigmaIOTGateway.h:528</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a5fd7dd2cafc98a62e99242dd11968a7c\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">processRxData</a></div><div class=\"ttdeci\">void processRxData(uint8_t *mac, uint8_t *buffer, uint8_t length, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char *nodeName=NULL)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00213\">EnigmaIOTGatewayMQTT.cpp:213</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aabb971124202457b2e8a3627217dd213\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">EnigmaIOTGatewayClass::getNodes</a></div><div class=\"ttdeci\">NodeList * getNodes()</div><div class=\"ttdoc\">Gets nodes data structure.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00600\">EnigmaIOTGateway.h:600</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_abcd4985de3ef6fbe1994af85093ca034\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a></div><div class=\"ttdeci\">EnigmaIOTGatewayClass EnigmaIOTGateway</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l02050\">EnigmaIOTGateway.cpp:2050</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_ae57d8fc0470c3b2fd22201eb1e3da9d4\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">GatewayOutput_dummy::newNodeSend</a></div><div class=\"ttdeci\">bool newNodeSend(char *address, uint16_t node_id)</div><div class=\"ttdoc\">Send new node notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00067\">GwOutput_dummy.cpp:67</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a037f8a0b338363b5555f353df30120ca\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">EnigmaIOTGatewayClass::onWiFiManagerStarted</a></div><div class=\"ttdeci\">void onWiFiManagerStarted(simpleEventHandler_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager start.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00386\">EnigmaIOTGateway.h:386</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html\">GwOutput_mqtt.h</a></div><div class=\"ttdoc\">MQTT Gateway output module.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_acecaff385e13802f95e84d1ece4f6322\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">processRxControlData</a></div><div class=\"ttdeci\">void processRxControlData(char *macStr, uint8_t *data, uint8_t length)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00171\">EnigmaIOTGatewayMQTT.cpp:171</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_ad6e69a2870c8f219cc679677af110849\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a></div><div class=\"ttdeci\">#define MACSTR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00083\">helperFunctions.cpp:83</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html\"><div class=\"ttname\"><a href=\"classNode.html\">Node</a></div><div class=\"ttdoc\">Class definition for a single sensor Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00109\">NodeList.h:109</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a500819e2a3f4478adc06a72af00ebb9a\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">GatewayOutput_dummy::outputControlSend</a></div><div class=\"ttdeci\">bool outputControlSend(char *address, uint8_t *data, size_t length)</div><div class=\"ttdoc\">Send control data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00062\">GwOutput_dummy.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_adac909737089f601e9ee3ea0ad521dc7\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">GatewayOutput_dummy::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00043\">GwOutput_dummy.cpp:43</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00382\">EnigmaIOTGatewayMQTT.cpp:382</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a960401606ecc83efdb2e45646619f277\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a960401606ecc83efdb2e45646619f277\">wifiManagerExit</a></div><div class=\"ttdeci\">void wifiManagerExit(boolean status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00163\">EnigmaIOTGatewayMQTT.cpp:163</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00488\">EnigmaIOTGatewayMQTT.cpp:488</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5d5ce4312735008866cf84559bc645c4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">EnigmaIOTGatewayClass::sendDownstream</a></div><div class=\"ttdeci\">bool sendDownstream(uint8_t *mac, const uint8_t *data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t payload_type=RAW, char *nodeName=NULL)</div><div class=\"ttdoc\">Starts a downstream data message transmission.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00364\">EnigmaIOTGateway.cpp:364</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a160b39becf7cdf8700059947eaf6a73b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">EnigmaIOTGatewayClass::getErrorPackets</a></div><div class=\"ttdeci\">uint32_t getErrorPackets(uint8_t *address)</div><div class=\"ttdoc\">Gets number of errored packets of node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01476\">EnigmaIOTGateway.cpp:1476</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">lostmessages</a></div><div class=\"ttdeci\">@ lostmessages</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00024\">GwOutput_generic.h:24</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a450a7c16ead7b3c7b882536b08f30a00\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></div><div class=\"ttdeci\">#define LED_BUILTIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00057\">EnigmaIOTGatewayMQTT.cpp:57</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_ad84b439af2caa4fa2b92ba383b9513a8\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">onDownlinkData</a></div><div class=\"ttdeci\">void onDownlinkData(uint8_t *address, char *nodeName, control_message_type_t msgType, char *data, unsigned int len)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00281\">EnigmaIOTGatewayMQTT.cpp:281</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5c8f994db7043a0e12f9c1d2149e63db\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db\">EnigmaIOTGatewayClass::onGatewayRestartRequested</a></div><div class=\"ttdeci\">void onGatewayRestartRequested(simpleEventHandler_t handler)</div><div class=\"ttdoc\">Defines a function callback that will process a gateway restart request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00565\">EnigmaIOTGateway.h:565</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a6ff09343e5169937476aa04932b76915\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a6ff09343e5169937476aa04932b76915\">startConnectionFlash</a></div><div class=\"ttdeci\">void startConnectionFlash(int period)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00081\">EnigmaIOTGatewayMQTT.cpp:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a77da5264eb27ff8d378a8b279c8b97c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">EnigmaIOTGatewayClass::getPacketsHour</a></div><div class=\"ttdeci\">double getPacketsHour(uint8_t *address)</div><div class=\"ttdoc\">Gets packet rate sent by node that has a specific address, in packets per hour.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01482\">EnigmaIOTGateway.cpp:1482</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a827c388d92651f51d34097598a52a92a\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a827c388d92651f51d34097598a52a92a\">restartRequested</a></div><div class=\"ttdeci\">bool restartRequested</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00072\">EnigmaIOTGatewayMQTT.cpp:72</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_aa2a2fb3ae886350f38e8d6d534278a00\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">GatewayOutput_dummy::outputDataSend</a></div><div class=\"ttdeci\">bool outputDataSend(char *address, char *data, size_t length, GwOutput_data_type_t type=data)</div><div class=\"ttdoc\">Send data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00057\">GwOutput_dummy.cpp:57</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a></div><div class=\"ttdoc\">Library to build a gateway for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></div><div class=\"ttdeci\">gwInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00075\">EnigmaIOTGateway.h:75</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTdebug_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a></div><div class=\"ttdoc\">Auxiliary functions for debugging over Serial.</div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_ac5c28a5827b5a3b34222c13589adeba7\"><div class=\"ttname\"><a href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a></div><div class=\"ttdeci\">enum control_message_type control_message_type_t</div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_af2e697ac60e05813d45ea2c9c9e79c25\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a></div><div class=\"ttdeci\">#define LED_ON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00039\">enigmaiot_led_flasher.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_afb41f49d1291eebbd676d4915ee193d1\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">EnigmaIOTGatewayClass::getPER</a></div><div class=\"ttdeci\">double getPER(uint8_t *address)</div><div class=\"ttdoc\">Gets packet error rate of node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01460\">EnigmaIOTGateway.cpp:1460</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></div><div class=\"ttdeci\">@ CAYENNELPP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00063\">EnigmaIOTGateway.h:63</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayMQTT_8cpp_html_a073dbcb7f5bc4f4b45dc048b55eaff3d\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayMQTT_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">RED_LED</a></div><div class=\"ttdeci\">#define RED_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html#l00061\">EnigmaIOTGatewayMQTT.cpp:61</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ac015f00758aac57a7f7ef2ffe26298b3\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">EnigmaIOTGatewayClass::getNetworkKey</a></div><div class=\"ttdeci\">char * getNetworkKey(bool plain=false)</div><div class=\"ttdoc\">Gets hashed EnigmaIOT network key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00357\">EnigmaIOTGateway.h:357</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a9a6b2d2a88c39a839f414e9ce861c5a0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">EnigmaIOTGatewayClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *networkKey=NULL, bool useDataCounter=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts accepting node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00736\">EnigmaIOTGateway.cpp:736</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a6f9117dde5be2d5c40b41c3b44287dbd\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">GatewayOutput_dummy::setDlCallback</a></div><div class=\"ttdeci\">void setDlCallback(onDlData_t cb)</div><div class=\"ttdoc\">Set data processing function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8h_source.html#l00108\">GwOutput_dummy.h:108</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTGateway_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTGateway.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGateway.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Library to build a gateway for EnigmaIoT system.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>&quot;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n<code>#include &quot;libb64/cdecode.h&quot;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&quot;</code><br />\n<code>#include &lt;cstddef&gt;</code><br />\n<code>#include &lt;cstdint&gt;</code><br />\n<code>#include &lt;regex&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"haBinarySensor_8h_source.html\">haBinarySensor.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"haCover_8h_source.html\">haCover.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"haSensor_8h_source.html\">haSensor.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"haSwitch_8h_source.html\">haSwitch.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>&quot;</code><br />\n</div>\n<p><a href=\"EnigmaIOTGateway_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a568f6925a7027004598c4ad288dd11f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">IKMSG_LEN</a>&#160;&#160;&#160;sizeof(invalidateKey_msg)</td></tr>\n<tr class=\"separator:a568f6925a7027004598c4ad288dd11f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2bd3dd6873079bda9c22994760e817dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a>&#160;&#160;&#160;sizeof(clientHello_msg)</td></tr>\n<tr class=\"separator:a2bd3dd6873079bda9c22994760e817dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab9b144ebcf09f24dd9b85f95e6d118d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a>&#160;&#160;&#160;sizeof(serverHello_msg)</td></tr>\n<tr class=\"separator:ab9b144ebcf09f24dd9b85f95e6d118d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:aab651c53aaa5c935e3cc662399d0f091\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const void *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aab651c53aaa5c935e3cc662399d0f091\">memstr</a> (const void *str, size_t str_size, const char *target, size_t target_size)</td></tr>\n<tr class=\"separator:aab651c53aaa5c935e3cc662399d0f091\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7bb1ee00fcd42cf937a7f6173e2a8647\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a7bb1ee00fcd42cf937a7f6173e2a8647\">buildGetVersion</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</td></tr>\n<tr class=\"separator:a7bb1ee00fcd42cf937a7f6173e2a8647\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a90e4277194db83896803d38387ec0369\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a90e4277194db83896803d38387ec0369\">buildGetSleep</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</td></tr>\n<tr class=\"separator:a90e4277194db83896803d38387ec0369\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ada98ad7b4543b42a5d57f458528bf2d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#ada98ad7b4543b42a5d57f458528bf2d6\">buildSetIdentify</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</td></tr>\n<tr class=\"separator:ada98ad7b4543b42a5d57f458528bf2d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a20d09b7746e96e3f2706652522c121fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a20d09b7746e96e3f2706652522c121fa\">buildGetRSSI</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</td></tr>\n<tr class=\"separator:a20d09b7746e96e3f2706652522c121fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aae12028b7a1857ceb320c435832b09b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aae12028b7a1857ceb320c435832b09b5\">buildGetName</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</td></tr>\n<tr class=\"separator:aae12028b7a1857ceb320c435832b09b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa4eb5b74c01643d49f6b82908e85cc32\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aa4eb5b74c01643d49f6b82908e85cc32\">buildSetName</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</td></tr>\n<tr class=\"separator:aa4eb5b74c01643d49f6b82908e85cc32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a322bbbaa773a92c19c2ec8daee290bc5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a322bbbaa773a92c19c2ec8daee290bc5\">buildSetResetConfig</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</td></tr>\n<tr class=\"separator:a322bbbaa773a92c19c2ec8daee290bc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a000e9c08be2b294e884d9a76d447c7ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a000e9c08be2b294e884d9a76d447c7ca\">buildRestartNode</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</td></tr>\n<tr class=\"separator:a000e9c08be2b294e884d9a76d447c7ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa713b61843ba50cdd12bba2d34d1065e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aa713b61843ba50cdd12bba2d34d1065e\">buildSendBrcastKey</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *key, size_t keyLen)</td></tr>\n<tr class=\"separator:aa713b61843ba50cdd12bba2d34d1065e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aad57d7638e39d6c3a95654f2c1e29e7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f\">getNextNumber</a> (char *&amp;<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;len)</td></tr>\n<tr class=\"separator:aad57d7638e39d6c3a95654f2c1e29e7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad08e6ed992bb54d4ab67627295e7fcf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#ad08e6ed992bb54d4ab67627295e7fcf0\">isHexChar</a> (char c)</td></tr>\n<tr class=\"separator:ad08e6ed992bb54d4ab67627295e7fcf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acc743eebc6ec1a9480db25fa0f59332a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#acc743eebc6ec1a9480db25fa0f59332a\">buildOtaMsg</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</td></tr>\n<tr class=\"separator:acc743eebc6ec1a9480db25fa0f59332a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aab70cbb2f23008e90d70b1d744d3e71c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aab70cbb2f23008e90d70b1d744d3e71c\">buildSetSleep</a> (uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</td></tr>\n<tr class=\"separator:aab70cbb2f23008e90d70b1d744d3e71c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a47616803c1ff494134cb784756035a08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a> [] = &quot;/config.json&quot;</td></tr>\n<tr class=\"separator:a47616803c1ff494134cb784756035a08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b2105a285d12dbe89e9384d2351e1a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">shouldSave</a> = false</td></tr>\n<tr class=\"separator:a5b2105a285d12dbe89e9384d2351e1a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a96db16d874da26d9a7b199c904da0d5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f\">OTAongoing</a> = false</td></tr>\n<tr class=\"separator:a96db16d874da26d9a7b199c904da0d5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a792b28373075cd82cdece3745a65b65a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">lastOTAmsg</a> = 0</td></tr>\n<tr class=\"separator:a792b28373075cd82cdece3745a65b65a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abcd4985de3ef6fbe1994af85093ca034\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a></td></tr>\n<tr class=\"separator:abcd4985de3ef6fbe1994af85093ca034\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Library to build a gateway for EnigmaIoT system. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a2bd3dd6873079bda9c22994760e817dc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2bd3dd6873079bda9c22994760e817dc\">&#9670;&nbsp;</a></span>CHMSG_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define CHMSG_LEN&#160;&#160;&#160;sizeof(clientHello_msg)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"a568f6925a7027004598c4ad288dd11f0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a568f6925a7027004598c4ad288dd11f0\">&#9670;&nbsp;</a></span>IKMSG_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define IKMSG_LEN&#160;&#160;&#160;sizeof(invalidateKey_msg)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"ab9b144ebcf09f24dd9b85f95e6d118d0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab9b144ebcf09f24dd9b85f95e6d118d0\">&#9670;&nbsp;</a></span>SHMSG_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SHMSG_LEN&#160;&#160;&#160;sizeof(serverHello_msg)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"aae12028b7a1857ceb320c435832b09b5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aae12028b7a1857ceb320c435832b09b5\">&#9670;&nbsp;</a></span>buildGetName()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildGetName </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>inputData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>inputLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00125\">125</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a20d09b7746e96e3f2706652522c121fa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a20d09b7746e96e3f2706652522c121fa\">&#9670;&nbsp;</a></span>buildGetRSSI()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildGetRSSI </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>inputData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>inputLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00115\">115</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a90e4277194db83896803d38387ec0369\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a90e4277194db83896803d38387ec0369\">&#9670;&nbsp;</a></span>buildGetSleep()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildGetSleep </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>inputData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>inputLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00095\">95</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a7bb1ee00fcd42cf937a7f6173e2a8647\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7bb1ee00fcd42cf937a7f6173e2a8647\">&#9670;&nbsp;</a></span>buildGetVersion()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildGetVersion </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>inputData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>inputLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00085\">85</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"acc743eebc6ec1a9480db25fa0f59332a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acc743eebc6ec1a9480db25fa0f59332a\">&#9670;&nbsp;</a></span>buildOtaMsg()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildOtaMsg </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>inputData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>inputLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00239\">239</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a000e9c08be2b294e884d9a76d447c7ca\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a000e9c08be2b294e884d9a76d447c7ca\">&#9670;&nbsp;</a></span>buildRestartNode()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildRestartNode </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>inputData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>inputLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00161\">161</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa713b61843ba50cdd12bba2d34d1065e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa713b61843ba50cdd12bba2d34d1065e\">&#9670;&nbsp;</a></span>buildSendBrcastKey()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildSendBrcastKey </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>key</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>keyLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00171\">171</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ada98ad7b4543b42a5d57f458528bf2d6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ada98ad7b4543b42a5d57f458528bf2d6\">&#9670;&nbsp;</a></span>buildSetIdentify()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildSetIdentify </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>inputData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>inputLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00105\">105</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa4eb5b74c01643d49f6b82908e85cc32\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa4eb5b74c01643d49f6b82908e85cc32\">&#9670;&nbsp;</a></span>buildSetName()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildSetName </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>inputData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>inputLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00135\">135</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a322bbbaa773a92c19c2ec8daee290bc5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a322bbbaa773a92c19c2ec8daee290bc5\">&#9670;&nbsp;</a></span>buildSetResetConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildSetResetConfig </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>inputData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>inputLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00151\">151</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aab70cbb2f23008e90d70b1d744d3e71c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aab70cbb2f23008e90d70b1d744d3e71c\">&#9670;&nbsp;</a></span>buildSetSleep()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool buildSetSleep </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>dataLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>inputData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>inputLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00333\">333</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aad57d7638e39d6c3a95654f2c1e29e7f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aad57d7638e39d6c3a95654f2c1e29e7f\">&#9670;&nbsp;</a></span>getNextNumber()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int getNextNumber </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&amp;&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t &amp;&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00184\">184</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad08e6ed992bb54d4ab67627295e7fcf0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad08e6ed992bb54d4ab67627295e7fcf0\">&#9670;&nbsp;</a></span>isHexChar()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool isHexChar </td>\n          <td>(</td>\n          <td class=\"paramtype\">char&#160;</td>\n          <td class=\"paramname\"><em>c</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00230\">230</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aab651c53aaa5c935e3cc662399d0f091\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aab651c53aaa5c935e3cc662399d0f091\">&#9670;&nbsp;</a></span>memstr()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const void* memstr </td>\n          <td>(</td>\n          <td class=\"paramtype\">const void *&#160;</td>\n          <td class=\"paramname\"><em>str</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>str_size</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>target</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>target_size</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00073\">73</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a47616803c1ff494134cb784756035a08\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a47616803c1ff494134cb784756035a08\">&#9670;&nbsp;</a></span>CONFIG_FILE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char CONFIG_FILE[] = &quot;/config.json&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00035\">35</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"abcd4985de3ef6fbe1994af85093ca034\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abcd4985de3ef6fbe1994af85093ca034\">&#9670;&nbsp;</a></span>EnigmaIOTGateway</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> EnigmaIOTGateway</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l02050\">2050</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a792b28373075cd82cdece3745a65b65a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a792b28373075cd82cdece3745a65b65a\">&#9670;&nbsp;</a></span>lastOTAmsg</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t lastOTAmsg = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00039\">39</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a96db16d874da26d9a7b199c904da0d5f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a96db16d874da26d9a7b199c904da0d5f\">&#9670;&nbsp;</a></span>OTAongoing</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool OTAongoing = false</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00038\">38</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5b2105a285d12dbe89e9384d2351e1a9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5b2105a285d12dbe89e9384d2351e1a9\">&#9670;&nbsp;</a></span>shouldSave</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool shouldSave = false</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00037\">37</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTGateway_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTGateway.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGateway.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOTGateway_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &quot;libb64/cdecode.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;Updater.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;esp_wifi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"cryptModule_8h.html\">cryptModule.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;cstdint&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;regex&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haEntity_8h.html\">haEntity.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haBinarySensor_8h.html\">haBinarySensor.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haCover_8h.html\">haCover.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haSensor_8h.html\">haSensor.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haSwitch_8h.html\">haSwitch.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haTrigger_8h.html\">haTrigger.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">   35</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>[] = <span class=\"stringliteral\">&quot;/config.json&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160; </div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">   37</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">shouldSave</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f\">   38</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f\">OTAongoing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">   39</a></span>&#160;time_t <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">lastOTAmsg</a> = 0;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160; </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160; </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">   42</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">EnigmaIOTGatewayClass::doSave</a> (<span class=\"keywordtype\">void</span>) {</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Configuration saving activated&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">shouldSave</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">   47</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">EnigmaIOTGatewayClass::doResetConfig</a> (<span class=\"keywordtype\">void</span>) {</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Configuration reset started&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    <span class=\"keywordflow\">if</span> (FILESYSTEM.remove (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>)){</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Configuration file removed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160; </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">   55</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">EnigmaIOTGatewayClass::getShouldSave</a> () {</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    <span class=\"keywordflow\">return</span> (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">shouldSave</a>);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160; </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">   59</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">EnigmaIOTGatewayClass::setTxLed</a> (uint8_t led, time_t onTime) {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;    this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">txled</a> = led;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">txLedOnTime</a> = onTime;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;    pinMode (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">txled</a>, OUTPUT);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    digitalWrite (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">txled</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">   66</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">EnigmaIOTGatewayClass::setRxLed</a> (uint8_t led, time_t onTime) {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">rxled</a> = led;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">rxLedOnTime</a> = onTime;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    pinMode (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">rxled</a>, OUTPUT);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;    digitalWrite (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">rxled</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160; </div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#aab651c53aaa5c935e3cc662399d0f091\">   73</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aab651c53aaa5c935e3cc662399d0f091\">memstr</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">void</span>* str, <span class=\"keywordtype\">size_t</span> str_size,</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                    <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* target, <span class=\"keywordtype\">size_t</span> target_size) {</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    <span class=\"keyword\">const</span> uint8_t* pointer = (<span class=\"keyword\">const</span> uint8_t*)str;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i != str_size - target_size; ++i) {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        <span class=\"keywordflow\">if</span> (!memcmp (pointer + i, target, target_size)) {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;            <span class=\"keywordflow\">return</span> pointer + i;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#a7bb1ee00fcd42cf937a7f6173e2a8647\">   85</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a7bb1ee00fcd42cf937a7f6173e2a8647\">buildGetVersion</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* inputData, <span class=\"keywordtype\">size_t</span> inputLen) {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Build &#39;Get Version&#39; message from: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (inputData, inputLen));</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    <span class=\"keywordflow\">if</span> (dataLen &lt; 1) {</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">control_message_type::VERSION</a>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    dataLen = 1;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160; </div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#a90e4277194db83896803d38387ec0369\">   95</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a90e4277194db83896803d38387ec0369\">buildGetSleep</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* inputData, <span class=\"keywordtype\">size_t</span> inputLen) {</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Build &#39;Get Sleep&#39; message from: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (inputData, inputLen));</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;    <span class=\"keywordflow\">if</span> (dataLen &lt; 1) {</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">control_message_type::SLEEP_GET</a>;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    dataLen = 1;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160; </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#ada98ad7b4543b42a5d57f458528bf2d6\">  105</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#ada98ad7b4543b42a5d57f458528bf2d6\">buildSetIdentify</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* inputData, <span class=\"keywordtype\">size_t</span> inputLen) {</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Build &#39;Set Identify&#39; message from: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (inputData, inputLen));</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    <span class=\"keywordflow\">if</span> (dataLen &lt; 1) {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">control_message_type::IDENTIFY</a>;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    dataLen = 1;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#a20d09b7746e96e3f2706652522c121fa\">  115</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a20d09b7746e96e3f2706652522c121fa\">buildGetRSSI</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* inputData, <span class=\"keywordtype\">size_t</span> inputLen) {</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Build &#39;Get RSSI&#39; message from: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (inputData, inputLen));</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"keywordflow\">if</span> (dataLen &lt; 1) {</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">control_message_type::RSSI_GET</a>;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    dataLen = 1;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160; </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#aae12028b7a1857ceb320c435832b09b5\">  125</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aae12028b7a1857ceb320c435832b09b5\">buildGetName</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* inputData, <span class=\"keywordtype\">size_t</span> inputLen) {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Build &#39;Get Node Name and Address&#39; message from: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (inputData, inputLen));</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <span class=\"keywordflow\">if</span> (dataLen &lt; 1) {</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">control_message_type::NAME_GET</a>;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    dataLen = 1;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#aa4eb5b74c01643d49f6b82908e85cc32\">  135</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aa4eb5b74c01643d49f6b82908e85cc32\">buildSetName</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* inputData, <span class=\"keywordtype\">size_t</span> inputLen) {</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Build &#39;Set Node Name&#39; message from: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (inputData, inputLen));</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    <span class=\"keywordflow\">if</span> (dataLen &lt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a> + 1) {</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Not enough space to build message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    <span class=\"keywordflow\">if</span> (inputLen &lt; 2 || inputLen &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>) {</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Name too short&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">control_message_type::NAME_SET</a>;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    memcpy (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 1, inputData, inputLen);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    dataLen = 1 + inputLen;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160; </div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#a322bbbaa773a92c19c2ec8daee290bc5\">  151</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a322bbbaa773a92c19c2ec8daee290bc5\">buildSetResetConfig</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* inputData, <span class=\"keywordtype\">size_t</span> inputLen) {</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Build &#39;Reset Config&#39; message from: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (inputData, inputLen));</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;    <span class=\"keywordflow\">if</span> (dataLen &lt; 1) {</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">control_message_type::RESET</a>;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;    dataLen = 1;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160; </div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#a000e9c08be2b294e884d9a76d447c7ca\">  161</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a000e9c08be2b294e884d9a76d447c7ca\">buildRestartNode</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* inputData, <span class=\"keywordtype\">size_t</span> inputLen) {</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Build &#39;Restart Node&#39; message from: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (inputData, inputLen));</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    <span class=\"keywordflow\">if</span> (dataLen &lt; 1) {</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">control_message_type::RESTART_NODE</a>;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;    dataLen = 1;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160; </div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#aa713b61843ba50cdd12bba2d34d1065e\">  171</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aa713b61843ba50cdd12bba2d34d1065e\">buildSendBrcastKey</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* key, <span class=\"keywordtype\">size_t</span> keyLen) {</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Build &#39;Send Broadcast Key&#39; message from: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (key, keyLen));</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;    <span class=\"keywordflow\">if</span> (key &amp;&amp; keyLen == <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>) {</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">control_message_type::BRCAST_KEY</a>;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        memcpy (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 1, key, keyLen);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        dataLen = keyLen + 1;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160; </div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160; </div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f\">  184</a></span>&#160;<span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f\">getNextNumber</a> (<span class=\"keywordtype\">char</span>*&amp; <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; len<span class=\"comment\">/*, char* &amp;position*/</span>) {</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;    <span class=\"keywordtype\">char</span> strNum[10];</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;    <span class=\"keywordtype\">int</span> number;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;    <span class=\"keywordtype\">char</span>* tempData = <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;    <span class=\"keywordtype\">size_t</span> tempLen = len;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160; </div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; 10; i++) {</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        <span class=\"comment\">//DEBUG_DBG (&quot;Processing char: %c&quot;, tempData[i]);</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"keywordflow\">if</span> (tempData[i] != <span class=\"charliteral\">&#39;,&#39;</span>) {</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;            <span class=\"keywordflow\">if</span> (tempData[i] &gt;= <span class=\"charliteral\">&#39;0&#39;</span> &amp;&amp; tempData[i] &lt;= <span class=\"charliteral\">&#39;9&#39;</span>) {</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;                strNum[i] = tempData[i];</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA message format error. Message number not found&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;                number = -1;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;            <span class=\"keywordflow\">if</span> (i == 9) {</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA message format error, separator not found&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;                number = -2;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;            <span class=\"keywordflow\">if</span> (i == 0) {</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA message format error, cannot find a number&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;                number = -3;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;            strNum[i] = <span class=\"charliteral\">&#39;\\0&#39;</span>;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;            <span class=\"comment\">//DEBUG_DBG (&quot;Increment pointer by %d&quot;, i);</span></div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;            tempData += i;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;            tempLen -= i;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;    <span class=\"keywordflow\">if</span> (tempData[0] == <span class=\"charliteral\">&#39;,&#39;</span> &amp;&amp; tempLen &gt; 0) {</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;        tempData++;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        tempLen--;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA message format warning. separator not found&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;    number = atoi (strNum);</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> = tempData;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;    len = tempLen;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Extracted number %d&quot;</span>, number);</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Resulting data %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;    <span class=\"comment\">//DEBUG_WARN (&quot;Resulting length %d&quot;, len);</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;    <span class=\"keywordflow\">return</span> number;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160; </div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#ad08e6ed992bb54d4ab67627295e7fcf0\">  230</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#ad08e6ed992bb54d4ab67627295e7fcf0\">isHexChar</a> (<span class=\"keywordtype\">char</span> c) {</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;    <span class=\"comment\">//DEBUG_DBG (&quot;Is Hex Char %c&quot;, c);</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;    <span class=\"keywordflow\">return</span> (</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        (c &gt;= <span class=\"charliteral\">&#39;0&#39;</span> &amp;&amp; c &lt;= <span class=\"charliteral\">&#39;9&#39;</span>)</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        || (c &gt;= <span class=\"charliteral\">&#39;a&#39;</span> &amp;&amp; c &lt;= <span class=\"charliteral\">&#39;f&#39;</span>)</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        <span class=\"comment\">//|| c &gt;= &#39;A&#39; &amp;&amp; c &lt;= &#39;F&#39;</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;        );</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160; </div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#acc743eebc6ec1a9480db25fa0f59332a\">  239</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#acc743eebc6ec1a9480db25fa0f59332a\">buildOtaMsg</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* inputData, <span class=\"keywordtype\">size_t</span> inputLen) {</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;    <span class=\"keywordtype\">char</span>* payload;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;    <span class=\"keywordtype\">size_t</span> payloadLen;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;    <span class=\"keywordtype\">int</span> number;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;    uint8_t* tempData = <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160; </div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Build &#39;OTA&#39; message from: %s&quot;</span>, inputData);</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160; </div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;    payload = (<span class=\"keywordtype\">char</span>*)inputData;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;    payloadLen = inputLen;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160; </div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;    <span class=\"comment\">// Get message number</span></div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;    number = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f\">getNextNumber</a> (payload, payloadLen);</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;    <span class=\"keywordflow\">if</span> (number &lt; 0) {</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;    uint16_t msgIdx = number;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160; </div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;    tempData[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">control_message_type::OTA</a>;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;    tempData++;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;    memcpy (tempData, &amp;msgIdx, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;    <span class=\"keywordtype\">size_t</span> decodedLen = <span class=\"keyword\">sizeof</span> (uint8_t) + <span class=\"keyword\">sizeof</span> (uint16_t);</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;    tempData += <span class=\"keyword\">sizeof</span> (uint16_t);</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160; </div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;OTA message number %u&quot;</span>, msgIdx);</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;    <span class=\"comment\">//DEBUG_INFO (&quot;Payload len = %u&quot;, payloadLen);</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;    <span class=\"comment\">//DEBUG_INFO (&quot;Payload data: %s&quot;, payload);</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160; </div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;    <span class=\"keywordflow\">if</span> (msgIdx &gt; 0) {</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        decodedLen += base64_decode_chars (payload, payloadLen, (<span class=\"keywordtype\">char</span>*)(<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 1 + <span class=\"keyword\">sizeof</span> (uint16_t)));</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">lastOTAmsg</a> = millis ();</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f\">OTAongoing</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">lastOTAmsg</a> = millis ();</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160; </div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        <span class=\"keywordflow\">if</span> (inputLen &lt; 39) {</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA message format error. Message #0 too short to be a MD5 string&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160; </div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;        <span class=\"comment\">// Get firmware size</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        number = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f\">getNextNumber</a> (payload, payloadLen);</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;        <span class=\"keywordflow\">if</span> (number &lt; 0) {</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        uint32_t fileSize = number;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160; </div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        memcpy (tempData, &amp;fileSize, <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        tempData += <span class=\"keyword\">sizeof</span> (uint32_t);</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;        decodedLen += <span class=\"keyword\">sizeof</span> (uint32_t);</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160; </div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160; </div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;        <span class=\"comment\">// Get number of chunks</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;        number = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f\">getNextNumber</a> (payload, payloadLen);</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        <span class=\"keywordflow\">if</span> (number &lt; 0) {</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        uint16_t msgNum = number;</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160; </div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;        memcpy (tempData, &amp;msgNum, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        tempData += <span class=\"keyword\">sizeof</span> (uint16_t);</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;        decodedLen += <span class=\"keyword\">sizeof</span> (uint16_t);</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160; </div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Number of OTA chunks %u&quot;</span>, msgNum);</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA length = %u bytes&quot;</span>, fileSize);</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        <span class=\"comment\">//DEBUG_INFO (&quot;Payload data: %s&quot;, payload);</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160; </div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;        <span class=\"keywordflow\">if</span> (payloadLen &lt; 32) {</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA message format error. MD5 is too short: %d&quot;</span>, payloadLen);</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160; </div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i &lt; 32; i++) {</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;            <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#ad08e6ed992bb54d4ab67627295e7fcf0\">isHexChar</a> (payload[i])) {</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA message format error. MD5 string has no valid format&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;            *tempData = (uint8_t)payload[i];</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;            tempData++;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;            decodedLen++;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160; </div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Payload data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, decodedLen));</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160; </div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;    <span class=\"keywordflow\">if</span> ((decodedLen) &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>) {</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA message too long. %u bytes.&quot;</span>, decodedLen);</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;    dataLen = decodedLen;</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Payload has %u bytes of data: %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, dataLen));</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160; </div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8cpp.html#aab70cbb2f23008e90d70b1d744d3e71c\">  333</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aab70cbb2f23008e90d70b1d744d3e71c\">buildSetSleep</a> (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span>&amp; dataLen, <span class=\"keyword\">const</span> uint8_t* inputData, <span class=\"keywordtype\">size_t</span> inputLen) {</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Build &#39;Set Sleep&#39; message from: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (inputData, inputLen));</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;    <span class=\"keywordflow\">if</span> (dataLen &lt; 5) {</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Not enough space to build message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160; </div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;    <span class=\"keywordflow\">if</span> (inputLen &lt;= 1) {</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Set sleep time value is empty&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160; </div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i = 0; i &lt; (inputLen - 1); i++) { <span class=\"comment\">// Check if all digits are number</span></div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        <span class=\"keywordflow\">if</span> (inputData[i] &lt; 30 || inputData[i] &gt; <span class=\"charliteral\">&#39;9&#39;</span>) {</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Set sleep time value is not a number on position %d: %d&quot;</span>, i, inputData[i]);</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;    <span class=\"keywordflow\">if</span> (inputData[inputLen - 1] != 0) { <span class=\"comment\">// Array should end with \\0</span></div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Set sleep time value does not end with \\\\0&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160; </div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;    uint32_t sleepTime = atoi ((<span class=\"keywordtype\">char</span>*)inputData);</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160; </div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0] = (uint8_t)<a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">control_message_type::SLEEP_SET</a>;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;    memcpy (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 1, &amp;sleepTime, <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;    dataLen = 5;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160; </div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">  364</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">EnigmaIOTGatewayClass::sendDownstream</a> (uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> controlData, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> encoding, <span class=\"keywordtype\">char</span>* nodeName) {</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;    <span class=\"keywordflow\">if</span> (nodeName) {</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a> = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">getNodeFromName</a> (nodeName);</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>) {</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Message to node %s with address %s&quot;</span>, nodeName, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress ()));</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a> = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">getNodeFromMAC</a> (mac);</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160; </div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;    uint8_t downstreamData[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160; </div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;    <span class=\"keywordflow\">if</span> (len == 0 &amp;&amp; (controlData == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">USERDATA_GET</a> || controlData == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">USERDATA_SET</a>))</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160; </div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Downstream: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Downstream message type 0x%02X&quot;</span>, controlData);</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160; </div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;    <span class=\"keywordtype\">size_t</span> dataLen = <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160; </div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;    <span class=\"keywordflow\">switch</span> (controlData) {</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">control_message_type::VERSION</a>:</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a7bb1ee00fcd42cf937a7f6173e2a8647\">buildGetVersion</a> (downstreamData, dataLen, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building get Version message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Get Version. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">control_message_type::SLEEP_GET</a>:</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a90e4277194db83896803d38387ec0369\">buildGetSleep</a> (downstreamData, dataLen, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building get Sleep message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Get Sleep. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">control_message_type::SLEEP_SET</a>:</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aab70cbb2f23008e90d70b1d744d3e71c\">buildSetSleep</a> (downstreamData, dataLen, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building set Sleep message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Set Sleep. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">control_message_type::OTA</a>:</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#acc743eebc6ec1a9480db25fa0f59332a\">buildOtaMsg</a> (downstreamData, dataLen, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building OTA message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;OTA message. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">control_message_type::IDENTIFY</a>:</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#ada98ad7b4543b42a5d57f458528bf2d6\">buildSetIdentify</a> (downstreamData, dataLen, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building Identify message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Identify message. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">control_message_type::RESET</a>:</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a322bbbaa773a92c19c2ec8daee290bc5\">buildSetResetConfig</a> (downstreamData, dataLen, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building Reset message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Reset Config message. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">control_message_type::RSSI_GET</a>:</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a20d09b7746e96e3f2706652522c121fa\">buildGetRSSI</a> (downstreamData, dataLen, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building get RSSI message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Get RSSI message. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">control_message_type::NAME_GET</a>:</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aae12028b7a1857ceb320c435832b09b5\">buildGetName</a> (downstreamData, dataLen, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building get name message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Get name message. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">control_message_type::NAME_SET</a>:</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aa4eb5b74c01643d49f6b82908e85cc32\">buildSetName</a> (downstreamData, dataLen, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building set name message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Set name message. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">control_message_type::RESTART_NODE</a>:</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a000e9c08be2b294e884d9a76d447c7ca\">buildRestartNode</a> (downstreamData, dataLen, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building restart node message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Restart node message. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">control_message_type::BRCAST_KEY</a>:</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#aa713b61843ba50cdd12bba2d34d1065e\">buildSendBrcastKey</a> (downstreamData, dataLen, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">getBroadcastNode</a> ()-&gt;<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error building broadcast key message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Broadcast key message. Len: %d Data %s&quot;</span>, dataLen, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (downstreamData, dataLen));</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">control_message_type::USERDATA_GET</a>:</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Data message GET&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">control_message_type::USERDATA_SET</a>:</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Data message SET&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160; </div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160; </div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Send downstream&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160; </div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>) {</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;        <span class=\"keywordflow\">if</span> (controlData != <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">control_message_type::USERDATA_GET</a> &amp;&amp; controlData != <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">control_message_type::USERDATA_SET</a>)</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;            <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">downstreamDataMessage</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, downstreamData, dataLen, controlData);</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;        <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (controlData == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">control_message_type::OTA</a>) {</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getSleepy ()) {</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Node must be in non sleepy mode to receive OTA messages&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;            } <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;                <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">downstreamDataMessage</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, controlData);</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;        } <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;            <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">downstreamDataMessage</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, controlData, encoding);</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;        <span class=\"comment\">//char addr[ENIGMAIOT_ADDR_LEN * 3];</span></div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Downlink destination %s not found&quot;</span>, nodeName ? nodeName : <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac));</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160; </div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">  494</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">EnigmaIOTGatewayClass::configWiFiManager</a> () {</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">server</a> = <span class=\"keyword\">new</span> AsyncWebServer (80);</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">dns</a> = <span class=\"keyword\">new</span> DNSServer ();</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a> = <span class=\"keyword\">new</span> AsyncWiFiManager (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">server</a>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">dns</a>);</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160; </div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;    <span class=\"keywordtype\">char</span> networkKey[33] = <span class=\"stringliteral\">&quot;&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;    <span class=\"comment\">//char networkName[NETWORK_NAME_LENGTH] = &quot;&quot;;</span></div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;    <span class=\"keywordtype\">char</span> channel[4];</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;    <span class=\"comment\">//String (gwConfig.channel).toCharArray (channel, 4);</span></div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;    snprintf (channel, 4, <span class=\"stringliteral\">&quot;%u&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">channel</a>);</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160; </div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;    <span class=\"comment\">//AsyncWiFiManager wifiManager (&amp;server, &amp;dns);</span></div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;    AsyncWiFiManagerParameter netNameParam (<span class=\"stringliteral\">&quot;netname&quot;</span>, <span class=\"stringliteral\">&quot;Network Name&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a>, (<span class=\"keywordtype\">int</span>)<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a> - 1, <span class=\"stringliteral\">&quot;required type=\\&quot;text\\&quot; pattern=\\&quot;^[^/\\\\\\\\]+$\\&quot; maxlength=20&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;    AsyncWiFiManagerParameter netKeyParam (<span class=\"stringliteral\">&quot;netkey&quot;</span>, <span class=\"stringliteral\">&quot;NetworkKey&quot;</span>, networkKey, 33, <span class=\"stringliteral\">&quot;required type=\\&quot;password\\&quot; minlength=\\&quot;8\\&quot; maxlength=\\&quot;32\\&quot;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;    AsyncWiFiManagerParameter channelParam (<span class=\"stringliteral\">&quot;channel&quot;</span>, <span class=\"stringliteral\">&quot;WiFi Channel&quot;</span>, channel, 4, <span class=\"stringliteral\">&quot;required type=\\&quot;number\\&quot; min=\\&quot;0\\&quot; max=\\&quot;13\\&quot; step=\\&quot;1\\&quot;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160; </div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;setCustomHeadElement (<span class=\"stringliteral\">&quot;&lt;style&gt;input:invalid {border: 2px dashed red;input:valid{border: 2px solid black;}&lt;/style&gt;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;addParameter (&amp;netKeyParam);</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;addParameter (&amp;channelParam);</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;addParameter (&amp;netNameParam);</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;addParameter (<span class=\"keyword\">new</span> AsyncWiFiManagerParameter (<span class=\"stringliteral\">&quot;&lt;br&gt;&quot;</span>));</div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160; </div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">notifyWiFiManagerStarted</a>) {</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">notifyWiFiManagerStarted</a> ();</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160; </div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;setDebugOutput (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;<span class=\"preprocessor\">#if CONNECT_TO_WIFI_AP != 1</span></div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;setBreakAfterConfig (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;<span class=\"preprocessor\">#endif // CONNECT_TO_WIFI_AP</span></div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;setTryConnectDuringConfigPortal (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;setSaveConfigCallback (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">doSave</a>);</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;setConfigPortalTimeout (150);</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160; </div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;<span class=\"preprocessor\">#if CONNECT_TO_WIFI_AP == 1</span></div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;    <span class=\"keywordtype\">boolean</span> result = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;autoConnect (<span class=\"stringliteral\">&quot;EnigmaIoTGateway&quot;</span>, NULL, 3, 2000);</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;    <span class=\"keywordtype\">boolean</span> result = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;startConfigPortal (<span class=\"stringliteral\">&quot;EnigmaIoTGateway&quot;</span>, NULL);</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;    result = <span class=\"keyword\">true</span>; <span class=\"comment\">// Force true if this should not connect to a WiFi</span></div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;<span class=\"preprocessor\">#endif // CONNECT_TO_WIFI_AP</span></div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160; </div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== Config Portal result ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Network Name: %s&quot;</span>, netNameParam.getValue ());</div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Network Key: %s&quot;</span>, netKeyParam.getValue ());</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Channel: %s&quot;</span>, channelParam.getValue ());</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Status: %s&quot;</span>, result ? <span class=\"stringliteral\">&quot;true&quot;</span> : <span class=\"stringliteral\">&quot;false&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Save config: %s&quot;</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">shouldSave</a> ? <span class=\"stringliteral\">&quot;yes&quot;</span> : <span class=\"stringliteral\">&quot;no&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;    <span class=\"keywordflow\">if</span> (result) {</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">shouldSave</a>) {</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;            <span class=\"keywordtype\">bool</span> regexResult;</div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;            std::regex networkNameRegex (<span class=\"stringliteral\">&quot;^[^/\\\\\\\\]+$&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;            regexResult = std::regex_match (netNameParam.getValue (), networkNameRegex);</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;            regexResult = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;            <span class=\"keywordflow\">if</span> (regexResult) {</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;                strncpy (this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a>, netNameParam.getValue (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a> - 1);</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;Network name: %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a>);</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Network name parameter error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;                result = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160; </div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;            std::regex netKeyRegex (<span class=\"stringliteral\">&quot;^.{8,32}$&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;            regexResult = std::regex_match (netKeyParam.getValue (), netKeyRegex);</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;            <span class=\"keywordflow\">if</span> (regexResult) {</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;                uint8_t keySize = netKeyParam.getValueLength ();</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;                <span class=\"keywordflow\">if</span> (keySize &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>)</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;                    keySize = <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;                <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* netKey = netKeyParam.getValue ();</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;                <span class=\"keywordflow\">if</span> (netKey &amp;&amp; (netKey[0] != <span class=\"charliteral\">&#39;\\0&#39;</span>)) {<span class=\"comment\">// If password is empty, keep the old one</span></div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;                    memset (this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, 0, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;                    memcpy (this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, netKey, keySize);</div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;                    memcpy (this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">plainNetKey</a>, netKey, keySize);</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;                    <a class=\"code\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a> (this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;                    DEBUG_DBG (<span class=\"stringliteral\">&quot;Raw network Key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;                } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;                    DEBUG_INFO (<span class=\"stringliteral\">&quot;Network key password field empty. Keeping the old one&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Network key parameter error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;                result = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160; </div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;            std::regex channelRegex (<span class=\"stringliteral\">&quot;^([0-9]|[0-1][0-3])$&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;            regexResult = std::regex_match (channelParam.getValue (), channelRegex);</div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;            <span class=\"keywordflow\">if</span> (regexResult) {</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;                this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">channel</a> = atoi (channelParam.getValue ());</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;WiFi ESP-NOW channel: %d&quot;</span>, this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">channel</a>);</div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Network name parameter error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;                result = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Configuration does not need to be saved&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;WiFi connection unsuccessful. Restarting&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;        ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160; </div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">notifyWiFiManagerExit</a>) {</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">notifyWiFiManagerExit</a> (result);</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160; </div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;    <span class=\"keyword\">delete</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">server</a>);</div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;    <span class=\"keyword\">delete</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">dns</a>);</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;    <span class=\"keyword\">delete</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>);</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160; </div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;    <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160; </div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">  611</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">EnigmaIOTGatewayClass::loadFlashData</a> () {</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;    <span class=\"comment\">//FILESYSTEM.remove (CONFIG_FILE); // Only for testing</span></div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;    <span class=\"keywordtype\">bool</span> json_correct = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160; </div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;    <span class=\"keywordflow\">if</span> (FILESYSTEM.exists (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>)) {</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160; </div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Opening %s file&quot;</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;        File configFile = FILESYSTEM.open (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>, <span class=\"stringliteral\">&quot;r&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;        <span class=\"keywordflow\">if</span> (configFile) {</div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;            <span class=\"comment\">//size_t size = configFile.size ();</span></div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;%s opened. %u bytes&quot;</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>, configFile.size ());</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160; </div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;            <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (4) + 160;</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;            DynamicJsonDocument doc (capacity);</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160; </div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;            DeserializationError error = deserializeJson (doc, configFile);</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;            <span class=\"keywordflow\">if</span> (error) {</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Failed to parse file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;JSON file parsed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160; </div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;            configFile.close ();</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160; </div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;            <span class=\"keywordflow\">if</span> (doc.containsKey (<span class=\"stringliteral\">&quot;type&quot;</span>)) {</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;                <span class=\"keywordflow\">if</span> (!strcmp (<span class=\"stringliteral\">&quot;gw&quot;</span>, doc[<span class=\"stringliteral\">&quot;type&quot;</span>])) {</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160; </div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;                    <span class=\"keywordflow\">if</span> (doc.containsKey (<span class=\"stringliteral\">&quot;channel&quot;</span>) &amp;&amp; doc.containsKey (<span class=\"stringliteral\">&quot;networkKey&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;                        &amp;&amp; doc.containsKey (<span class=\"stringliteral\">&quot;networkName&quot;</span>)) {</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;                        json_correct = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;                } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;                    FILESYSTEM.remove (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;                    DEBUG_ERROR (<span class=\"stringliteral\">&quot;Wrong configuration. Removing file %s&quot;</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;                    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160; </div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">channel</a> = doc[<span class=\"stringliteral\">&quot;channel&quot;</span>].as&lt;<span class=\"keywordtype\">int</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;            strncpy ((<span class=\"keywordtype\">char</span>*)<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, doc[<span class=\"stringliteral\">&quot;networkKey&quot;</span>] | <span class=\"stringliteral\">&quot;&quot;</span>, sizeof (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>));</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;            strncpy (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a>, doc[<span class=\"stringliteral\">&quot;networkName&quot;</span>] | <span class=\"stringliteral\">&quot;&quot;</span>, sizeof (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a>));</div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160; </div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;            <span class=\"keywordflow\">if</span> (json_correct) {</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;                DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Gateway configuration successfuly read&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;==== EnigmaIOT Gateway Configuration ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Network name: %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a>);</div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;WiFi channel: %u&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">channel</a>);</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Network key: %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>);</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;            strncpy (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">plainNetKey</a>, (<span class=\"keywordtype\">char</span>*)<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;            <a class=\"code\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Raw Network key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160; </div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= DBG</span></div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;            <span class=\"keywordtype\">char</span>* output;</div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;            <span class=\"keywordtype\">size_t</span> json_len = measureJsonPretty (doc) + 1;</div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;            output = (<span class=\"keywordtype\">char</span>*)malloc (json_len);</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;            serializeJsonPretty (doc, output, json_len);</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160; </div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;JSON file %s&quot;</span>, output);</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;            free (output);</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160; </div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error opening %s&quot;</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;%s do not exist&quot;</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;        <span class=\"comment\">//FILESYSTEM.format (); // Testing only</span></div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;        <span class=\"comment\">//WiFi.begin (&quot;0&quot;, &quot;0&quot;); // Delete WiFi credentials</span></div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;        <span class=\"comment\">//DEBUG_WARN (&quot;Dummy STA config loaded&quot;);</span></div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;        <span class=\"comment\">//return false;</span></div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160; </div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;    <span class=\"keywordflow\">if</span> (!json_correct) {</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;        WiFi.begin (<span class=\"stringliteral\">&quot;0&quot;</span>, <span class=\"stringliteral\">&quot;0&quot;</span>); <span class=\"comment\">// Delete WiFi credentials</span></div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Dummy STA config loaded&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;    <span class=\"keywordflow\">return</span> json_correct;</div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160; </div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">  692</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">EnigmaIOTGatewayClass::saveFlashData</a> () {</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;    File configFile = FILESYSTEM.open (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>, <span class=\"stringliteral\">&quot;w&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;    <span class=\"keywordflow\">if</span> (!configFile) {</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;failed to open config file %s for writing&quot;</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\">  696</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160; </div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (4) + 160;</div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;    DynamicJsonDocument doc (capacity);</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160; </div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;    doc[<span class=\"stringliteral\">&quot;type&quot;</span>] = <span class=\"stringliteral\">&quot;gw&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;    doc[<span class=\"stringliteral\">&quot;channel&quot;</span>] = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">channel</a>;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;    doc[<span class=\"stringliteral\">&quot;networkKey&quot;</span>] = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">plainNetKey</a>;</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;    doc[<span class=\"stringliteral\">&quot;networkName&quot;</span>] = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a>;</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160; </div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;    <span class=\"keywordflow\">if</span> (serializeJson (doc, configFile) == 0) {</div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Failed to write to file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;        configFile.close ();</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        <span class=\"comment\">//FILESYSTEM.remove (CONFIG_FILE); // Testing only</span></div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160; </div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= DBG</span></div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;    <span class=\"keywordtype\">char</span>* output;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;    <span class=\"keywordtype\">size_t</span> json_len = measureJsonPretty (doc) + 1;</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;    output = (<span class=\"keywordtype\">char</span>*)malloc (json_len);</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;    serializeJsonPretty (doc, output, json_len);</div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160; </div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;\\n%s&quot;</span>, output);</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160; </div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;    free (output);</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160; </div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;    configFile.flush ();</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;    <span class=\"comment\">//size_t size = configFile.size ();</span></div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160; </div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;    configFile.close ();</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160; </div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;    <span class=\"comment\">//memset (networkKey, 0, KEY_LENGTH);</span></div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160; </div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Gateway configuration saved to flash. %u bytes&quot;</span>, configFile.size ());</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160; </div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">  736</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">EnigmaIOTGatewayClass::begin</a> (<a class=\"code\" href=\"classComms__halClass.html\">Comms_halClass</a>* comm, uint8_t* networkKey, <span class=\"keywordtype\">bool</span> useDataCounter) {</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;    this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a> = <span class=\"keyword\">new</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt;msg_queue_item_t&gt;</a> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a2909f9f6e8ecc4dfd6947911e4eb2d96\">MAX_INPUT_QUEUE_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;    this-&gt;comm = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>;</div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;    this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a> = useDataCounter;</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160; </div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;    uint8_t broadcastKey[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">initBroadcastNode</a> ();</div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;    <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a> (broadcastKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>); <span class=\"comment\">// Generate random broadcast key</span></div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Broadcast key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (broadcastKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">getBroadcastNode</a> ()-&gt;<a class=\"code\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">setEncryptionKey</a> (broadcastKey);</div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160; </div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;    <span class=\"keywordflow\">if</span> (networkKey) {</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;        memcpy (this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, networkKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;        strncpy (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">plainNetKey</a>, (<span class=\"keywordtype\">char</span>*)networkKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;        <a class=\"code\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a> (this-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;        <span class=\"keywordflow\">if</span> (!FILESYSTEM.begin ()) {</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error mounting flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;            FILESYSTEM.format ();</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Formatted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;            ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;            <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">loadFlashData</a> ()) { <span class=\"comment\">// Load from flash</span></div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">configWiFiManager</a> ()) {</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">shouldSave</a>) {</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;                    DEBUG_DBG (<span class=\"stringliteral\">&quot;Got configuration. Storing&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;                    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">saveFlashData</a> ()) {</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;                        DEBUG_DBG (<span class=\"stringliteral\">&quot;Network Key stored on flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;                    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;                        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;                    ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;                } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;                    DEBUG_INFO (<span class=\"stringliteral\">&quot;Configuration has not to be saved&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Configuration error. Restarting&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;                ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\">  775</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Configuration loaded from flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160; </div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;        <a class=\"code\" href=\"helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3\">initWiFi</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">channel</a>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">plainNetKey</a>, <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">COMM_GATEWAY</a>);</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">begin</a> (NULL, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">channel</a>, <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">COMM_GATEWAY</a>);</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">onDataRcvd</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">rx_cb</a>);</div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">onDataSent</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">tx_cb</a>);</div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160; </div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;<span class=\"preprocessor\">#if ENABLE_REST_API</span></div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;GW API started&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;        <a class=\"code\" href=\"GatewayAPI_8cpp.html#a69f499591af56509cd3540f09207f091\">GwAPI</a>.<a class=\"code\" href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">begin</a> ();</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160; </div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">  792</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">EnigmaIOTGatewayClass::addInputMsgQueue</a> (<span class=\"keyword\">const</span> uint8_t* addr, <span class=\"keyword\">const</span> uint8_t* msg, <span class=\"keywordtype\">size_t</span> len) {</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;    <a class=\"code\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a> message;</div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160; </div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;    message.<a class=\"code\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">len</a> = len;</div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;    memcpy (message.<a class=\"code\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">data</a>, msg, len);</div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;    memcpy (message.<a class=\"code\" href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">addr</a>, addr, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>);</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160; </div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;    portENTER_CRITICAL (&amp;myMutex);</div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;    noInterrupts ();</div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">push</a> (&amp;message);</div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;    <span class=\"comment\">//char macstr[ENIGMAIOT_ADDR_LEN * 3];</span></div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Message 0x%02X added from %s. Size: %d&quot;</span>, message.<a class=\"code\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">data</a>[0], <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (message.<a class=\"code\" href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">addr</a>), <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> ());</div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\">  808</span>&#160;    portEXIT_CRITICAL (&amp;myMutex);</div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;    interrupts ();</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\">  813</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\">  814</span>&#160; </div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">  815</a></span>&#160;<a class=\"code\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">EnigmaIOTGatewayClass::getInputMsgQueue</a> (<a class=\"code\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>* buffer) {</div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160; </div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;    <a class=\"code\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>* message;</div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;<span class=\"preprocessor\">#ifdef esp32</span></div>\n<div class=\"line\"><a name=\"l00819\"></a><span class=\"lineno\">  819</span>&#160;    portENTER_CRITICAL (&amp;myMutex);</div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\">  820</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00821\"></a><span class=\"lineno\">  821</span>&#160;    noInterrupts ();</div>\n<div class=\"line\"><a name=\"l00822\"></a><span class=\"lineno\">  822</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\">  823</span>&#160;    message = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">front</a> ();</div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;    <span class=\"keywordflow\">if</span> (message) {</div>\n<div class=\"line\"><a name=\"l00825\"></a><span class=\"lineno\">  825</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;EnigmaIOT message got from queue. Size: %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> ());</div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\">  826</span>&#160;        memcpy (buffer-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">data</a>, message-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">data</a>, message-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">len</a>);</div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;        memcpy (buffer-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">addr</a>, message-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">addr</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>);</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;        buffer-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">len</a> = message-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">len</a>;</div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">popInputMsgQueue</a> ();</div>\n<div class=\"line\"><a name=\"l00830\"></a><span class=\"lineno\">  830</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;<span class=\"preprocessor\">#ifdef esp32</span></div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;    portEXIT_CRITICAL (&amp;myMutex);</div>\n<div class=\"line\"><a name=\"l00833\"></a><span class=\"lineno\">  833</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\">  834</span>&#160;    interrupts ();</div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00836\"></a><span class=\"lineno\">  836</span>&#160;    <span class=\"keywordflow\">if</span> (message) {</div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\">  837</span>&#160;        <span class=\"keywordflow\">return</span> buffer;</div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;        <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00840\"></a><span class=\"lineno\">  840</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00841\"></a><span class=\"lineno\">  841</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160; </div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">  843</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">EnigmaIOTGatewayClass::popInputMsgQueue</a> () {</div>\n<div class=\"line\"><a name=\"l00844\"></a><span class=\"lineno\">  844</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">pop</a> ()) {</div>\n<div class=\"line\"><a name=\"l00845\"></a><span class=\"lineno\">  845</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;EnigmaIOT message pop. Size %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> ());</div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00847\"></a><span class=\"lineno\">  847</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00848\"></a><span class=\"lineno\">  848</span>&#160; </div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">  849</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">EnigmaIOTGatewayClass::rx_cb</a> (uint8_t* mac_addr, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160; </div>\n<div class=\"line\"><a name=\"l00851\"></a><span class=\"lineno\">  851</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">addInputMsgQueue</a> (mac_addr, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\">  852</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160; </div>\n<div class=\"line\"><a name=\"l00854\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">  854</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">EnigmaIOTGatewayClass::tx_cb</a> (uint8_t* mac_addr, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">getStatus</a> (mac_addr, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00857\"></a><span class=\"lineno\">  857</span>&#160; </div>\n<div class=\"line\"><a name=\"l00858\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">  858</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">EnigmaIOTGatewayClass::getStatus</a> (uint8_t* mac_addr, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;    <span class=\"comment\">//char buffer[ENIGMAIOT_ADDR_LEN * 3];</span></div>\n<div class=\"line\"><a name=\"l00860\"></a><span class=\"lineno\">  860</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00861\"></a><span class=\"lineno\">  861</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;SENDStatus %s. Peer %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> == 0 ? <span class=\"stringliteral\">&quot;OK&quot;</span> : <span class=\"stringliteral\">&quot;ERROR&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac_addr));</div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;SENDStatus %d. Peer %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac_addr));</div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\">  864</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00865\"></a><span class=\"lineno\">  865</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160; </div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">  867</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">EnigmaIOTGatewayClass::handle</a> () {</div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;    <span class=\"comment\">//#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00869\"></a><span class=\"lineno\">  869</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> rxOntime;</div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> txOntime;</div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160; </div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">flashRx</a>) {</div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;EnigmaIOTGatewayClass::flashrx&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00874\"></a><span class=\"lineno\">  874</span>&#160; </div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">rxled</a> == <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">txled</a>) {</div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">flashTx</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00878\"></a><span class=\"lineno\">  878</span>&#160;            rxOntime = millis ();</div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;            digitalWrite (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">rxled</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a>);</div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">flashRx</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00882\"></a><span class=\"lineno\">  882</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160; </div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">rxled</a> != <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">txled</a>) {</div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;        <span class=\"keywordflow\">if</span> ( millis () - rxOntime &gt; <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">rxLedOnTime</a>) {</div>\n<div class=\"line\"><a name=\"l00886\"></a><span class=\"lineno\">  886</span>&#160;            digitalWrite (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">rxled</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>);</div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160; </div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">flashTx</a>) {</div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;        txOntime = millis ();</div>\n<div class=\"line\"><a name=\"l00892\"></a><span class=\"lineno\">  892</span>&#160;        digitalWrite (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">txled</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a>);</div>\n<div class=\"line\"><a name=\"l00893\"></a><span class=\"lineno\">  893</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">flashTx</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160; </div>\n<div class=\"line\"><a name=\"l00896\"></a><span class=\"lineno\">  896</span>&#160;    <span class=\"keywordflow\">if</span> ( millis () - txOntime &gt; <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">txLedOnTime</a>) {</div>\n<div class=\"line\"><a name=\"l00897\"></a><span class=\"lineno\">  897</span>&#160;        digitalWrite (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">txled</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>);</div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;    <span class=\"comment\">//#endif</span></div>\n<div class=\"line\"><a name=\"l00900\"></a><span class=\"lineno\">  900</span>&#160; </div>\n<div class=\"line\"><a name=\"l00901\"></a><span class=\"lineno\">  901</span>&#160;        <span class=\"comment\">// Clean up dead nodes</span></div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;        <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a> = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">getNodeFromID</a> (i);</div>\n<div class=\"line\"><a name=\"l00904\"></a><span class=\"lineno\">  904</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011\">MAX_NODE_INACTIVITY</a> &gt; 0) {</div>\n<div class=\"line\"><a name=\"l00905\"></a><span class=\"lineno\">  905</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;isRegistered () &amp;&amp; millis () - <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastMessageTime () &gt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011\">MAX_NODE_INACTIVITY</a>) {</div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;                <span class=\"comment\">// TODO. Trigger node expired event</span></div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;reset ();</div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00909\"></a><span class=\"lineno\">  909</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00910\"></a><span class=\"lineno\">  910</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160; </div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f\">OTAongoing</a>) {</div>\n<div class=\"line\"><a name=\"l00913\"></a><span class=\"lineno\">  913</span>&#160;        time_t currentTime = millis ();</div>\n<div class=\"line\"><a name=\"l00914\"></a><span class=\"lineno\">  914</span>&#160;        <span class=\"keywordflow\">if</span> ((currentTime - <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">lastOTAmsg</a>) &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9\">OTA_GW_TIMEOUT</a>) {</div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;            <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f\">OTAongoing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA ongoing = false&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00917\"></a><span class=\"lineno\">  917</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;millis() = %u, lastOTAmsg = %u, diff = %d&quot;</span>, currentTime, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">lastOTAmsg</a>, currentTime - <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">lastOTAmsg</a>);</div>\n<div class=\"line\"><a name=\"l00918\"></a><span class=\"lineno\">  918</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160; </div>\n<div class=\"line\"><a name=\"l00921\"></a><span class=\"lineno\">  921</span>&#160;    <span class=\"comment\">// Check input EnigmaIOT message queue</span></div>\n<div class=\"line\"><a name=\"l00922\"></a><span class=\"lineno\">  922</span>&#160; </div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">empty</a> ()) {</div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;        <a class=\"code\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>* message;</div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160; </div>\n<div class=\"line\"><a name=\"l00926\"></a><span class=\"lineno\">  926</span>&#160;        message = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">getInputMsgQueue</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74\">tempBuffer</a>);</div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160; </div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;        <span class=\"keywordflow\">if</span> (message) {</div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;EnigmaIOT input message from queue. MsgType: 0x%02X&quot;</span>, message-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">data</a>[0]);</div>\n<div class=\"line\"><a name=\"l00930\"></a><span class=\"lineno\">  930</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">manageMessage</a> (message-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">addr</a>, message-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">data</a>, message-&gt;<a class=\"code\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">len</a>);</div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00934\"></a><span class=\"lineno\">  934</span>&#160; </div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">  935</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">EnigmaIOTGatewayClass::manageMessage</a> (<span class=\"keyword\">const</span> uint8_t* mac, uint8_t* buf, uint8_t count) {</div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>;</div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160; </div>\n<div class=\"line\"><a name=\"l00938\"></a><span class=\"lineno\">  938</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Reveived message. Origin MAC: %02X:%02X:%02X:%02X:%02X:%02X&quot;</span>, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);</div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Received data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, count));</div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160; </div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;    <span class=\"keywordflow\">if</span> (count &lt;= 1) {</div>\n<div class=\"line\"><a name=\"l00942\"></a><span class=\"lineno\">  942</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Empty message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\">  943</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00945\"></a><span class=\"lineno\">  945</span>&#160; </div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\">  946</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a> = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">getNewNode</a> (mac);</div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160; </div>\n<div class=\"line\"><a name=\"l00948\"></a><span class=\"lineno\">  948</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">flashRx</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160; </div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;    <span class=\"keywordtype\">int</span> espNowError = 0; <span class=\"comment\">// May I remove this??</span></div>\n<div class=\"line\"><a name=\"l00951\"></a><span class=\"lineno\">  951</span>&#160; </div>\n<div class=\"line\"><a name=\"l00952\"></a><span class=\"lineno\">  952</span>&#160;    <span class=\"keywordflow\">switch</span> (buf[0]) {</div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\">CLIENT_HELLO</a>:</div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;        <span class=\"comment\">// TODO: Do no accept new Client Hello if registration is on process on any node?? Possible DoS Attack??</span></div>\n<div class=\"line\"><a name=\"l00955\"></a><span class=\"lineno\">  955</span>&#160;        <span class=\"comment\">// May cause undesired behaviour in case a node registration message is lost</span></div>\n<div class=\"line\"><a name=\"l00956\"></a><span class=\"lineno\">  956</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- CLIENT HELLO&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;        <span class=\"comment\">//if (!OTAongoing) {</span></div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;        <span class=\"keywordflow\">if</span> (espNowError == 0) {</div>\n<div class=\"line\"><a name=\"l00959\"></a><span class=\"lineno\">  959</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\">processClientHello</a> (mac, buf, count, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)) {</div>\n<div class=\"line\"><a name=\"l00960\"></a><span class=\"lineno\">  960</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\">serverHello</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">myPublicKey</a>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)) {</div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;                    DEBUG_INFO (<span class=\"stringliteral\">&quot;Server Hello sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setStatus (<a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>);</div>\n<div class=\"line\"><a name=\"l00963\"></a><span class=\"lineno\">  963</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setKeyValidFrom (millis ());</div>\n<div class=\"line\"><a name=\"l00964\"></a><span class=\"lineno\">  964</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastMessageCounter (0);</div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastControlCounter (0);</div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastDownlinkMsgCounter (0);</div>\n<div class=\"line\"><a name=\"l00967\"></a><span class=\"lineno\">  967</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastMessageTime ();</div>\n<div class=\"line\"><a name=\"l00968\"></a><span class=\"lineno\">  968</span>&#160;                    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">notifyNewNode</a>) {</div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;                        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">notifyNewNode</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeId (), NULL);</div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= INFO</span></div>\n<div class=\"line\"><a name=\"l00972\"></a><span class=\"lineno\">  972</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">printToSerial</a> (&amp;<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7\">DEBUG_ESP_PORT</a>);</div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\">  973</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;                    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;broadcastIsEnabled ()) {</div>\n<div class=\"line\"><a name=\"l00975\"></a><span class=\"lineno\">  975</span>&#160;                        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\">sendBroadcastKey</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)) {</div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\">  976</span>&#160;                            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending broadcast key to node&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;                        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;                            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setBroadcastKeyRequested (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00979\"></a><span class=\"lineno\">  979</span>&#160;                            DEBUG_INFO (<span class=\"stringliteral\">&quot;Broadcast key sent to node&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;                } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00983\"></a><span class=\"lineno\">  983</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;reset ();</div>\n<div class=\"line\"><a name=\"l00984\"></a><span class=\"lineno\">  984</span>&#160;                    DEBUG_INFO (<span class=\"stringliteral\">&quot;Error sending Server Hello&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\">  985</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160; </div>\n<div class=\"line\"><a name=\"l00987\"></a><span class=\"lineno\">  987</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00988\"></a><span class=\"lineno\">  988</span>&#160;                <span class=\"comment\">// Ignore message in case of error</span></div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;                <span class=\"comment\">//invalidateKey (node, WRONG_CLIENT_HELLO);</span></div>\n<div class=\"line\"><a name=\"l00990\"></a><span class=\"lineno\">  990</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;reset ();</div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\">  991</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error processing client hello&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00992\"></a><span class=\"lineno\">  992</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00993\"></a><span class=\"lineno\">  993</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\">  994</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error adding peer %d&quot;</span>, espNowError);</div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00996\"></a><span class=\"lineno\">  996</span>&#160;        <span class=\"comment\">//} else {</span></div>\n<div class=\"line\"><a name=\"l00997\"></a><span class=\"lineno\">  997</span>&#160;        <span class=\"comment\">//  DEBUG_WARN (&quot;OTA ongoing. Registration ignored&quot;);</span></div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;        <span class=\"comment\">//}</span></div>\n<div class=\"line\"><a name=\"l00999\"></a><span class=\"lineno\">  999</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l01000\"></a><span class=\"lineno\"> 1000</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\">CONTROL_DATA</a>:</div>\n<div class=\"line\"><a name=\"l01001\"></a><span class=\"lineno\"> 1001</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- CONTROL MESSAGE&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01002\"></a><span class=\"lineno\"> 1002</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getStatus () == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"> 1003</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\">processControlMessage</a> (mac, buf, count, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)) {</div>\n<div class=\"line\"><a name=\"l01004\"></a><span class=\"lineno\"> 1004</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Control message OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01005\"></a><span class=\"lineno\"> 1005</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">MAX_KEY_VALIDITY</a> &gt; 0) {</div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"> 1006</span>&#160;                    <span class=\"keywordflow\">if</span> (millis () - <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getKeyValidFrom () &gt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">MAX_KEY_VALIDITY</a>) {</div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;                        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a>);</div>\n<div class=\"line\"><a name=\"l01008\"></a><span class=\"lineno\"> 1008</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l01009\"></a><span class=\"lineno\"> 1009</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01011\"></a><span class=\"lineno\"> 1011</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d\">DISCONNECT_ON_DATA_ERROR</a>) {</div>\n<div class=\"line\"><a name=\"l01012\"></a><span class=\"lineno\"> 1012</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\">WRONG_DATA</a>);</div>\n<div class=\"line\"><a name=\"l01013\"></a><span class=\"lineno\"> 1013</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l01014\"></a><span class=\"lineno\"> 1014</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Control message not OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"> 1015</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01016\"></a><span class=\"lineno\"> 1016</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01017\"></a><span class=\"lineno\"> 1017</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\">UNREGISTERED_NODE</a>);</div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"> 1018</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l01020\"></a><span class=\"lineno\"> 1020</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a>:</div>\n<div class=\"line\"><a name=\"l01021\"></a><span class=\"lineno\"> 1021</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\">UNENCRYPTED_NODE_DATA</a>:</div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l01023\"></a><span class=\"lineno\"> 1023</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a>:</div>\n<div class=\"line\"><a name=\"l01024\"></a><span class=\"lineno\"> 1024</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l01025\"></a><span class=\"lineno\"> 1025</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l01026\"></a><span class=\"lineno\"> 1026</span>&#160;        <span class=\"keywordtype\">bool</span> encrypted = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"> 1027</span>&#160;        <span class=\"keywordflow\">if</span> (buf[0] == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a>) {</div>\n<div class=\"line\"><a name=\"l01028\"></a><span class=\"lineno\"> 1028</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- ENCRYPTED DATA&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01029\"></a><span class=\"lineno\"> 1029</span>&#160;            encrypted = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"> 1030</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l01032\"></a><span class=\"lineno\"> 1032</span>&#160;        <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (buf[0] == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a>) {</div>\n<div class=\"line\"><a name=\"l01033\"></a><span class=\"lineno\"> 1033</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- HA_DISCOVERY_MESSAGE&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;            encrypted = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01036\"></a><span class=\"lineno\"> 1036</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY </span></div>\n<div class=\"line\"><a name=\"l01037\"></a><span class=\"lineno\"> 1037</span>&#160;        <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- UNENCRYPTED DATA&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;            encrypted = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;        <span class=\"comment\">//if (!OTAongoing) {</span></div>\n<div class=\"line\"><a name=\"l01042\"></a><span class=\"lineno\"> 1042</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getStatus () == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;            <span class=\"keywordtype\">float</span> packetsHour = (float)1 / ((millis () - <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastMessageTime ()) / (float)3600000);</div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;updatePacketsRate (packetsHour);</div>\n<div class=\"line\"><a name=\"l01045\"></a><span class=\"lineno\"> 1045</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\">processDataMessage</a> (mac, buf, count, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, encrypted)) {</div>\n<div class=\"line\"><a name=\"l01046\"></a><span class=\"lineno\"> 1046</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastMessageTime ();</div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Data OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;                DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Key valid from %lu ms&quot;</span>, millis () - <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getKeyValidFrom ());</div>\n<div class=\"line\"><a name=\"l01049\"></a><span class=\"lineno\"> 1049</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">MAX_KEY_VALIDITY</a> &gt; 0) {</div>\n<div class=\"line\"><a name=\"l01050\"></a><span class=\"lineno\"> 1050</span>&#160;                    <span class=\"keywordflow\">if</span> (millis () - <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getKeyValidFrom () &gt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">MAX_KEY_VALIDITY</a>) {</div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;                        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a>);</div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l01053\"></a><span class=\"lineno\"> 1053</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l01054\"></a><span class=\"lineno\"> 1054</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d\">DISCONNECT_ON_DATA_ERROR</a>) {</div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\">WRONG_DATA</a>);</div>\n<div class=\"line\"><a name=\"l01057\"></a><span class=\"lineno\"> 1057</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l01058\"></a><span class=\"lineno\"> 1058</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Data not OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01061\"></a><span class=\"lineno\"> 1061</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\">UNREGISTERED_NODE</a>);</div>\n<div class=\"line\"><a name=\"l01062\"></a><span class=\"lineno\"> 1062</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;reset ();</div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;        <span class=\"comment\">//} else {</span></div>\n<div class=\"line\"><a name=\"l01065\"></a><span class=\"lineno\"> 1065</span>&#160;        <span class=\"comment\">//  DEBUG_WARN (&quot;Data ignored. OTA ongoing&quot;);</span></div>\n<div class=\"line\"><a name=\"l01066\"></a><span class=\"lineno\"> 1066</span>&#160;        <span class=\"comment\">//}</span></div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01069\"></a><span class=\"lineno\"> 1069</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\">CLOCK_REQUEST</a>:</div>\n<div class=\"line\"><a name=\"l01070\"></a><span class=\"lineno\"> 1070</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- CLOCK REQUEST&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getStatus () == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\">processClockRequest</a> (mac, buf, count, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)) {</div>\n<div class=\"line\"><a name=\"l01073\"></a><span class=\"lineno\"> 1073</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Clock request OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01074\"></a><span class=\"lineno\"> 1074</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">MAX_KEY_VALIDITY</a> &gt; 0) {</div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;                    <span class=\"keywordflow\">if</span> (millis () - <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getKeyValidFrom () &gt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">MAX_KEY_VALIDITY</a>) {</div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;                        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a>);</div>\n<div class=\"line\"><a name=\"l01077\"></a><span class=\"lineno\"> 1077</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l01078\"></a><span class=\"lineno\"> 1078</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\">WRONG_DATA</a>);</div>\n<div class=\"line\"><a name=\"l01081\"></a><span class=\"lineno\"> 1081</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Clock request not OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01082\"></a><span class=\"lineno\"> 1082</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160; </div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01085\"></a><span class=\"lineno\"> 1085</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\">UNREGISTERED_NODE</a>);</div>\n<div class=\"line\"><a name=\"l01086\"></a><span class=\"lineno\"> 1086</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\">NODE_NAME_SET</a>:</div>\n<div class=\"line\"><a name=\"l01089\"></a><span class=\"lineno\"> 1089</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- NODE NAME REQUEST&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01090\"></a><span class=\"lineno\"> 1090</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getStatus () == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\">processNodeNameSet</a> (mac, buf, count, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)) {</div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Node name for node %d set to %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeId (), <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeName ());</div>\n<div class=\"line\"><a name=\"l01093\"></a><span class=\"lineno\"> 1093</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">notifyNewNode</a>) {</div>\n<div class=\"line\"><a name=\"l01094\"></a><span class=\"lineno\"> 1094</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">notifyNewNode</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeId (), <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeName ());</div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01097\"></a><span class=\"lineno\"> 1097</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error setting node name for node %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeId ());</div>\n<div class=\"line\"><a name=\"l01098\"></a><span class=\"lineno\"> 1098</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l01102\"></a><span class=\"lineno\"> 1102</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Received unknown EnigmaIOT message 0x%02X&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01103\"></a><span class=\"lineno\"> 1103</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160; </div>\n<div class=\"line\"><a name=\"l01106\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381\"> 1106</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381\">EnigmaIOTGatewayClass::nodeNameSetRespose</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node, int8_t error) {</div>\n<div class=\"line\"><a name=\"l01107\"></a><span class=\"lineno\"> 1107</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01108\"></a><span class=\"lineno\"> 1108</span>&#160;<span class=\"comment\">     * ------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;<span class=\"comment\">     *| msgType (1) | IV (12) | Counter (2) | Result code (1) | tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01110\"></a><span class=\"lineno\"> 1110</span>&#160;<span class=\"comment\">     * ------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01111\"></a><span class=\"lineno\"> 1111</span>&#160;<span class=\"comment\">     */</span></div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;    <span class=\"keyword\">struct </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01113\"></a><span class=\"lineno\"> 1113</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01114\"></a><span class=\"lineno\"> 1114</span>&#160;        uint8_t iv[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01115\"></a><span class=\"lineno\"> 1115</span>&#160;        uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01116\"></a><span class=\"lineno\"> 1116</span>&#160;        int8_t errorCode;</div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"> 1117</span>&#160;        uint8_t tag[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01118\"></a><span class=\"lineno\"> 1118</span>&#160;    } nodeNameSetResponse_msg;</div>\n<div class=\"line\"><a name=\"l01119\"></a><span class=\"lineno\"> 1119</span>&#160; </div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"> 1120</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160; </div>\n<div class=\"line\"><a name=\"l01122\"></a><span class=\"lineno\"> 1122</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> NNSRMSG_LEN = <span class=\"keyword\">sizeof</span> (nodeNameSetResponse_msg);</div>\n<div class=\"line\"><a name=\"l01123\"></a><span class=\"lineno\"> 1123</span>&#160; </div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;    nodeNameSetResponse_msg.msgType = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\">NODE_NAME_RESULT</a>;</div>\n<div class=\"line\"><a name=\"l01125\"></a><span class=\"lineno\"> 1125</span>&#160; </div>\n<div class=\"line\"><a name=\"l01126\"></a><span class=\"lineno\"> 1126</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01127\"></a><span class=\"lineno\"> 1127</span>&#160;        counter = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastDownlinkMsgCounter () + 1;</div>\n<div class=\"line\"><a name=\"l01128\"></a><span class=\"lineno\"> 1128</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastDownlinkMsgCounter (counter);</div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"> 1129</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01130\"></a><span class=\"lineno\"> 1130</span>&#160;        counter = (uint16_t)(<a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ());</div>\n<div class=\"line\"><a name=\"l01131\"></a><span class=\"lineno\"> 1131</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"> 1132</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Downlink message #%d&quot;</span>, counter);</div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160; </div>\n<div class=\"line\"><a name=\"l01134\"></a><span class=\"lineno\"> 1134</span>&#160;    memcpy (&amp;(nodeNameSetResponse_msg.counter), &amp;counter, sizeof (uint16_t));</div>\n<div class=\"line\"><a name=\"l01135\"></a><span class=\"lineno\"> 1135</span>&#160; </div>\n<div class=\"line\"><a name=\"l01136\"></a><span class=\"lineno\"> 1136</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Set node name Response. Error code: %d&quot;</span>, error);</div>\n<div class=\"line\"><a name=\"l01137\"></a><span class=\"lineno\"> 1137</span>&#160; </div>\n<div class=\"line\"><a name=\"l01138\"></a><span class=\"lineno\"> 1138</span>&#160;    <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a> (nodeNameSetResponse_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01139\"></a><span class=\"lineno\"> 1139</span>&#160; </div>\n<div class=\"line\"><a name=\"l01140\"></a><span class=\"lineno\"> 1140</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;IV: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (nodeNameSetResponse_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01141\"></a><span class=\"lineno\"> 1141</span>&#160; </div>\n<div class=\"line\"><a name=\"l01142\"></a><span class=\"lineno\"> 1142</span>&#160;    nodeNameSetResponse_msg.errorCode = error;</div>\n<div class=\"line\"><a name=\"l01143\"></a><span class=\"lineno\"> 1143</span>&#160; </div>\n<div class=\"line\"><a name=\"l01144\"></a><span class=\"lineno\"> 1144</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01145\"></a><span class=\"lineno\"> 1145</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01146\"></a><span class=\"lineno\"> 1146</span>&#160; </div>\n<div class=\"line\"><a name=\"l01147\"></a><span class=\"lineno\"> 1147</span>&#160;    memcpy (aad, (uint8_t*)&amp;nodeNameSetResponse_msg, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01148\"></a><span class=\"lineno\"> 1148</span>&#160; </div>\n<div class=\"line\"><a name=\"l01149\"></a><span class=\"lineno\"> 1149</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from node key</span></div>\n<div class=\"line\"><a name=\"l01150\"></a><span class=\"lineno\"> 1150</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01151\"></a><span class=\"lineno\"> 1151</span>&#160; </div>\n<div class=\"line\"><a name=\"l01152\"></a><span class=\"lineno\"> 1152</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a> ((uint8_t*)&amp;(nodeNameSetResponse_msg.errorCode), sizeof (int8_t), <span class=\"comment\">// Encrypt error code only, 1 byte</span></div>\n<div class=\"line\"><a name=\"l01153\"></a><span class=\"lineno\"> 1153</span>&#160;                                     nodeNameSetResponse_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01154\"></a><span class=\"lineno\"> 1154</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01155\"></a><span class=\"lineno\"> 1155</span>&#160;                                     aad, sizeof (aad), nodeNameSetResponse_msg.tag, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01156\"></a><span class=\"lineno\"> 1156</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during encryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01157\"></a><span class=\"lineno\"> 1157</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01158\"></a><span class=\"lineno\"> 1158</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01159\"></a><span class=\"lineno\"> 1159</span>&#160; </div>\n<div class=\"line\"><a name=\"l01160\"></a><span class=\"lineno\"> 1160</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Encrypted set node name response message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;nodeNameSetResponse_msg, NNSRMSG_LEN));</div>\n<div class=\"line\"><a name=\"l01161\"></a><span class=\"lineno\"> 1161</span>&#160; </div>\n<div class=\"line\"><a name=\"l01162\"></a><span class=\"lineno\"> 1162</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; SEND SET NODE NAME RESPONSE&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01163\"></a><span class=\"lineno\"> 1163</span>&#160;    uint8_t* addr = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress ();</div>\n<div class=\"line\"><a name=\"l01164\"></a><span class=\"lineno\"> 1164</span>&#160;    <span class=\"comment\">//char addrStr[ENIGMAIOT_ADDR_LEN * 3];</span></div>\n<div class=\"line\"><a name=\"l01165\"></a><span class=\"lineno\"> 1165</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (addr, (uint8_t*)&amp;nodeNameSetResponse_msg, NNSRMSG_LEN) == 0) {</div>\n<div class=\"line\"><a name=\"l01166\"></a><span class=\"lineno\"> 1166</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Set Node Name Response message sent to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (addr));</div>\n<div class=\"line\"><a name=\"l01167\"></a><span class=\"lineno\"> 1167</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01168\"></a><span class=\"lineno\"> 1168</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01169\"></a><span class=\"lineno\"> 1169</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">unregisterNode</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l01170\"></a><span class=\"lineno\"> 1170</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error sending Set Node Name Response message to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (addr));</div>\n<div class=\"line\"><a name=\"l01171\"></a><span class=\"lineno\"> 1171</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01172\"></a><span class=\"lineno\"> 1172</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01173\"></a><span class=\"lineno\"> 1173</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01174\"></a><span class=\"lineno\"> 1174</span>&#160; </div>\n<div class=\"line\"><a name=\"l01175\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\"> 1175</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\">EnigmaIOTGatewayClass::processNodeNameSet</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* node) {</div>\n<div class=\"line\"><a name=\"l01176\"></a><span class=\"lineno\"> 1176</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01177\"></a><span class=\"lineno\"> 1177</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01178\"></a><span class=\"lineno\"> 1178</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | NodeID (2) | Counter (2) | Node name (up to 32) | tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01179\"></a><span class=\"lineno\"> 1179</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01180\"></a><span class=\"lineno\"> 1180</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01181\"></a><span class=\"lineno\"> 1181</span>&#160;    int8_t error = 0;</div>\n<div class=\"line\"><a name=\"l01182\"></a><span class=\"lineno\"> 1182</span>&#160; </div>\n<div class=\"line\"><a name=\"l01183\"></a><span class=\"lineno\"> 1183</span>&#160;    <span class=\"keywordtype\">char</span> nodeName[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01184\"></a><span class=\"lineno\"> 1184</span>&#160;    memset ((<span class=\"keywordtype\">void</span>*)nodeName, 0, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01185\"></a><span class=\"lineno\"> 1185</span>&#160; </div>\n<div class=\"line\"><a name=\"l01186\"></a><span class=\"lineno\"> 1186</span>&#160;    uint8_t iv_idx = 1;</div>\n<div class=\"line\"><a name=\"l01187\"></a><span class=\"lineno\"> 1187</span>&#160;    uint8_t nodeId_idx = iv_idx + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01188\"></a><span class=\"lineno\"> 1188</span>&#160;    uint8_t counter_idx = nodeId_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01189\"></a><span class=\"lineno\"> 1189</span>&#160;    uint8_t nodeName_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01190\"></a><span class=\"lineno\"> 1190</span>&#160;    uint8_t tag_idx = count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01191\"></a><span class=\"lineno\"> 1191</span>&#160; </div>\n<div class=\"line\"><a name=\"l01192\"></a><span class=\"lineno\"> 1192</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01193\"></a><span class=\"lineno\"> 1193</span>&#160; </div>\n<div class=\"line\"><a name=\"l01194\"></a><span class=\"lineno\"> 1194</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01195\"></a><span class=\"lineno\"> 1195</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01196\"></a><span class=\"lineno\"> 1196</span>&#160; </div>\n<div class=\"line\"><a name=\"l01197\"></a><span class=\"lineno\"> 1197</span>&#160;    memcpy (aad, buf, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01198\"></a><span class=\"lineno\"> 1198</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from NetworkKey</span></div>\n<div class=\"line\"><a name=\"l01199\"></a><span class=\"lineno\"> 1199</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01200\"></a><span class=\"lineno\"> 1200</span>&#160; </div>\n<div class=\"line\"><a name=\"l01201\"></a><span class=\"lineno\"> 1201</span>&#160;    uint8_t packetLen = count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01202\"></a><span class=\"lineno\"> 1202</span>&#160; </div>\n<div class=\"line\"><a name=\"l01203\"></a><span class=\"lineno\"> 1203</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> (buf + nodeId_idx, packetLen - 1 - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>, <span class=\"comment\">// Decrypt from nodeId</span></div>\n<div class=\"line\"><a name=\"l01204\"></a><span class=\"lineno\"> 1204</span>&#160;                                     buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01205\"></a><span class=\"lineno\"> 1205</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01206\"></a><span class=\"lineno\"> 1206</span>&#160;                                     aad, sizeof (aad), buf + tag_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01207\"></a><span class=\"lineno\"> 1207</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during decryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01208\"></a><span class=\"lineno\"> 1208</span>&#160;        error = -4; <span class=\"comment\">// Message error</span></div>\n<div class=\"line\"><a name=\"l01209\"></a><span class=\"lineno\"> 1209</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01210\"></a><span class=\"lineno\"> 1210</span>&#160; </div>\n<div class=\"line\"><a name=\"l01211\"></a><span class=\"lineno\"> 1211</span>&#160;    memcpy (&amp;counter, &amp;(buf[counter_idx]), <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01212\"></a><span class=\"lineno\"> 1212</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Node Id %d. Control message #%d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeId (), counter);</div>\n<div class=\"line\"><a name=\"l01213\"></a><span class=\"lineno\"> 1213</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01214\"></a><span class=\"lineno\"> 1214</span>&#160;        <span class=\"keywordflow\">if</span> (counter &gt; <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastControlCounter ()) {</div>\n<div class=\"line\"><a name=\"l01215\"></a><span class=\"lineno\"> 1215</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Accepted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01216\"></a><span class=\"lineno\"> 1216</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastControlCounter (counter);</div>\n<div class=\"line\"><a name=\"l01217\"></a><span class=\"lineno\"> 1217</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01218\"></a><span class=\"lineno\"> 1218</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Control message rejected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01219\"></a><span class=\"lineno\"> 1219</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01220\"></a><span class=\"lineno\"> 1220</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01221\"></a><span class=\"lineno\"> 1221</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01222\"></a><span class=\"lineno\"> 1222</span>&#160; </div>\n<div class=\"line\"><a name=\"l01223\"></a><span class=\"lineno\"> 1223</span>&#160;    <span class=\"keywordflow\">if</span> (!error) {</div>\n<div class=\"line\"><a name=\"l01224\"></a><span class=\"lineno\"> 1224</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Decripted node name set message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01225\"></a><span class=\"lineno\"> 1225</span>&#160; </div>\n<div class=\"line\"><a name=\"l01226\"></a><span class=\"lineno\"> 1226</span>&#160;        <span class=\"keywordtype\">size_t</span> nodeNameLen = tag_idx - nodeName_idx;</div>\n<div class=\"line\"><a name=\"l01227\"></a><span class=\"lineno\"> 1227</span>&#160; </div>\n<div class=\"line\"><a name=\"l01228\"></a><span class=\"lineno\"> 1228</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node name length: %d bytes&quot;</span>, nodeNameLen);</div>\n<div class=\"line\"><a name=\"l01229\"></a><span class=\"lineno\"> 1229</span>&#160; </div>\n<div class=\"line\"><a name=\"l01230\"></a><span class=\"lineno\"> 1230</span>&#160;        <span class=\"keywordflow\">if</span> (nodeNameLen &gt;= <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>) {</div>\n<div class=\"line\"><a name=\"l01231\"></a><span class=\"lineno\"> 1231</span>&#160;            nodeNameLen = <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a> - 1;</div>\n<div class=\"line\"><a name=\"l01232\"></a><span class=\"lineno\"> 1232</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01233\"></a><span class=\"lineno\"> 1233</span>&#160; </div>\n<div class=\"line\"><a name=\"l01234\"></a><span class=\"lineno\"> 1234</span>&#160;        memcpy ((<span class=\"keywordtype\">void</span>*)nodeName, (<span class=\"keywordtype\">void</span>*)(buf + nodeName_idx), nodeNameLen);</div>\n<div class=\"line\"><a name=\"l01235\"></a><span class=\"lineno\"> 1235</span>&#160; </div>\n<div class=\"line\"><a name=\"l01236\"></a><span class=\"lineno\"> 1236</span>&#160;        error = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">checkNodeName</a> (nodeName, mac);</div>\n<div class=\"line\"><a name=\"l01237\"></a><span class=\"lineno\"> 1237</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01238\"></a><span class=\"lineno\"> 1238</span>&#160; </div>\n<div class=\"line\"><a name=\"l01239\"></a><span class=\"lineno\"> 1239</span>&#160;    <span class=\"comment\">//nodeNameSetRespose (node, error);</span></div>\n<div class=\"line\"><a name=\"l01240\"></a><span class=\"lineno\"> 1240</span>&#160; </div>\n<div class=\"line\"><a name=\"l01241\"></a><span class=\"lineno\"> 1241</span>&#160;    <span class=\"keywordflow\">if</span> (error) {</div>\n<div class=\"line\"><a name=\"l01242\"></a><span class=\"lineno\"> 1242</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01243\"></a><span class=\"lineno\"> 1243</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01244\"></a><span class=\"lineno\"> 1244</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setNodeName (nodeName);</div>\n<div class=\"line\"><a name=\"l01245\"></a><span class=\"lineno\"> 1245</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Node name set to %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeName ());</div>\n<div class=\"line\"><a name=\"l01246\"></a><span class=\"lineno\"> 1246</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01247\"></a><span class=\"lineno\"> 1247</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01248\"></a><span class=\"lineno\"> 1248</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01249\"></a><span class=\"lineno\"> 1249</span>&#160; </div>\n<div class=\"line\"><a name=\"l01250\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\"> 1250</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\">EnigmaIOTGatewayClass::processControlMessage</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* node) {</div>\n<div class=\"line\"><a name=\"l01251\"></a><span class=\"lineno\"> 1251</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01252\"></a><span class=\"lineno\"> 1252</span>&#160;<span class=\"comment\">    * ----------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01253\"></a><span class=\"lineno\"> 1253</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | length (2) | NodeId (2) | Counter (2) | Data (....) | Tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01254\"></a><span class=\"lineno\"> 1254</span>&#160;<span class=\"comment\">    * ----------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01255\"></a><span class=\"lineno\"> 1255</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01256\"></a><span class=\"lineno\"> 1256</span>&#160; </div>\n<div class=\"line\"><a name=\"l01257\"></a><span class=\"lineno\"> 1257</span>&#160;    uint8_t iv_idx = 1;</div>\n<div class=\"line\"><a name=\"l01258\"></a><span class=\"lineno\"> 1258</span>&#160;    uint8_t length_idx = iv_idx + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01259\"></a><span class=\"lineno\"> 1259</span>&#160;    uint8_t nodeId_idx = length_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01260\"></a><span class=\"lineno\"> 1260</span>&#160;    uint8_t counter_idx = nodeId_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01261\"></a><span class=\"lineno\"> 1261</span>&#160;    uint8_t data_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01262\"></a><span class=\"lineno\"> 1262</span>&#160;    uint8_t tag_idx = count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01263\"></a><span class=\"lineno\"> 1263</span>&#160; </div>\n<div class=\"line\"><a name=\"l01264\"></a><span class=\"lineno\"> 1264</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01265\"></a><span class=\"lineno\"> 1265</span>&#160; </div>\n<div class=\"line\"><a name=\"l01266\"></a><span class=\"lineno\"> 1266</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01267\"></a><span class=\"lineno\"> 1267</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01268\"></a><span class=\"lineno\"> 1268</span>&#160; </div>\n<div class=\"line\"><a name=\"l01269\"></a><span class=\"lineno\"> 1269</span>&#160;    memcpy (aad, buf, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01270\"></a><span class=\"lineno\"> 1270</span>&#160; </div>\n<div class=\"line\"><a name=\"l01271\"></a><span class=\"lineno\"> 1271</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from NetworkKey</span></div>\n<div class=\"line\"><a name=\"l01272\"></a><span class=\"lineno\"> 1272</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01273\"></a><span class=\"lineno\"> 1273</span>&#160; </div>\n<div class=\"line\"><a name=\"l01274\"></a><span class=\"lineno\"> 1274</span>&#160;    uint8_t packetLen = count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01275\"></a><span class=\"lineno\"> 1275</span>&#160; </div>\n<div class=\"line\"><a name=\"l01276\"></a><span class=\"lineno\"> 1276</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> (buf + length_idx, packetLen - 1 - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>, <span class=\"comment\">// Decrypt from nodeId</span></div>\n<div class=\"line\"><a name=\"l01277\"></a><span class=\"lineno\"> 1277</span>&#160;                                     buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01278\"></a><span class=\"lineno\"> 1278</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01279\"></a><span class=\"lineno\"> 1279</span>&#160;                                     aad, sizeof (aad), buf + tag_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01280\"></a><span class=\"lineno\"> 1280</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during decryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01281\"></a><span class=\"lineno\"> 1281</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01282\"></a><span class=\"lineno\"> 1282</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01283\"></a><span class=\"lineno\"> 1283</span>&#160; </div>\n<div class=\"line\"><a name=\"l01284\"></a><span class=\"lineno\"> 1284</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Decripted control message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01285\"></a><span class=\"lineno\"> 1285</span>&#160; </div>\n<div class=\"line\"><a name=\"l01286\"></a><span class=\"lineno\"> 1286</span>&#160;    memcpy (&amp;counter, &amp;(buf[counter_idx]), <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01287\"></a><span class=\"lineno\"> 1287</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Node Id %d. Control message #%d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeId (), counter);</div>\n<div class=\"line\"><a name=\"l01288\"></a><span class=\"lineno\"> 1288</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01289\"></a><span class=\"lineno\"> 1289</span>&#160;        <span class=\"keywordflow\">if</span> (counter &gt; <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastControlCounter ()) {</div>\n<div class=\"line\"><a name=\"l01290\"></a><span class=\"lineno\"> 1290</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Accepted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01291\"></a><span class=\"lineno\"> 1291</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastControlCounter (counter);</div>\n<div class=\"line\"><a name=\"l01292\"></a><span class=\"lineno\"> 1292</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01293\"></a><span class=\"lineno\"> 1293</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Control message rejected. Last counter: %u. Current counter&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastControlCounter (), counter);</div>\n<div class=\"line\"><a name=\"l01294\"></a><span class=\"lineno\"> 1294</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01295\"></a><span class=\"lineno\"> 1295</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01296\"></a><span class=\"lineno\"> 1296</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01297\"></a><span class=\"lineno\"> 1297</span>&#160; </div>\n<div class=\"line\"><a name=\"l01298\"></a><span class=\"lineno\"> 1298</span>&#160;    <span class=\"comment\">// Check if command informs about a sleepy mode change</span></div>\n<div class=\"line\"><a name=\"l01299\"></a><span class=\"lineno\"> 1299</span>&#160;    <span class=\"keyword\">const</span> uint8_t* payload = buf + data_idx;</div>\n<div class=\"line\"><a name=\"l01300\"></a><span class=\"lineno\"> 1300</span>&#160;    <span class=\"keywordflow\">if</span> (payload[0] == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">control_message_type::SLEEP_ANS</a> &amp;&amp; (tag_idx - data_idx) &gt;= 5) {</div>\n<div class=\"line\"><a name=\"l01301\"></a><span class=\"lineno\"> 1301</span>&#160;        uint32_t sleepTime;</div>\n<div class=\"line\"><a name=\"l01302\"></a><span class=\"lineno\"> 1302</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Check if sleepy mode has changed for node&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01303\"></a><span class=\"lineno\"> 1303</span>&#160;        memcpy (&amp;sleepTime, payload + 1, <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l01304\"></a><span class=\"lineno\"> 1304</span>&#160;        <span class=\"keywordflow\">if</span> (sleepTime &gt; 0) {</div>\n<div class=\"line\"><a name=\"l01305\"></a><span class=\"lineno\"> 1305</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Set node to sleepy mode&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01306\"></a><span class=\"lineno\"> 1306</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setSleepy (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l01307\"></a><span class=\"lineno\"> 1307</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01308\"></a><span class=\"lineno\"> 1308</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Set node to non sleepy mode&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01309\"></a><span class=\"lineno\"> 1309</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setSleepy (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l01310\"></a><span class=\"lineno\"> 1310</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01311\"></a><span class=\"lineno\"> 1311</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01312\"></a><span class=\"lineno\"> 1312</span>&#160; </div>\n<div class=\"line\"><a name=\"l01313\"></a><span class=\"lineno\"> 1313</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Payload length: %d bytes&quot;</span>, tag_idx - data_idx);</div>\n<div class=\"line\"><a name=\"l01314\"></a><span class=\"lineno\"> 1314</span>&#160; </div>\n<div class=\"line\"><a name=\"l01315\"></a><span class=\"lineno\"> 1315</span>&#160;    <span class=\"keywordtype\">char</span>* nodeName = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeName ();</div>\n<div class=\"line\"><a name=\"l01316\"></a><span class=\"lineno\"> 1316</span>&#160; </div>\n<div class=\"line\"><a name=\"l01317\"></a><span class=\"lineno\"> 1317</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">notifyData</a>) {</div>\n<div class=\"line\"><a name=\"l01318\"></a><span class=\"lineno\"> 1318</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">notifyData</a> (<span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(mac), buf + data_idx, tag_idx - data_idx, 0, <span class=\"keyword\">true</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">ENIGMAIOT</a>, nodeName ? nodeName : NULL);</div>\n<div class=\"line\"><a name=\"l01319\"></a><span class=\"lineno\"> 1319</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01320\"></a><span class=\"lineno\"> 1320</span>&#160; </div>\n<div class=\"line\"><a name=\"l01321\"></a><span class=\"lineno\"> 1321</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01322\"></a><span class=\"lineno\"> 1322</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01323\"></a><span class=\"lineno\"> 1323</span>&#160; </div>\n<div class=\"line\"><a name=\"l01324\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\"> 1324</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\">EnigmaIOTGatewayClass::processUnencryptedDataMessage</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* node) {</div>\n<div class=\"line\"><a name=\"l01325\"></a><span class=\"lineno\"> 1325</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01326\"></a><span class=\"lineno\"> 1326</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01327\"></a><span class=\"lineno\"> 1327</span>&#160;<span class=\"comment\">    *| msgType (1) | NodeId (2) | Counter (2) | PayloadType (1) | Data (....) |</span></div>\n<div class=\"line\"><a name=\"l01328\"></a><span class=\"lineno\"> 1328</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01329\"></a><span class=\"lineno\"> 1329</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01330\"></a><span class=\"lineno\"> 1330</span>&#160; </div>\n<div class=\"line\"><a name=\"l01331\"></a><span class=\"lineno\"> 1331</span>&#160;    uint8_t nodeId_idx = 1;</div>\n<div class=\"line\"><a name=\"l01332\"></a><span class=\"lineno\"> 1332</span>&#160;    uint8_t counter_idx = nodeId_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01333\"></a><span class=\"lineno\"> 1333</span>&#160;    uint8_t payloadType_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01334\"></a><span class=\"lineno\"> 1334</span>&#160;    uint8_t data_idx = payloadType_idx + <span class=\"keyword\">sizeof</span> (int8_t);</div>\n<div class=\"line\"><a name=\"l01335\"></a><span class=\"lineno\"> 1335</span>&#160; </div>\n<div class=\"line\"><a name=\"l01336\"></a><span class=\"lineno\"> 1336</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01337\"></a><span class=\"lineno\"> 1337</span>&#160;    <span class=\"keywordtype\">size_t</span> lostMessages = 0;</div>\n<div class=\"line\"><a name=\"l01338\"></a><span class=\"lineno\"> 1338</span>&#160; </div>\n<div class=\"line\"><a name=\"l01339\"></a><span class=\"lineno\"> 1339</span>&#160;    <span class=\"comment\">//uint8_t packetLen = count; // Not used</span></div>\n<div class=\"line\"><a name=\"l01340\"></a><span class=\"lineno\"> 1340</span>&#160; </div>\n<div class=\"line\"><a name=\"l01341\"></a><span class=\"lineno\"> 1341</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Unencrypted data message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, count));</div>\n<div class=\"line\"><a name=\"l01342\"></a><span class=\"lineno\"> 1342</span>&#160; </div>\n<div class=\"line\"><a name=\"l01343\"></a><span class=\"lineno\"> 1343</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;packetNumber++;</div>\n<div class=\"line\"><a name=\"l01344\"></a><span class=\"lineno\"> 1344</span>&#160; </div>\n<div class=\"line\"><a name=\"l01345\"></a><span class=\"lineno\"> 1345</span>&#160;    memcpy (&amp;counter, &amp;buf[counter_idx], <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01346\"></a><span class=\"lineno\"> 1346</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01347\"></a><span class=\"lineno\"> 1347</span>&#160;        <span class=\"keywordflow\">if</span> (counter &gt; <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastMessageCounter ()) {</div>\n<div class=\"line\"><a name=\"l01348\"></a><span class=\"lineno\"> 1348</span>&#160;            lostMessages = counter - <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastMessageCounter () - 1;</div>\n<div class=\"line\"><a name=\"l01349\"></a><span class=\"lineno\"> 1349</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;packetErrors += lostMessages;</div>\n<div class=\"line\"><a name=\"l01350\"></a><span class=\"lineno\"> 1350</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastMessageCounter (counter);</div>\n<div class=\"line\"><a name=\"l01351\"></a><span class=\"lineno\"> 1351</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01352\"></a><span class=\"lineno\"> 1352</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Data counter error %d : %d&quot;</span>, counter, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastMessageCounter ());</div>\n<div class=\"line\"><a name=\"l01353\"></a><span class=\"lineno\"> 1353</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01354\"></a><span class=\"lineno\"> 1354</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01355\"></a><span class=\"lineno\"> 1355</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01356\"></a><span class=\"lineno\"> 1356</span>&#160; </div>\n<div class=\"line\"><a name=\"l01357\"></a><span class=\"lineno\"> 1357</span>&#160;    <span class=\"keywordtype\">char</span>* nodeName = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeName ();</div>\n<div class=\"line\"><a name=\"l01358\"></a><span class=\"lineno\"> 1358</span>&#160; </div>\n<div class=\"line\"><a name=\"l01359\"></a><span class=\"lineno\"> 1359</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">notifyData</a>) {</div>\n<div class=\"line\"><a name=\"l01360\"></a><span class=\"lineno\"> 1360</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">notifyData</a> (<span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(mac), &amp;(buf[data_idx]), count - data_idx, lostMessages, <span class=\"keyword\">false</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a>, nodeName ? nodeName : NULL);</div>\n<div class=\"line\"><a name=\"l01361\"></a><span class=\"lineno\"> 1361</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01362\"></a><span class=\"lineno\"> 1362</span>&#160; </div>\n<div class=\"line\"><a name=\"l01363\"></a><span class=\"lineno\"> 1363</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getSleepy ()) {</div>\n<div class=\"line\"><a name=\"l01364\"></a><span class=\"lineno\"> 1364</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;qMessagePending) {</div>\n<div class=\"line\"><a name=\"l01365\"></a><span class=\"lineno\"> 1365</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; DOWNLINK QUEUED DATA&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01366\"></a><span class=\"lineno\"> 1366</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">flashTx</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01367\"></a><span class=\"lineno\"> 1367</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;qMessagePending = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01368\"></a><span class=\"lineno\"> 1368</span>&#160;            <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;queuedMessage, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;qMessageLength) == 0;</div>\n<div class=\"line\"><a name=\"l01369\"></a><span class=\"lineno\"> 1369</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01370\"></a><span class=\"lineno\"> 1370</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01371\"></a><span class=\"lineno\"> 1371</span>&#160; </div>\n<div class=\"line\"><a name=\"l01372\"></a><span class=\"lineno\"> 1372</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01373\"></a><span class=\"lineno\"> 1373</span>&#160; </div>\n<div class=\"line\"><a name=\"l01374\"></a><span class=\"lineno\"> 1374</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01375\"></a><span class=\"lineno\"> 1375</span>&#160; </div>\n<div class=\"line\"><a name=\"l01376\"></a><span class=\"lineno\"> 1376</span>&#160; </div>\n<div class=\"line\"><a name=\"l01377\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\"> 1377</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\">EnigmaIOTGatewayClass::processDataMessage</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* node, <span class=\"keywordtype\">bool</span> encrypted) {</div>\n<div class=\"line\"><a name=\"l01378\"></a><span class=\"lineno\"> 1378</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01379\"></a><span class=\"lineno\"> 1379</span>&#160;<span class=\"comment\">    * ----------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01380\"></a><span class=\"lineno\"> 1380</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | length (2) | NodeId (2) | Counter (2) | Data (....) | Tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01381\"></a><span class=\"lineno\"> 1381</span>&#160;<span class=\"comment\">    * ----------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01382\"></a><span class=\"lineno\"> 1382</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01383\"></a><span class=\"lineno\"> 1383</span>&#160; </div>\n<div class=\"line\"><a name=\"l01384\"></a><span class=\"lineno\"> 1384</span>&#160;    <span class=\"keywordflow\">if</span> (!encrypted) {</div>\n<div class=\"line\"><a name=\"l01385\"></a><span class=\"lineno\"> 1385</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\">processUnencryptedDataMessage</a> (mac, buf, count, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l01386\"></a><span class=\"lineno\"> 1386</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01387\"></a><span class=\"lineno\"> 1387</span>&#160; </div>\n<div class=\"line\"><a name=\"l01388\"></a><span class=\"lineno\"> 1388</span>&#160;    uint8_t iv_idx = 1;</div>\n<div class=\"line\"><a name=\"l01389\"></a><span class=\"lineno\"> 1389</span>&#160;    uint8_t length_idx = iv_idx + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01390\"></a><span class=\"lineno\"> 1390</span>&#160;    uint8_t nodeId_idx = length_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01391\"></a><span class=\"lineno\"> 1391</span>&#160;    uint8_t counter_idx = nodeId_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01392\"></a><span class=\"lineno\"> 1392</span>&#160;    uint8_t encoding_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01393\"></a><span class=\"lineno\"> 1393</span>&#160;    uint8_t data_idx = encoding_idx + <span class=\"keyword\">sizeof</span> (int8_t);</div>\n<div class=\"line\"><a name=\"l01394\"></a><span class=\"lineno\"> 1394</span>&#160;    uint8_t tag_idx = count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01395\"></a><span class=\"lineno\"> 1395</span>&#160; </div>\n<div class=\"line\"><a name=\"l01396\"></a><span class=\"lineno\"> 1396</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01397\"></a><span class=\"lineno\"> 1397</span>&#160;    <span class=\"keywordtype\">size_t</span> lostMessages = 0;</div>\n<div class=\"line\"><a name=\"l01398\"></a><span class=\"lineno\"> 1398</span>&#160; </div>\n<div class=\"line\"><a name=\"l01399\"></a><span class=\"lineno\"> 1399</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01400\"></a><span class=\"lineno\"> 1400</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01401\"></a><span class=\"lineno\"> 1401</span>&#160; </div>\n<div class=\"line\"><a name=\"l01402\"></a><span class=\"lineno\"> 1402</span>&#160;    memcpy (aad, buf, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01403\"></a><span class=\"lineno\"> 1403</span>&#160; </div>\n<div class=\"line\"><a name=\"l01404\"></a><span class=\"lineno\"> 1404</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from NetworkKey</span></div>\n<div class=\"line\"><a name=\"l01405\"></a><span class=\"lineno\"> 1405</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01406\"></a><span class=\"lineno\"> 1406</span>&#160; </div>\n<div class=\"line\"><a name=\"l01407\"></a><span class=\"lineno\"> 1407</span>&#160;    uint8_t packetLen = count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01408\"></a><span class=\"lineno\"> 1408</span>&#160; </div>\n<div class=\"line\"><a name=\"l01409\"></a><span class=\"lineno\"> 1409</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> (buf + length_idx, packetLen - 1 - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>, <span class=\"comment\">// Decrypt from nodeId</span></div>\n<div class=\"line\"><a name=\"l01410\"></a><span class=\"lineno\"> 1410</span>&#160;                                     buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01411\"></a><span class=\"lineno\"> 1411</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01412\"></a><span class=\"lineno\"> 1412</span>&#160;                                     aad, sizeof (aad), buf + tag_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01413\"></a><span class=\"lineno\"> 1413</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during decryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01414\"></a><span class=\"lineno\"> 1414</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01415\"></a><span class=\"lineno\"> 1415</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01416\"></a><span class=\"lineno\"> 1416</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Decrypted data message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01417\"></a><span class=\"lineno\"> 1417</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Data payload encoding: 0x%02X&quot;</span>, buf[encoding_idx]);</div>\n<div class=\"line\"><a name=\"l01418\"></a><span class=\"lineno\"> 1418</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;packetNumber++;</div>\n<div class=\"line\"><a name=\"l01419\"></a><span class=\"lineno\"> 1419</span>&#160; </div>\n<div class=\"line\"><a name=\"l01420\"></a><span class=\"lineno\"> 1420</span>&#160;    memcpy (&amp;counter, &amp;(buf[counter_idx]), <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01421\"></a><span class=\"lineno\"> 1421</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Node Id %d. Data message #%d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeId (), counter);</div>\n<div class=\"line\"><a name=\"l01422\"></a><span class=\"lineno\"> 1422</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01423\"></a><span class=\"lineno\"> 1423</span>&#160;        <span class=\"keywordflow\">if</span> (counter &gt; <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastMessageCounter ()) {</div>\n<div class=\"line\"><a name=\"l01424\"></a><span class=\"lineno\"> 1424</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Accepted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01425\"></a><span class=\"lineno\"> 1425</span>&#160;            lostMessages = counter - <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastMessageCounter () - 1;</div>\n<div class=\"line\"><a name=\"l01426\"></a><span class=\"lineno\"> 1426</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;packetErrors += lostMessages;</div>\n<div class=\"line\"><a name=\"l01427\"></a><span class=\"lineno\"> 1427</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastMessageCounter (counter);</div>\n<div class=\"line\"><a name=\"l01428\"></a><span class=\"lineno\"> 1428</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01429\"></a><span class=\"lineno\"> 1429</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Data message rejected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01430\"></a><span class=\"lineno\"> 1430</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01431\"></a><span class=\"lineno\"> 1431</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01432\"></a><span class=\"lineno\"> 1432</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01433\"></a><span class=\"lineno\"> 1433</span>&#160; </div>\n<div class=\"line\"><a name=\"l01434\"></a><span class=\"lineno\"> 1434</span>&#160;    <span class=\"keywordtype\">char</span>* nodeName = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeName ();</div>\n<div class=\"line\"><a name=\"l01435\"></a><span class=\"lineno\"> 1435</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l01436\"></a><span class=\"lineno\"> 1436</span>&#160;    <span class=\"keywordflow\">if</span> (buf[0] == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a>) {</div>\n<div class=\"line\"><a name=\"l01437\"></a><span class=\"lineno\"> 1437</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\">sendHADiscoveryJSON</a> (<span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(mac), &amp;(buf[data_idx]), tag_idx - data_idx, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a>, nodeName ? nodeName : NULL);</div>\n<div class=\"line\"><a name=\"l01438\"></a><span class=\"lineno\"> 1438</span>&#160;    } <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l01439\"></a><span class=\"lineno\"> 1439</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l01440\"></a><span class=\"lineno\"> 1440</span>&#160;        <span class=\"keywordflow\">if</span> (buf[0] == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a> &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">notifyData</a>) {</div>\n<div class=\"line\"><a name=\"l01441\"></a><span class=\"lineno\"> 1441</span>&#160;        <span class=\"comment\">//DEBUG_WARN (&quot;Notify data %d&quot;, input_queue-&gt;size());</span></div>\n<div class=\"line\"><a name=\"l01442\"></a><span class=\"lineno\"> 1442</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">notifyData</a> (<span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(mac), &amp;(buf[data_idx]), tag_idx - data_idx, lostMessages, <span class=\"keyword\">false</span>, (<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a>)(buf[encoding_idx]), nodeName ? nodeName : NULL);</div>\n<div class=\"line\"><a name=\"l01443\"></a><span class=\"lineno\"> 1443</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01444\"></a><span class=\"lineno\"> 1444</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong message type. Possible memory corruption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01445\"></a><span class=\"lineno\"> 1445</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01446\"></a><span class=\"lineno\"> 1446</span>&#160; </div>\n<div class=\"line\"><a name=\"l01447\"></a><span class=\"lineno\"> 1447</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getSleepy ()) {</div>\n<div class=\"line\"><a name=\"l01448\"></a><span class=\"lineno\"> 1448</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;qMessagePending) {</div>\n<div class=\"line\"><a name=\"l01449\"></a><span class=\"lineno\"> 1449</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; DOWNLINK QUEUED DATA&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01450\"></a><span class=\"lineno\"> 1450</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">flashTx</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01451\"></a><span class=\"lineno\"> 1451</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;qMessagePending = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01452\"></a><span class=\"lineno\"> 1452</span>&#160;            <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;queuedMessage, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;qMessageLength) == 0;</div>\n<div class=\"line\"><a name=\"l01453\"></a><span class=\"lineno\"> 1453</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01454\"></a><span class=\"lineno\"> 1454</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01455\"></a><span class=\"lineno\"> 1455</span>&#160; </div>\n<div class=\"line\"><a name=\"l01456\"></a><span class=\"lineno\"> 1456</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01457\"></a><span class=\"lineno\"> 1457</span>&#160; </div>\n<div class=\"line\"><a name=\"l01458\"></a><span class=\"lineno\"> 1458</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01459\"></a><span class=\"lineno\"> 1459</span>&#160; </div>\n<div class=\"line\"><a name=\"l01460\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\"> 1460</a></span>&#160;<span class=\"keywordtype\">double</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">EnigmaIOTGatewayClass::getPER</a> (uint8_t* address) {</div>\n<div class=\"line\"><a name=\"l01461\"></a><span class=\"lineno\"> 1461</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a> = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">getNewNode</a> (address);</div>\n<div class=\"line\"><a name=\"l01462\"></a><span class=\"lineno\"> 1462</span>&#160; </div>\n<div class=\"line\"><a name=\"l01463\"></a><span class=\"lineno\"> 1463</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;packetNumber &gt; 0) {</div>\n<div class=\"line\"><a name=\"l01464\"></a><span class=\"lineno\"> 1464</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;per = (double)<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;packetErrors / (<span class=\"keywordtype\">double</span>)<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;packetNumber;</div>\n<div class=\"line\"><a name=\"l01465\"></a><span class=\"lineno\"> 1465</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01466\"></a><span class=\"lineno\"> 1466</span>&#160; </div>\n<div class=\"line\"><a name=\"l01467\"></a><span class=\"lineno\"> 1467</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;per;</div>\n<div class=\"line\"><a name=\"l01468\"></a><span class=\"lineno\"> 1468</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01469\"></a><span class=\"lineno\"> 1469</span>&#160; </div>\n<div class=\"line\"><a name=\"l01470\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\"> 1470</a></span>&#160;uint32_t <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">EnigmaIOTGatewayClass::getTotalPackets</a> (uint8_t* address) {</div>\n<div class=\"line\"><a name=\"l01471\"></a><span class=\"lineno\"> 1471</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a> = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">getNewNode</a> (address);</div>\n<div class=\"line\"><a name=\"l01472\"></a><span class=\"lineno\"> 1472</span>&#160; </div>\n<div class=\"line\"><a name=\"l01473\"></a><span class=\"lineno\"> 1473</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;packetNumber + <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">getErrorPackets</a> (address);</div>\n<div class=\"line\"><a name=\"l01474\"></a><span class=\"lineno\"> 1474</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01475\"></a><span class=\"lineno\"> 1475</span>&#160; </div>\n<div class=\"line\"><a name=\"l01476\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\"> 1476</a></span>&#160;uint32_t <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">EnigmaIOTGatewayClass::getErrorPackets</a> (uint8_t* address) {</div>\n<div class=\"line\"><a name=\"l01477\"></a><span class=\"lineno\"> 1477</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a> = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">getNewNode</a> (address);</div>\n<div class=\"line\"><a name=\"l01478\"></a><span class=\"lineno\"> 1478</span>&#160; </div>\n<div class=\"line\"><a name=\"l01479\"></a><span class=\"lineno\"> 1479</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;packetErrors;</div>\n<div class=\"line\"><a name=\"l01480\"></a><span class=\"lineno\"> 1480</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01481\"></a><span class=\"lineno\"> 1481</span>&#160; </div>\n<div class=\"line\"><a name=\"l01482\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\"> 1482</a></span>&#160;<span class=\"keywordtype\">double</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">EnigmaIOTGatewayClass::getPacketsHour</a> (uint8_t* address) {</div>\n<div class=\"line\"><a name=\"l01483\"></a><span class=\"lineno\"> 1483</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a> = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">getNewNode</a> (address);</div>\n<div class=\"line\"><a name=\"l01484\"></a><span class=\"lineno\"> 1484</span>&#160; </div>\n<div class=\"line\"><a name=\"l01485\"></a><span class=\"lineno\"> 1485</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;packetsHour;</div>\n<div class=\"line\"><a name=\"l01486\"></a><span class=\"lineno\"> 1486</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01487\"></a><span class=\"lineno\"> 1487</span>&#160; </div>\n<div class=\"line\"><a name=\"l01488\"></a><span class=\"lineno\"> 1488</span>&#160; </div>\n<div class=\"line\"><a name=\"l01489\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\"> 1489</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">EnigmaIOTGatewayClass::downstreamDataMessage</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> controlData, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> encoding) {</div>\n<div class=\"line\"><a name=\"l01490\"></a><span class=\"lineno\"> 1490</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01491\"></a><span class=\"lineno\"> 1491</span>&#160;<span class=\"comment\">    * ----------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01492\"></a><span class=\"lineno\"> 1492</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | length (2) | NodeId (2) | Counter (2) | Data (....) | Tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01493\"></a><span class=\"lineno\"> 1493</span>&#160;<span class=\"comment\">    * ----------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01494\"></a><span class=\"lineno\"> 1494</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01495\"></a><span class=\"lineno\"> 1495</span>&#160; </div>\n<div class=\"line\"><a name=\"l01496\"></a><span class=\"lineno\"> 1496</span>&#160;    uint8_t buffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01497\"></a><span class=\"lineno\"> 1497</span>&#160;    uint16_t packet_length;</div>\n<div class=\"line\"><a name=\"l01498\"></a><span class=\"lineno\"> 1498</span>&#160;    <span class=\"keywordtype\">bool</span> broadcast = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01499\"></a><span class=\"lineno\"> 1499</span>&#160; </div>\n<div class=\"line\"><a name=\"l01500\"></a><span class=\"lineno\"> 1500</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;isRegistered ()) {</div>\n<div class=\"line\"><a name=\"l01501\"></a><span class=\"lineno\"> 1501</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Error sending downstream. Node is not registered&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01502\"></a><span class=\"lineno\"> 1502</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01503\"></a><span class=\"lineno\"> 1503</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01504\"></a><span class=\"lineno\"> 1504</span>&#160; </div>\n<div class=\"line\"><a name=\"l01505\"></a><span class=\"lineno\"> 1505</span>&#160;    uint16_t nodeId = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeId ();</div>\n<div class=\"line\"><a name=\"l01506\"></a><span class=\"lineno\"> 1506</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01507\"></a><span class=\"lineno\"> 1507</span>&#160; </div>\n<div class=\"line\"><a name=\"l01508\"></a><span class=\"lineno\"> 1508</span>&#160;    uint8_t iv_idx = 1;</div>\n<div class=\"line\"><a name=\"l01509\"></a><span class=\"lineno\"> 1509</span>&#160;    uint8_t length_idx = iv_idx + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01510\"></a><span class=\"lineno\"> 1510</span>&#160;    uint8_t nodeId_idx = length_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01511\"></a><span class=\"lineno\"> 1511</span>&#160;    uint8_t counter_idx = nodeId_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01512\"></a><span class=\"lineno\"> 1512</span>&#160;    uint8_t data_idx;</div>\n<div class=\"line\"><a name=\"l01513\"></a><span class=\"lineno\"> 1513</span>&#160;    uint8_t encoding_idx; <span class=\"comment\">// Only for user data</span></div>\n<div class=\"line\"><a name=\"l01514\"></a><span class=\"lineno\"> 1514</span>&#160;    <span class=\"keywordflow\">if</span> (controlData == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">USERDATA_GET</a> || controlData == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">USERDATA_SET</a>) {</div>\n<div class=\"line\"><a name=\"l01515\"></a><span class=\"lineno\"> 1515</span>&#160;        encoding_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01516\"></a><span class=\"lineno\"> 1516</span>&#160;        data_idx = encoding_idx + <span class=\"keyword\">sizeof</span> (int8_t);</div>\n<div class=\"line\"><a name=\"l01517\"></a><span class=\"lineno\"> 1517</span>&#160;        buffer[encoding_idx] = encoding;</div>\n<div class=\"line\"><a name=\"l01518\"></a><span class=\"lineno\"> 1518</span>&#160;        packet_length = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a> + <span class=\"keyword\">sizeof</span> (int16_t) + <span class=\"keyword\">sizeof</span> (int16_t) + <span class=\"keyword\">sizeof</span> (int16_t) + 1 + len;</div>\n<div class=\"line\"><a name=\"l01519\"></a><span class=\"lineno\"> 1519</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01520\"></a><span class=\"lineno\"> 1520</span>&#160;        data_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01521\"></a><span class=\"lineno\"> 1521</span>&#160;        packet_length = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a> + <span class=\"keyword\">sizeof</span> (int16_t) + <span class=\"keyword\">sizeof</span> (int16_t) + <span class=\"keyword\">sizeof</span> (int16_t) + len;</div>\n<div class=\"line\"><a name=\"l01522\"></a><span class=\"lineno\"> 1522</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01523\"></a><span class=\"lineno\"> 1523</span>&#160;    uint8_t tag_idx = data_idx + len;</div>\n<div class=\"line\"><a name=\"l01524\"></a><span class=\"lineno\"> 1524</span>&#160; </div>\n<div class=\"line\"><a name=\"l01525\"></a><span class=\"lineno\"> 1525</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l01526\"></a><span class=\"lineno\"> 1526</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Downlink message buffer empty&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01527\"></a><span class=\"lineno\"> 1527</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01528\"></a><span class=\"lineno\"> 1528</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01529\"></a><span class=\"lineno\"> 1529</span>&#160;    <span class=\"keywordflow\">if</span> (len &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a> - 25) {</div>\n<div class=\"line\"><a name=\"l01530\"></a><span class=\"lineno\"> 1530</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Downlink message too long: %d bytes&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l01531\"></a><span class=\"lineno\"> 1531</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01532\"></a><span class=\"lineno\"> 1532</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01533\"></a><span class=\"lineno\"> 1533</span>&#160; </div>\n<div class=\"line\"><a name=\"l01534\"></a><span class=\"lineno\"> 1534</span>&#160;    <span class=\"keywordflow\">if</span> (!memcmp (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>)) {</div>\n<div class=\"line\"><a name=\"l01535\"></a><span class=\"lineno\"> 1535</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Encoding broadcast message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01536\"></a><span class=\"lineno\"> 1536</span>&#160;        broadcast = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01537\"></a><span class=\"lineno\"> 1537</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01538\"></a><span class=\"lineno\"> 1538</span>&#160; </div>\n<div class=\"line\"><a name=\"l01539\"></a><span class=\"lineno\"> 1539</span>&#160;    <span class=\"keywordflow\">if</span> (controlData == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">control_message_type::USERDATA_GET</a>) {</div>\n<div class=\"line\"><a name=\"l01540\"></a><span class=\"lineno\"> 1540</span>&#160;        buffer[0] = (uint8_t)<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a>;</div>\n<div class=\"line\"><a name=\"l01541\"></a><span class=\"lineno\"> 1541</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (controlData == <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">control_message_type::USERDATA_SET</a>) {</div>\n<div class=\"line\"><a name=\"l01542\"></a><span class=\"lineno\"> 1542</span>&#160;        buffer[0] = (uint8_t)<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a>;</div>\n<div class=\"line\"><a name=\"l01543\"></a><span class=\"lineno\"> 1543</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01544\"></a><span class=\"lineno\"> 1544</span>&#160;        buffer[0] = (uint8_t)<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\">DOWNSTREAM_CTRL_DATA</a>;</div>\n<div class=\"line\"><a name=\"l01545\"></a><span class=\"lineno\"> 1545</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01546\"></a><span class=\"lineno\"> 1546</span>&#160; </div>\n<div class=\"line\"><a name=\"l01547\"></a><span class=\"lineno\"> 1547</span>&#160;    <span class=\"keywordflow\">if</span> (broadcast) {</div>\n<div class=\"line\"><a name=\"l01548\"></a><span class=\"lineno\"> 1548</span>&#160;        buffer[0] = buffer[0] | 0x80; <span class=\"comment\">// Mark message as broadcast</span></div>\n<div class=\"line\"><a name=\"l01549\"></a><span class=\"lineno\"> 1549</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Broadcast message. Type: 0x%X&quot;</span>, buffer[0]);</div>\n<div class=\"line\"><a name=\"l01550\"></a><span class=\"lineno\"> 1550</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01551\"></a><span class=\"lineno\"> 1551</span>&#160; </div>\n<div class=\"line\"><a name=\"l01552\"></a><span class=\"lineno\"> 1552</span>&#160;    <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a> (buffer + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01553\"></a><span class=\"lineno\"> 1553</span>&#160; </div>\n<div class=\"line\"><a name=\"l01554\"></a><span class=\"lineno\"> 1554</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;IV: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01555\"></a><span class=\"lineno\"> 1555</span>&#160; </div>\n<div class=\"line\"><a name=\"l01556\"></a><span class=\"lineno\"> 1556</span>&#160;    memcpy (buffer + nodeId_idx, &amp;nodeId, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01557\"></a><span class=\"lineno\"> 1557</span>&#160; </div>\n<div class=\"line\"><a name=\"l01558\"></a><span class=\"lineno\"> 1558</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01559\"></a><span class=\"lineno\"> 1559</span>&#160;        <span class=\"keywordflow\">if</span> (!broadcast) {</div>\n<div class=\"line\"><a name=\"l01560\"></a><span class=\"lineno\"> 1560</span>&#160;            counter = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastDownlinkMsgCounter () + 1;</div>\n<div class=\"line\"><a name=\"l01561\"></a><span class=\"lineno\"> 1561</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastDownlinkMsgCounter (counter);</div>\n<div class=\"line\"><a name=\"l01562\"></a><span class=\"lineno\"> 1562</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01563\"></a><span class=\"lineno\"> 1563</span>&#160;            counter = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#acfff6ed812a219b7b7514989da7fc34e\">getLastBroadcastMsgCounter</a> () + 1;</div>\n<div class=\"line\"><a name=\"l01564\"></a><span class=\"lineno\"> 1564</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042\">incLastBroadcastMsgCounter</a> ();</div>\n<div class=\"line\"><a name=\"l01565\"></a><span class=\"lineno\"> 1565</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01566\"></a><span class=\"lineno\"> 1566</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01567\"></a><span class=\"lineno\"> 1567</span>&#160;        counter = (uint16_t)(<a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ());</div>\n<div class=\"line\"><a name=\"l01568\"></a><span class=\"lineno\"> 1568</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01569\"></a><span class=\"lineno\"> 1569</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Downlink message #%d&quot;</span>, counter);</div>\n<div class=\"line\"><a name=\"l01570\"></a><span class=\"lineno\"> 1570</span>&#160; </div>\n<div class=\"line\"><a name=\"l01571\"></a><span class=\"lineno\"> 1571</span>&#160;    memcpy (buffer + counter_idx, &amp;counter, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01572\"></a><span class=\"lineno\"> 1572</span>&#160; </div>\n<div class=\"line\"><a name=\"l01573\"></a><span class=\"lineno\"> 1573</span>&#160;    memcpy (buffer + data_idx, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l01574\"></a><span class=\"lineno\"> 1574</span>&#160; </div>\n<div class=\"line\"><a name=\"l01575\"></a><span class=\"lineno\"> 1575</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer + data_idx, len));</div>\n<div class=\"line\"><a name=\"l01576\"></a><span class=\"lineno\"> 1576</span>&#160; </div>\n<div class=\"line\"><a name=\"l01577\"></a><span class=\"lineno\"> 1577</span>&#160;    memcpy (buffer + length_idx, &amp;packet_length, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01578\"></a><span class=\"lineno\"> 1578</span>&#160; </div>\n<div class=\"line\"><a name=\"l01579\"></a><span class=\"lineno\"> 1579</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Downlink message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, packet_length));</div>\n<div class=\"line\"><a name=\"l01580\"></a><span class=\"lineno\"> 1580</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Message length: %d bytes&quot;</span>, packet_length);</div>\n<div class=\"line\"><a name=\"l01581\"></a><span class=\"lineno\"> 1581</span>&#160; </div>\n<div class=\"line\"><a name=\"l01582\"></a><span class=\"lineno\"> 1582</span>&#160;    <span class=\"comment\">//uint8_t* crypt_buf = buffer + length_idx;</span></div>\n<div class=\"line\"><a name=\"l01583\"></a><span class=\"lineno\"> 1583</span>&#160; </div>\n<div class=\"line\"><a name=\"l01584\"></a><span class=\"lineno\"> 1584</span>&#160;    <span class=\"comment\">//size_t cryptLen = packet_length - length_idx;</span></div>\n<div class=\"line\"><a name=\"l01585\"></a><span class=\"lineno\"> 1585</span>&#160; </div>\n<div class=\"line\"><a name=\"l01586\"></a><span class=\"lineno\"> 1586</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01587\"></a><span class=\"lineno\"> 1587</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01588\"></a><span class=\"lineno\"> 1588</span>&#160; </div>\n<div class=\"line\"><a name=\"l01589\"></a><span class=\"lineno\"> 1589</span>&#160;    memcpy (aad, buffer, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01590\"></a><span class=\"lineno\"> 1590</span>&#160; </div>\n<div class=\"line\"><a name=\"l01591\"></a><span class=\"lineno\"> 1591</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from Node Key</span></div>\n<div class=\"line\"><a name=\"l01592\"></a><span class=\"lineno\"> 1592</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01593\"></a><span class=\"lineno\"> 1593</span>&#160; </div>\n<div class=\"line\"><a name=\"l01594\"></a><span class=\"lineno\"> 1594</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a> (buffer + length_idx, packet_length - addDataLen, <span class=\"comment\">// Encrypt from length</span></div>\n<div class=\"line\"><a name=\"l01595\"></a><span class=\"lineno\"> 1595</span>&#160;                                     buffer + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01596\"></a><span class=\"lineno\"> 1596</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of node key</span></div>\n<div class=\"line\"><a name=\"l01597\"></a><span class=\"lineno\"> 1597</span>&#160;                                     aad, sizeof (aad), buffer + tag_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01598\"></a><span class=\"lineno\"> 1598</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during encryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01599\"></a><span class=\"lineno\"> 1599</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01600\"></a><span class=\"lineno\"> 1600</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01601\"></a><span class=\"lineno\"> 1601</span>&#160; </div>\n<div class=\"line\"><a name=\"l01602\"></a><span class=\"lineno\"> 1602</span>&#160;    <span class=\"comment\">//DEBUG_WARN (&quot;Encryption key: %s&quot;, printHexBuffer (node-&gt;getEncriptionKey (), KEY_LENGTH));</span></div>\n<div class=\"line\"><a name=\"l01603\"></a><span class=\"lineno\"> 1603</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Encrypted downlink message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, packet_length + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01604\"></a><span class=\"lineno\"> 1604</span>&#160; </div>\n<div class=\"line\"><a name=\"l01605\"></a><span class=\"lineno\"> 1605</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getSleepy ()) { <span class=\"comment\">// Queue message if node may be sleeping</span></div>\n<div class=\"line\"><a name=\"l01606\"></a><span class=\"lineno\"> 1606</span>&#160;        <span class=\"keywordflow\">if</span> (controlData != <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">control_message_type::OTA</a>) {</div>\n<div class=\"line\"><a name=\"l01607\"></a><span class=\"lineno\"> 1607</span>&#160;            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Node is sleepy. Queing message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01608\"></a><span class=\"lineno\"> 1608</span>&#160;            memcpy (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;queuedMessage, buffer, packet_length + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01609\"></a><span class=\"lineno\"> 1609</span>&#160;            <span class=\"comment\">//node-&gt;queuedMessage = buffer;</span></div>\n<div class=\"line\"><a name=\"l01610\"></a><span class=\"lineno\"> 1610</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;qMessageLength = packet_length + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01611\"></a><span class=\"lineno\"> 1611</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;qMessagePending = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01612\"></a><span class=\"lineno\"> 1612</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01613\"></a><span class=\"lineno\"> 1613</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01614\"></a><span class=\"lineno\"> 1614</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA is only possible with non sleepy nodes. Configure it accordingly first&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01615\"></a><span class=\"lineno\"> 1615</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01616\"></a><span class=\"lineno\"> 1616</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01617\"></a><span class=\"lineno\"> 1617</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01618\"></a><span class=\"lineno\"> 1618</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; DOWNLINK DATA&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01619\"></a><span class=\"lineno\"> 1619</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">flashTx</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01620\"></a><span class=\"lineno\"> 1620</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), buffer, packet_length + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>) == 0;</div>\n<div class=\"line\"><a name=\"l01621\"></a><span class=\"lineno\"> 1621</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01622\"></a><span class=\"lineno\"> 1622</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01623\"></a><span class=\"lineno\"> 1623</span>&#160; </div>\n<div class=\"line\"><a name=\"l01624\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\"> 1624</a></span>&#160;<span class=\"keywordtype\">bool</span>  <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">EnigmaIOTGatewayClass::invalidateKey</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l01625\"></a><span class=\"lineno\"> 1625</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01626\"></a><span class=\"lineno\"> 1626</span>&#160;<span class=\"comment\">    * --------------------------</span></div>\n<div class=\"line\"><a name=\"l01627\"></a><span class=\"lineno\"> 1627</span>&#160;<span class=\"comment\">    *| msgType (1) | reason (1) |</span></div>\n<div class=\"line\"><a name=\"l01628\"></a><span class=\"lineno\"> 1628</span>&#160;<span class=\"comment\">    * --------------------------</span></div>\n<div class=\"line\"><a name=\"l01629\"></a><span class=\"lineno\"> 1629</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01630\"></a><span class=\"lineno\"> 1630</span>&#160; </div>\n<div class=\"line\"><a name=\"l01631\"></a><span class=\"lineno\"> 1631</span>&#160;    <span class=\"comment\">// TODO: Encrypt using network key, adding some random data.This is to avoid DoS attack.</span></div>\n<div class=\"line\"><a name=\"l01632\"></a><span class=\"lineno\"> 1632</span>&#160;    <span class=\"comment\">// I have to investigate if this may really work.</span></div>\n<div class=\"line\"><a name=\"l01633\"></a><span class=\"lineno\"> 1633</span>&#160;    <span class=\"comment\">// Other options: </span></div>\n<div class=\"line\"><a name=\"l01634\"></a><span class=\"lineno\"> 1634</span>&#160;    <span class=\"comment\">//    - mark message using timestamp. May not work with gateways not connected to Internet.</span></div>\n<div class=\"line\"><a name=\"l01635\"></a><span class=\"lineno\"> 1635</span>&#160;    <span class=\"comment\">//    - Adding a number calculated from node message (a byte should be sufficient).</span></div>\n<div class=\"line\"><a name=\"l01636\"></a><span class=\"lineno\"> 1636</span>&#160;    <span class=\"comment\">//           For instance nth byte + 3. Most probable candidate</span></div>\n<div class=\"line\"><a name=\"l01637\"></a><span class=\"lineno\"> 1637</span>&#160; </div>\n<div class=\"line\"><a name=\"l01638\"></a><span class=\"lineno\"> 1638</span>&#160;    <span class=\"keyword\">struct </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01639\"></a><span class=\"lineno\"> 1639</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01640\"></a><span class=\"lineno\"> 1640</span>&#160;        uint8_t reason;</div>\n<div class=\"line\"><a name=\"l01641\"></a><span class=\"lineno\"> 1641</span>&#160;    } invalidateKey_msg;</div>\n<div class=\"line\"><a name=\"l01642\"></a><span class=\"lineno\"> 1642</span>&#160; </div>\n<div class=\"line\"><a name=\"l01643\"></a><span class=\"lineno\"> 1643</span>&#160;<span class=\"preprocessor\">#define IKMSG_LEN sizeof(invalidateKey_msg)</span></div>\n<div class=\"line\"><a name=\"l01644\"></a><span class=\"lineno\"> 1644</span>&#160; </div>\n<div class=\"line\"><a name=\"l01645\"></a><span class=\"lineno\"> 1645</span>&#160;    invalidateKey_msg.msgType = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\">INVALIDATE_KEY</a>; <span class=\"comment\">// Server hello message</span></div>\n<div class=\"line\"><a name=\"l01646\"></a><span class=\"lineno\"> 1646</span>&#160; </div>\n<div class=\"line\"><a name=\"l01647\"></a><span class=\"lineno\"> 1647</span>&#160;    invalidateKey_msg.reason = reason;</div>\n<div class=\"line\"><a name=\"l01648\"></a><span class=\"lineno\"> 1648</span>&#160; </div>\n<div class=\"line\"><a name=\"l01649\"></a><span class=\"lineno\"> 1649</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Invalidate Key message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;invalidateKey_msg, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">IKMSG_LEN</a>));</div>\n<div class=\"line\"><a name=\"l01650\"></a><span class=\"lineno\"> 1650</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; INVALIDATE_KEY&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01651\"></a><span class=\"lineno\"> 1651</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">notifyNodeDisconnection</a>) {</div>\n<div class=\"line\"><a name=\"l01652\"></a><span class=\"lineno\"> 1652</span>&#160;        uint8_t* mac = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress ();</div>\n<div class=\"line\"><a name=\"l01653\"></a><span class=\"lineno\"> 1653</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">notifyNodeDisconnection</a> (mac, reason);</div>\n<div class=\"line\"><a name=\"l01654\"></a><span class=\"lineno\"> 1654</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01655\"></a><span class=\"lineno\"> 1655</span>&#160;    int32_t error = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), (uint8_t*)&amp;invalidateKey_msg, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">IKMSG_LEN</a>) == 0;</div>\n<div class=\"line\"><a name=\"l01656\"></a><span class=\"lineno\"> 1656</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;reset ();</div>\n<div class=\"line\"><a name=\"l01657\"></a><span class=\"lineno\"> 1657</span>&#160;    <span class=\"keywordflow\">return</span> error;</div>\n<div class=\"line\"><a name=\"l01658\"></a><span class=\"lineno\"> 1658</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01659\"></a><span class=\"lineno\"> 1659</span>&#160; </div>\n<div class=\"line\"><a name=\"l01660\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\"> 1660</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\">EnigmaIOTGatewayClass::processClientHello</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* node) {</div>\n<div class=\"line\"><a name=\"l01661\"></a><span class=\"lineno\"> 1661</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01662\"></a><span class=\"lineno\"> 1662</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01663\"></a><span class=\"lineno\"> 1663</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | DH Kmaster (32) | Random (30 bits) | Broadcast (1 bit) | Sleepy (1 bit) | Tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01664\"></a><span class=\"lineno\"> 1664</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01665\"></a><span class=\"lineno\"> 1665</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01666\"></a><span class=\"lineno\"> 1666</span>&#160; </div>\n<div class=\"line\"><a name=\"l01667\"></a><span class=\"lineno\"> 1667</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">sleepyNode</a>;</div>\n<div class=\"line\"><a name=\"l01668\"></a><span class=\"lineno\"> 1668</span>&#160;    <span class=\"keywordtype\">bool</span> broadcast;</div>\n<div class=\"line\"><a name=\"l01669\"></a><span class=\"lineno\"> 1669</span>&#160; </div>\n<div class=\"line\"><a name=\"l01670\"></a><span class=\"lineno\"> 1670</span>&#160;    <span class=\"keyword\">struct </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01671\"></a><span class=\"lineno\"> 1671</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01672\"></a><span class=\"lineno\"> 1672</span>&#160;        uint8_t iv[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01673\"></a><span class=\"lineno\"> 1673</span>&#160;        uint8_t publicKey[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01674\"></a><span class=\"lineno\"> 1674</span>&#160;        uint32_t random;</div>\n<div class=\"line\"><a name=\"l01675\"></a><span class=\"lineno\"> 1675</span>&#160;        uint8_t tag[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01676\"></a><span class=\"lineno\"> 1676</span>&#160;    } clientHello_msg;</div>\n<div class=\"line\"><a name=\"l01677\"></a><span class=\"lineno\"> 1677</span>&#160; </div>\n<div class=\"line\"><a name=\"l01678\"></a><span class=\"lineno\"> 1678</span>&#160;<span class=\"preprocessor\">#define CHMSG_LEN sizeof(clientHello_msg)</span></div>\n<div class=\"line\"><a name=\"l01679\"></a><span class=\"lineno\"> 1679</span>&#160; </div>\n<div class=\"line\"><a name=\"l01680\"></a><span class=\"lineno\"> 1680</span>&#160;    <span class=\"keywordflow\">if</span> (count &lt; <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a>) {</div>\n<div class=\"line\"><a name=\"l01681\"></a><span class=\"lineno\"> 1681</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Message too short&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01682\"></a><span class=\"lineno\"> 1682</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01683\"></a><span class=\"lineno\"> 1683</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01684\"></a><span class=\"lineno\"> 1684</span>&#160; </div>\n<div class=\"line\"><a name=\"l01685\"></a><span class=\"lineno\"> 1685</span>&#160;    memcpy (&amp;clientHello_msg, buf, count);</div>\n<div class=\"line\"><a name=\"l01686\"></a><span class=\"lineno\"> 1686</span>&#160; </div>\n<div class=\"line\"><a name=\"l01687\"></a><span class=\"lineno\"> 1687</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a> - <span class=\"keyword\">sizeof</span> (uint32_t) - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01688\"></a><span class=\"lineno\"> 1688</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01689\"></a><span class=\"lineno\"> 1689</span>&#160; </div>\n<div class=\"line\"><a name=\"l01690\"></a><span class=\"lineno\"> 1690</span>&#160;    memcpy (aad, (uint8_t*)&amp;clientHello_msg, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01691\"></a><span class=\"lineno\"> 1691</span>&#160; </div>\n<div class=\"line\"><a name=\"l01692\"></a><span class=\"lineno\"> 1692</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from NetworkKey</span></div>\n<div class=\"line\"><a name=\"l01693\"></a><span class=\"lineno\"> 1693</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a> + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01694\"></a><span class=\"lineno\"> 1694</span>&#160; </div>\n<div class=\"line\"><a name=\"l01695\"></a><span class=\"lineno\"> 1695</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> (clientHello_msg.publicKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> + sizeof (uint32_t),</div>\n<div class=\"line\"><a name=\"l01696\"></a><span class=\"lineno\"> 1696</span>&#160;                                     clientHello_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01697\"></a><span class=\"lineno\"> 1697</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01698\"></a><span class=\"lineno\"> 1698</span>&#160;                                     aad, sizeof (aad), clientHello_msg.tag, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01699\"></a><span class=\"lineno\"> 1699</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during decryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01700\"></a><span class=\"lineno\"> 1700</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01701\"></a><span class=\"lineno\"> 1701</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01702\"></a><span class=\"lineno\"> 1702</span>&#160; </div>\n<div class=\"line\"><a name=\"l01703\"></a><span class=\"lineno\"> 1703</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Decrypted Client Hello message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clientHello_msg, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01704\"></a><span class=\"lineno\"> 1704</span>&#160; </div>\n<div class=\"line\"><a name=\"l01705\"></a><span class=\"lineno\"> 1705</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;reset ();</div>\n<div class=\"line\"><a name=\"l01706\"></a><span class=\"lineno\"> 1706</span>&#160; </div>\n<div class=\"line\"><a name=\"l01707\"></a><span class=\"lineno\"> 1707</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setEncryptionKey (clientHello_msg.publicKey);</div>\n<div class=\"line\"><a name=\"l01708\"></a><span class=\"lineno\"> 1708</span>&#160; </div>\n<div class=\"line\"><a name=\"l01709\"></a><span class=\"lineno\"> 1709</span>&#160;    <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">getDH1</a> ();</div>\n<div class=\"line\"><a name=\"l01710\"></a><span class=\"lineno\"> 1710</span>&#160;    memcpy (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">myPublicKey</a>, <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">getPubDHKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01711\"></a><span class=\"lineno\"> 1711</span>&#160; </div>\n<div class=\"line\"><a name=\"l01712\"></a><span class=\"lineno\"> 1712</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">getDH2</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey ())) {</div>\n<div class=\"line\"><a name=\"l01713\"></a><span class=\"lineno\"> 1713</span>&#160;        <a class=\"code\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01714\"></a><span class=\"lineno\"> 1714</span>&#160; </div>\n<div class=\"line\"><a name=\"l01715\"></a><span class=\"lineno\"> 1715</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setKeyValid (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l01716\"></a><span class=\"lineno\"> 1716</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setStatus (<a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">INIT</a>);</div>\n<div class=\"line\"><a name=\"l01717\"></a><span class=\"lineno\"> 1717</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01718\"></a><span class=\"lineno\"> 1718</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01719\"></a><span class=\"lineno\"> 1719</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">unregisterNode</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l01720\"></a><span class=\"lineno\"> 1720</span>&#160;        <span class=\"keywordtype\">char</span> macstr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l01721\"></a><span class=\"lineno\"> 1721</span>&#160;        <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> ((uint8_t*)mac, macstr);</div>\n<div class=\"line\"><a name=\"l01722\"></a><span class=\"lineno\"> 1722</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;DH2 error with %s&quot;</span>, macstr);</div>\n<div class=\"line\"><a name=\"l01723\"></a><span class=\"lineno\"> 1723</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01724\"></a><span class=\"lineno\"> 1724</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01725\"></a><span class=\"lineno\"> 1725</span>&#160; </div>\n<div class=\"line\"><a name=\"l01726\"></a><span class=\"lineno\"> 1726</span>&#160;    <a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">sleepyNode</a> = (clientHello_msg.random &amp; 0x00000001U) == 1;</div>\n<div class=\"line\"><a name=\"l01727\"></a><span class=\"lineno\"> 1727</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setInitAsSleepy (<a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">sleepyNode</a>);</div>\n<div class=\"line\"><a name=\"l01728\"></a><span class=\"lineno\"> 1728</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setSleepy (<a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">sleepyNode</a>);</div>\n<div class=\"line\"><a name=\"l01729\"></a><span class=\"lineno\"> 1729</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;This is a %s node&quot;</span>, <a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">sleepyNode</a> ? <span class=\"stringliteral\">&quot;sleepy&quot;</span> : <span class=\"stringliteral\">&quot;always awaken&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01730\"></a><span class=\"lineno\"> 1730</span>&#160; </div>\n<div class=\"line\"><a name=\"l01731\"></a><span class=\"lineno\"> 1731</span>&#160;    broadcast = (clientHello_msg.random &amp; 0x00000002U) == 2;</div>\n<div class=\"line\"><a name=\"l01732\"></a><span class=\"lineno\"> 1732</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;enableBroadcast (broadcast);</div>\n<div class=\"line\"><a name=\"l01733\"></a><span class=\"lineno\"> 1733</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setBroadcastKeyRequested (broadcast);</div>\n<div class=\"line\"><a name=\"l01734\"></a><span class=\"lineno\"> 1734</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;This node has broadcast mode %s&quot;</span>, broadcast ? <span class=\"stringliteral\">&quot;enabled&quot;</span> : <span class=\"stringliteral\">&quot;disabled&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01735\"></a><span class=\"lineno\"> 1735</span>&#160; </div>\n<div class=\"line\"><a name=\"l01736\"></a><span class=\"lineno\"> 1736</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01737\"></a><span class=\"lineno\"> 1737</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01738\"></a><span class=\"lineno\"> 1738</span>&#160; </div>\n<div class=\"line\"><a name=\"l01739\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\"> 1739</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\">EnigmaIOTGatewayClass::processClockRequest</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* node) {</div>\n<div class=\"line\"><a name=\"l01740\"></a><span class=\"lineno\"> 1740</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01741\"></a><span class=\"lineno\"> 1741</span>&#160;<span class=\"comment\">    * ---------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01742\"></a><span class=\"lineno\"> 1742</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | Counter (2) | T1 (8) | Tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01743\"></a><span class=\"lineno\"> 1743</span>&#160;<span class=\"comment\">    * ---------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01744\"></a><span class=\"lineno\"> 1744</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01745\"></a><span class=\"lineno\"> 1745</span>&#160;    <span class=\"keyword\">struct </span>timeval tv;</div>\n<div class=\"line\"><a name=\"l01746\"></a><span class=\"lineno\"> 1746</span>&#160;    <span class=\"comment\">//struct timezone tz;</span></div>\n<div class=\"line\"><a name=\"l01747\"></a><span class=\"lineno\"> 1747</span>&#160; </div>\n<div class=\"line\"><a name=\"l01748\"></a><span class=\"lineno\"> 1748</span>&#160;    <span class=\"keyword\">struct </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01749\"></a><span class=\"lineno\"> 1749</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01750\"></a><span class=\"lineno\"> 1750</span>&#160;        uint8_t iv[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01751\"></a><span class=\"lineno\"> 1751</span>&#160;        uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01752\"></a><span class=\"lineno\"> 1752</span>&#160;        int64_t t1;</div>\n<div class=\"line\"><a name=\"l01753\"></a><span class=\"lineno\"> 1753</span>&#160;        uint8_t tag[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01754\"></a><span class=\"lineno\"> 1754</span>&#160;    } clockRequest_msg;</div>\n<div class=\"line\"><a name=\"l01755\"></a><span class=\"lineno\"> 1755</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01756\"></a><span class=\"lineno\"> 1756</span>&#160; </div>\n<div class=\"line\"><a name=\"l01757\"></a><span class=\"lineno\"> 1757</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> CRMSG_LEN = <span class=\"keyword\">sizeof</span> (clockRequest_msg);</div>\n<div class=\"line\"><a name=\"l01758\"></a><span class=\"lineno\"> 1758</span>&#160; </div>\n<div class=\"line\"><a name=\"l01759\"></a><span class=\"lineno\"> 1759</span>&#160;    <span class=\"keywordflow\">if</span> (count &lt; CRMSG_LEN) {</div>\n<div class=\"line\"><a name=\"l01760\"></a><span class=\"lineno\"> 1760</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Message too short&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01761\"></a><span class=\"lineno\"> 1761</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01762\"></a><span class=\"lineno\"> 1762</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01763\"></a><span class=\"lineno\"> 1763</span>&#160;    </div>\n<div class=\"line\"><a name=\"l01764\"></a><span class=\"lineno\"> 1764</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setTimeSyncEnabled ();</div>\n<div class=\"line\"><a name=\"l01765\"></a><span class=\"lineno\"> 1765</span>&#160;    </div>\n<div class=\"line\"><a name=\"l01766\"></a><span class=\"lineno\"> 1766</span>&#160;    <span class=\"comment\">// Get current time. If Gateway is synchronized to NTP server it sends real world time.</span></div>\n<div class=\"line\"><a name=\"l01767\"></a><span class=\"lineno\"> 1767</span>&#160;    gettimeofday (&amp;tv, NULL);</div>\n<div class=\"line\"><a name=\"l01768\"></a><span class=\"lineno\"> 1768</span>&#160;    int64_t t2 = tv.tv_sec;</div>\n<div class=\"line\"><a name=\"l01769\"></a><span class=\"lineno\"> 1769</span>&#160;    t2 *= 1000000L;</div>\n<div class=\"line\"><a name=\"l01770\"></a><span class=\"lineno\"> 1770</span>&#160;    t2 += tv.tv_usec;</div>\n<div class=\"line\"><a name=\"l01771\"></a><span class=\"lineno\"> 1771</span>&#160; </div>\n<div class=\"line\"><a name=\"l01772\"></a><span class=\"lineno\"> 1772</span>&#160; </div>\n<div class=\"line\"><a name=\"l01773\"></a><span class=\"lineno\"> 1773</span>&#160;    <span class=\"comment\">//CryptModule::random (clockRequest_msg.iv, IV_LENGTH);</span></div>\n<div class=\"line\"><a name=\"l01774\"></a><span class=\"lineno\"> 1774</span>&#160; </div>\n<div class=\"line\"><a name=\"l01775\"></a><span class=\"lineno\"> 1775</span>&#160;    memcpy (&amp;clockRequest_msg, buf, count);</div>\n<div class=\"line\"><a name=\"l01776\"></a><span class=\"lineno\"> 1776</span>&#160; </div>\n<div class=\"line\"><a name=\"l01777\"></a><span class=\"lineno\"> 1777</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;IV: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (clockRequest_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01778\"></a><span class=\"lineno\"> 1778</span>&#160; </div>\n<div class=\"line\"><a name=\"l01779\"></a><span class=\"lineno\"> 1779</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01780\"></a><span class=\"lineno\"> 1780</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01781\"></a><span class=\"lineno\"> 1781</span>&#160; </div>\n<div class=\"line\"><a name=\"l01782\"></a><span class=\"lineno\"> 1782</span>&#160;    memcpy (aad, buf, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01783\"></a><span class=\"lineno\"> 1783</span>&#160; </div>\n<div class=\"line\"><a name=\"l01784\"></a><span class=\"lineno\"> 1784</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from NetworkKey</span></div>\n<div class=\"line\"><a name=\"l01785\"></a><span class=\"lineno\"> 1785</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01786\"></a><span class=\"lineno\"> 1786</span>&#160; </div>\n<div class=\"line\"><a name=\"l01787\"></a><span class=\"lineno\"> 1787</span>&#160;    <span class=\"comment\">//uint8_t packetLen = count - TAG_LENGTH;</span></div>\n<div class=\"line\"><a name=\"l01788\"></a><span class=\"lineno\"> 1788</span>&#160; </div>\n<div class=\"line\"><a name=\"l01789\"></a><span class=\"lineno\"> 1789</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> ((uint8_t*)&amp;(clockRequest_msg.counter), CRMSG_LEN - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a> - 1, <span class=\"comment\">// Decrypt from counter, 10 bytes</span></div>\n<div class=\"line\"><a name=\"l01790\"></a><span class=\"lineno\"> 1790</span>&#160;                                     clockRequest_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01791\"></a><span class=\"lineno\"> 1791</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01792\"></a><span class=\"lineno\"> 1792</span>&#160;                                     aad, sizeof (aad), clockRequest_msg.tag, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01793\"></a><span class=\"lineno\"> 1793</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during decryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01794\"></a><span class=\"lineno\"> 1794</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01795\"></a><span class=\"lineno\"> 1795</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01796\"></a><span class=\"lineno\"> 1796</span>&#160; </div>\n<div class=\"line\"><a name=\"l01797\"></a><span class=\"lineno\"> 1797</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Decripted Clock Request message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clockRequest_msg, count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01798\"></a><span class=\"lineno\"> 1798</span>&#160; </div>\n<div class=\"line\"><a name=\"l01799\"></a><span class=\"lineno\"> 1799</span>&#160;    memcpy (&amp;counter, &amp;(clockRequest_msg.counter), sizeof (uint16_t));</div>\n<div class=\"line\"><a name=\"l01800\"></a><span class=\"lineno\"> 1800</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Node Id %d. Control message #%d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeId (), counter);</div>\n<div class=\"line\"><a name=\"l01801\"></a><span class=\"lineno\"> 1801</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01802\"></a><span class=\"lineno\"> 1802</span>&#160;        <span class=\"keywordflow\">if</span> (counter &gt; <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastControlCounter ()) {</div>\n<div class=\"line\"><a name=\"l01803\"></a><span class=\"lineno\"> 1803</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Accepted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01804\"></a><span class=\"lineno\"> 1804</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastControlCounter (counter);</div>\n<div class=\"line\"><a name=\"l01805\"></a><span class=\"lineno\"> 1805</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01806\"></a><span class=\"lineno\"> 1806</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Control message rejected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01807\"></a><span class=\"lineno\"> 1807</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01808\"></a><span class=\"lineno\"> 1808</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01809\"></a><span class=\"lineno\"> 1809</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01810\"></a><span class=\"lineno\"> 1810</span>&#160; </div>\n<div class=\"line\"><a name=\"l01811\"></a><span class=\"lineno\"> 1811</span>&#160;    <span class=\"comment\">//node-&gt;t1 = clockRequest_msg.t1;</span></div>\n<div class=\"line\"><a name=\"l01812\"></a><span class=\"lineno\"> 1812</span>&#160; </div>\n<div class=\"line\"><a name=\"l01813\"></a><span class=\"lineno\"> 1813</span>&#160;    <span class=\"comment\">//node-&gt;t2 = time_us;</span></div>\n<div class=\"line\"><a name=\"l01814\"></a><span class=\"lineno\"> 1814</span>&#160; </div>\n<div class=\"line\"><a name=\"l01815\"></a><span class=\"lineno\"> 1815</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T1: %llu&quot;</span>, clockRequest_msg.t1);</div>\n<div class=\"line\"><a name=\"l01816\"></a><span class=\"lineno\"> 1816</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T2: %llu&quot;</span>, t2);</div>\n<div class=\"line\"><a name=\"l01817\"></a><span class=\"lineno\"> 1817</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Clock Request message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clockRequest_msg, CRMSG_LEN - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01818\"></a><span class=\"lineno\"> 1818</span>&#160; </div>\n<div class=\"line\"><a name=\"l01819\"></a><span class=\"lineno\"> 1819</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\">clockResponse</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, clockRequest_msg.t1, t2);</div>\n<div class=\"line\"><a name=\"l01820\"></a><span class=\"lineno\"> 1820</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01821\"></a><span class=\"lineno\"> 1821</span>&#160; </div>\n<div class=\"line\"><a name=\"l01822\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\"> 1822</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\">EnigmaIOTGatewayClass::clockResponse</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node, uint64_t t1, uint64_t t2) {</div>\n<div class=\"line\"><a name=\"l01823\"></a><span class=\"lineno\"> 1823</span>&#160;    <span class=\"keyword\">struct </span>timeval tv;</div>\n<div class=\"line\"><a name=\"l01824\"></a><span class=\"lineno\"> 1824</span>&#160;    <span class=\"comment\">//struct timezone tz;</span></div>\n<div class=\"line\"><a name=\"l01825\"></a><span class=\"lineno\"> 1825</span>&#160; </div>\n<div class=\"line\"><a name=\"l01826\"></a><span class=\"lineno\"> 1826</span>&#160;    <span class=\"keyword\">struct </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01827\"></a><span class=\"lineno\"> 1827</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01828\"></a><span class=\"lineno\"> 1828</span>&#160;        uint8_t iv[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01829\"></a><span class=\"lineno\"> 1829</span>&#160;        uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01830\"></a><span class=\"lineno\"> 1830</span>&#160;        int64_t t1;</div>\n<div class=\"line\"><a name=\"l01831\"></a><span class=\"lineno\"> 1831</span>&#160;        int64_t t2;</div>\n<div class=\"line\"><a name=\"l01832\"></a><span class=\"lineno\"> 1832</span>&#160;        int64_t t3;</div>\n<div class=\"line\"><a name=\"l01833\"></a><span class=\"lineno\"> 1833</span>&#160;        uint8_t tag[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01834\"></a><span class=\"lineno\"> 1834</span>&#160;    } clockResponse_msg;</div>\n<div class=\"line\"><a name=\"l01835\"></a><span class=\"lineno\"> 1835</span>&#160; </div>\n<div class=\"line\"><a name=\"l01836\"></a><span class=\"lineno\"> 1836</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01837\"></a><span class=\"lineno\"> 1837</span>&#160; </div>\n<div class=\"line\"><a name=\"l01838\"></a><span class=\"lineno\"> 1838</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> CRSMSG_LEN = <span class=\"keyword\">sizeof</span> (clockResponse_msg);</div>\n<div class=\"line\"><a name=\"l01839\"></a><span class=\"lineno\"> 1839</span>&#160; </div>\n<div class=\"line\"><a name=\"l01840\"></a><span class=\"lineno\"> 1840</span>&#160;    clockResponse_msg.msgType = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\">CLOCK_RESPONSE</a>;</div>\n<div class=\"line\"><a name=\"l01841\"></a><span class=\"lineno\"> 1841</span>&#160; </div>\n<div class=\"line\"><a name=\"l01842\"></a><span class=\"lineno\"> 1842</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01843\"></a><span class=\"lineno\"> 1843</span>&#160;        counter = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getLastDownlinkMsgCounter () + 1;</div>\n<div class=\"line\"><a name=\"l01844\"></a><span class=\"lineno\"> 1844</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;setLastDownlinkMsgCounter (counter);</div>\n<div class=\"line\"><a name=\"l01845\"></a><span class=\"lineno\"> 1845</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01846\"></a><span class=\"lineno\"> 1846</span>&#160;        counter = (uint16_t)(<a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ());</div>\n<div class=\"line\"><a name=\"l01847\"></a><span class=\"lineno\"> 1847</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01848\"></a><span class=\"lineno\"> 1848</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Downlink message #%d&quot;</span>, counter);</div>\n<div class=\"line\"><a name=\"l01849\"></a><span class=\"lineno\"> 1849</span>&#160; </div>\n<div class=\"line\"><a name=\"l01850\"></a><span class=\"lineno\"> 1850</span>&#160;    memcpy (&amp;(clockResponse_msg.counter), &amp;counter, sizeof (uint16_t));</div>\n<div class=\"line\"><a name=\"l01851\"></a><span class=\"lineno\"> 1851</span>&#160;    </div>\n<div class=\"line\"><a name=\"l01852\"></a><span class=\"lineno\"> 1852</span>&#160;    memcpy (&amp;(clockResponse_msg.t1), &amp;t1, sizeof (int64_t));</div>\n<div class=\"line\"><a name=\"l01853\"></a><span class=\"lineno\"> 1853</span>&#160; </div>\n<div class=\"line\"><a name=\"l01854\"></a><span class=\"lineno\"> 1854</span>&#160;    memcpy (&amp;(clockResponse_msg.t2), &amp;t2, sizeof (int64_t));</div>\n<div class=\"line\"><a name=\"l01855\"></a><span class=\"lineno\"> 1855</span>&#160; </div>\n<div class=\"line\"><a name=\"l01856\"></a><span class=\"lineno\"> 1856</span>&#160;    <span class=\"comment\">// Get current time. If Gateway is synchronized to NTP server it sends real world time.</span></div>\n<div class=\"line\"><a name=\"l01857\"></a><span class=\"lineno\"> 1857</span>&#160;    gettimeofday (&amp;tv, NULL);</div>\n<div class=\"line\"><a name=\"l01858\"></a><span class=\"lineno\"> 1858</span>&#160;    int64_t t3 = tv.tv_sec;</div>\n<div class=\"line\"><a name=\"l01859\"></a><span class=\"lineno\"> 1859</span>&#160;    t3 *= 1000000L;</div>\n<div class=\"line\"><a name=\"l01860\"></a><span class=\"lineno\"> 1860</span>&#160;    t3 += tv.tv_usec;</div>\n<div class=\"line\"><a name=\"l01861\"></a><span class=\"lineno\"> 1861</span>&#160; </div>\n<div class=\"line\"><a name=\"l01862\"></a><span class=\"lineno\"> 1862</span>&#160;    memcpy (&amp;(clockResponse_msg.t3), &amp;t3, sizeof (int64_t));</div>\n<div class=\"line\"><a name=\"l01863\"></a><span class=\"lineno\"> 1863</span>&#160; </div>\n<div class=\"line\"><a name=\"l01864\"></a><span class=\"lineno\"> 1864</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Clock Response message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clockResponse_msg, CRSMSG_LEN - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01865\"></a><span class=\"lineno\"> 1865</span>&#160; </div>\n<div class=\"line\"><a name=\"l01866\"></a><span class=\"lineno\"> 1866</span>&#160;<span class=\"preprocessor\">#ifdef DEBUG_ESP_PORT</span></div>\n<div class=\"line\"><a name=\"l01867\"></a><span class=\"lineno\"> 1867</span>&#160;    <span class=\"keywordtype\">char</span> mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l01868\"></a><span class=\"lineno\"> 1868</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), mac);</div>\n<div class=\"line\"><a name=\"l01869\"></a><span class=\"lineno\"> 1869</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l01870\"></a><span class=\"lineno\"> 1870</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T1: %llu&quot;</span>, t1);</div>\n<div class=\"line\"><a name=\"l01871\"></a><span class=\"lineno\"> 1871</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T2: %llu&quot;</span>, t2);</div>\n<div class=\"line\"><a name=\"l01872\"></a><span class=\"lineno\"> 1872</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T3: %llu&quot;</span>, t3);</div>\n<div class=\"line\"><a name=\"l01873\"></a><span class=\"lineno\"> 1873</span>&#160; </div>\n<div class=\"line\"><a name=\"l01874\"></a><span class=\"lineno\"> 1874</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01875\"></a><span class=\"lineno\"> 1875</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01876\"></a><span class=\"lineno\"> 1876</span>&#160; </div>\n<div class=\"line\"><a name=\"l01877\"></a><span class=\"lineno\"> 1877</span>&#160;    memcpy (aad, (uint8_t*)&amp;clockResponse_msg, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01878\"></a><span class=\"lineno\"> 1878</span>&#160; </div>\n<div class=\"line\"><a name=\"l01879\"></a><span class=\"lineno\"> 1879</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from NetworkKey</span></div>\n<div class=\"line\"><a name=\"l01880\"></a><span class=\"lineno\"> 1880</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01881\"></a><span class=\"lineno\"> 1881</span>&#160; </div>\n<div class=\"line\"><a name=\"l01882\"></a><span class=\"lineno\"> 1882</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a> ((uint8_t*)&amp;(clockResponse_msg.counter), CRSMSG_LEN - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a> - 1, <span class=\"comment\">// Encrypt only from counter, 18 bytes</span></div>\n<div class=\"line\"><a name=\"l01883\"></a><span class=\"lineno\"> 1883</span>&#160;                                     clockResponse_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01884\"></a><span class=\"lineno\"> 1884</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getEncriptionKey (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01885\"></a><span class=\"lineno\"> 1885</span>&#160;                                     aad, sizeof (aad), clockResponse_msg.tag, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01886\"></a><span class=\"lineno\"> 1886</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during encryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01887\"></a><span class=\"lineno\"> 1887</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01888\"></a><span class=\"lineno\"> 1888</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01889\"></a><span class=\"lineno\"> 1889</span>&#160; </div>\n<div class=\"line\"><a name=\"l01890\"></a><span class=\"lineno\"> 1890</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Encrypted Clock Response message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clockResponse_msg, CRSMSG_LEN));</div>\n<div class=\"line\"><a name=\"l01891\"></a><span class=\"lineno\"> 1891</span>&#160; </div>\n<div class=\"line\"><a name=\"l01892\"></a><span class=\"lineno\"> 1892</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; CLOCK RESPONSE&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01893\"></a><span class=\"lineno\"> 1893</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), (uint8_t*)&amp;clockResponse_msg, CRSMSG_LEN) == 0) {</div>\n<div class=\"line\"><a name=\"l01894\"></a><span class=\"lineno\"> 1894</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Clock Response message sent to %s&quot;</span>, mac);</div>\n<div class=\"line\"><a name=\"l01895\"></a><span class=\"lineno\"> 1895</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01896\"></a><span class=\"lineno\"> 1896</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01897\"></a><span class=\"lineno\"> 1897</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">unregisterNode</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l01898\"></a><span class=\"lineno\"> 1898</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error sending Clock Response message to %s&quot;</span>, mac);</div>\n<div class=\"line\"><a name=\"l01899\"></a><span class=\"lineno\"> 1899</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01900\"></a><span class=\"lineno\"> 1900</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01901\"></a><span class=\"lineno\"> 1901</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01902\"></a><span class=\"lineno\"> 1902</span>&#160; </div>\n<div class=\"line\"><a name=\"l01903\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\"> 1903</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\">EnigmaIOTGatewayClass::sendBroadcastKey</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node) {</div>\n<div class=\"line\"><a name=\"l01904\"></a><span class=\"lineno\"> 1904</span>&#160; </div>\n<div class=\"line\"><a name=\"l01905\"></a><span class=\"lineno\"> 1905</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Send broadcast key to &quot;</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a>, MAC2STR (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress ()));</div>\n<div class=\"line\"><a name=\"l01906\"></a><span class=\"lineno\"> 1906</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">sendDownstream</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), NULL, 0, <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">control_message_type_t::BRCAST_KEY</a>);</div>\n<div class=\"line\"><a name=\"l01907\"></a><span class=\"lineno\"> 1907</span>&#160; </div>\n<div class=\"line\"><a name=\"l01908\"></a><span class=\"lineno\"> 1908</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01909\"></a><span class=\"lineno\"> 1909</span>&#160; </div>\n<div class=\"line\"><a name=\"l01910\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\"> 1910</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\">EnigmaIOTGatewayClass::serverHello</a> (<span class=\"keyword\">const</span> uint8_t* key, <a class=\"code\" href=\"classNode.html\">Node</a>* node) {</div>\n<div class=\"line\"><a name=\"l01911\"></a><span class=\"lineno\"> 1911</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01912\"></a><span class=\"lineno\"> 1912</span>&#160;<span class=\"comment\">    * -----------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01913\"></a><span class=\"lineno\"> 1913</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | DH Kslave (32) | NodeID (2) | Random (4) | Tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01914\"></a><span class=\"lineno\"> 1914</span>&#160;<span class=\"comment\">    * -----------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01915\"></a><span class=\"lineno\"> 1915</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01916\"></a><span class=\"lineno\"> 1916</span>&#160; </div>\n<div class=\"line\"><a name=\"l01917\"></a><span class=\"lineno\"> 1917</span>&#160;    <span class=\"keyword\">struct </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01918\"></a><span class=\"lineno\"> 1918</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01919\"></a><span class=\"lineno\"> 1919</span>&#160;        uint8_t iv[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01920\"></a><span class=\"lineno\"> 1920</span>&#160;        uint8_t publicKey[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01921\"></a><span class=\"lineno\"> 1921</span>&#160;        uint16_t nodeId;</div>\n<div class=\"line\"><a name=\"l01922\"></a><span class=\"lineno\"> 1922</span>&#160;        uint32_t random;</div>\n<div class=\"line\"><a name=\"l01923\"></a><span class=\"lineno\"> 1923</span>&#160;        uint8_t tag[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01924\"></a><span class=\"lineno\"> 1924</span>&#160;    } serverHello_msg;</div>\n<div class=\"line\"><a name=\"l01925\"></a><span class=\"lineno\"> 1925</span>&#160; </div>\n<div class=\"line\"><a name=\"l01926\"></a><span class=\"lineno\"> 1926</span>&#160;<span class=\"preprocessor\">#define SHMSG_LEN sizeof(serverHello_msg)</span></div>\n<div class=\"line\"><a name=\"l01927\"></a><span class=\"lineno\"> 1927</span>&#160; </div>\n<div class=\"line\"><a name=\"l01928\"></a><span class=\"lineno\"> 1928</span>&#160;    uint32_t random;</div>\n<div class=\"line\"><a name=\"l01929\"></a><span class=\"lineno\"> 1929</span>&#160; </div>\n<div class=\"line\"><a name=\"l01930\"></a><span class=\"lineno\"> 1930</span>&#160;    <span class=\"keywordflow\">if</span> (!key) {</div>\n<div class=\"line\"><a name=\"l01931\"></a><span class=\"lineno\"> 1931</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;NULL key&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01932\"></a><span class=\"lineno\"> 1932</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01933\"></a><span class=\"lineno\"> 1933</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01934\"></a><span class=\"lineno\"> 1934</span>&#160; </div>\n<div class=\"line\"><a name=\"l01935\"></a><span class=\"lineno\"> 1935</span>&#160;    serverHello_msg.msgType = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\">SERVER_HELLO</a>; <span class=\"comment\">// Server hello message</span></div>\n<div class=\"line\"><a name=\"l01936\"></a><span class=\"lineno\"> 1936</span>&#160; </div>\n<div class=\"line\"><a name=\"l01937\"></a><span class=\"lineno\"> 1937</span>&#160;    <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a> (serverHello_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01938\"></a><span class=\"lineno\"> 1938</span>&#160; </div>\n<div class=\"line\"><a name=\"l01939\"></a><span class=\"lineno\"> 1939</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;IV: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (serverHello_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01940\"></a><span class=\"lineno\"> 1940</span>&#160; </div>\n<div class=\"line\"><a name=\"l01941\"></a><span class=\"lineno\"> 1941</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>; i++) {</div>\n<div class=\"line\"><a name=\"l01942\"></a><span class=\"lineno\"> 1942</span>&#160;        serverHello_msg.publicKey[i] = key[i];</div>\n<div class=\"line\"><a name=\"l01943\"></a><span class=\"lineno\"> 1943</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01944\"></a><span class=\"lineno\"> 1944</span>&#160; </div>\n<div class=\"line\"><a name=\"l01945\"></a><span class=\"lineno\"> 1945</span>&#160;    uint16_t nodeId = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getNodeId ();</div>\n<div class=\"line\"><a name=\"l01946\"></a><span class=\"lineno\"> 1946</span>&#160;    memcpy (&amp;(serverHello_msg.nodeId), &amp;nodeId, sizeof (uint16_t));</div>\n<div class=\"line\"><a name=\"l01947\"></a><span class=\"lineno\"> 1947</span>&#160; </div>\n<div class=\"line\"><a name=\"l01948\"></a><span class=\"lineno\"> 1948</span>&#160;    random = <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ();</div>\n<div class=\"line\"><a name=\"l01949\"></a><span class=\"lineno\"> 1949</span>&#160;    memcpy (&amp;(serverHello_msg.random), &amp;random, <a class=\"code\" href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">RANDOM_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01950\"></a><span class=\"lineno\"> 1950</span>&#160; </div>\n<div class=\"line\"><a name=\"l01951\"></a><span class=\"lineno\"> 1951</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Server Hello message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;serverHello_msg, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01952\"></a><span class=\"lineno\"> 1952</span>&#160; </div>\n<div class=\"line\"><a name=\"l01953\"></a><span class=\"lineno\"> 1953</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a> - <span class=\"keyword\">sizeof</span> (uint32_t) - <span class=\"keyword\">sizeof</span> (uint16_t) - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01954\"></a><span class=\"lineno\"> 1954</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01955\"></a><span class=\"lineno\"> 1955</span>&#160; </div>\n<div class=\"line\"><a name=\"l01956\"></a><span class=\"lineno\"> 1956</span>&#160;    memcpy (aad, (uint8_t*)&amp;serverHello_msg, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01957\"></a><span class=\"lineno\"> 1957</span>&#160; </div>\n<div class=\"line\"><a name=\"l01958\"></a><span class=\"lineno\"> 1958</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from NetworkKey</span></div>\n<div class=\"line\"><a name=\"l01959\"></a><span class=\"lineno\"> 1959</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a> + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01960\"></a><span class=\"lineno\"> 1960</span>&#160; </div>\n<div class=\"line\"><a name=\"l01961\"></a><span class=\"lineno\"> 1961</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a> (serverHello_msg.publicKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> + sizeof (uint16_t) + <span class=\"keyword\">sizeof</span> (uint32_t), <span class=\"comment\">// Encrypt from public key</span></div>\n<div class=\"line\"><a name=\"l01962\"></a><span class=\"lineno\"> 1962</span>&#160;                                     serverHello_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01963\"></a><span class=\"lineno\"> 1963</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01964\"></a><span class=\"lineno\"> 1964</span>&#160;                                     aad, sizeof (aad), serverHello_msg.tag, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01965\"></a><span class=\"lineno\"> 1965</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during encryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01966\"></a><span class=\"lineno\"> 1966</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01967\"></a><span class=\"lineno\"> 1967</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01968\"></a><span class=\"lineno\"> 1968</span>&#160; </div>\n<div class=\"line\"><a name=\"l01969\"></a><span class=\"lineno\"> 1969</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Encrypted Server Hello message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;serverHello_msg, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a>));</div>\n<div class=\"line\"><a name=\"l01970\"></a><span class=\"lineno\"> 1970</span>&#160; </div>\n<div class=\"line\"><a name=\"l01971\"></a><span class=\"lineno\"> 1971</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">flashTx</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01972\"></a><span class=\"lineno\"> 1972</span>&#160; </div>\n<div class=\"line\"><a name=\"l01973\"></a><span class=\"lineno\"> 1973</span>&#160;<span class=\"preprocessor\">#ifdef DEBUG_ESP_PORT</span></div>\n<div class=\"line\"><a name=\"l01974\"></a><span class=\"lineno\"> 1974</span>&#160;    <span class=\"keywordtype\">char</span> mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l01975\"></a><span class=\"lineno\"> 1975</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), mac);</div>\n<div class=\"line\"><a name=\"l01976\"></a><span class=\"lineno\"> 1976</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l01977\"></a><span class=\"lineno\"> 1977</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; SERVER_HELLO&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01978\"></a><span class=\"lineno\"> 1978</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>-&gt;getMacAddress (), (uint8_t*)&amp;serverHello_msg, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a>) == 0) {</div>\n<div class=\"line\"><a name=\"l01979\"></a><span class=\"lineno\"> 1979</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Server Hello message sent to %s&quot;</span>, mac);</div>\n<div class=\"line\"><a name=\"l01980\"></a><span class=\"lineno\"> 1980</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01981\"></a><span class=\"lineno\"> 1981</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01982\"></a><span class=\"lineno\"> 1982</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">unregisterNode</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l01983\"></a><span class=\"lineno\"> 1983</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error sending Server Hello message to %s&quot;</span>, mac);</div>\n<div class=\"line\"><a name=\"l01984\"></a><span class=\"lineno\"> 1984</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01985\"></a><span class=\"lineno\"> 1985</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01986\"></a><span class=\"lineno\"> 1986</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01987\"></a><span class=\"lineno\"> 1987</span>&#160; </div>\n<div class=\"line\"><a name=\"l01988\"></a><span class=\"lineno\"> 1988</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l01989\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\"> 1989</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\">EnigmaIOTGatewayClass::sendHADiscoveryJSON</a> (uint8_t* address, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName) {</div>\n<div class=\"line\"><a name=\"l01990\"></a><span class=\"lineno\"> 1990</span>&#160;    DynamicJsonDocument inputJSON (1024);</div>\n<div class=\"line\"><a name=\"l01991\"></a><span class=\"lineno\"> 1991</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> jsonBufferSize = 1024;</div>\n<div class=\"line\"><a name=\"l01992\"></a><span class=\"lineno\"> 1992</span>&#160;    <span class=\"keywordtype\">char</span> jsonStringBuffer[jsonBufferSize];</div>\n<div class=\"line\"><a name=\"l01993\"></a><span class=\"lineno\"> 1993</span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> deviceType;</div>\n<div class=\"line\"><a name=\"l01994\"></a><span class=\"lineno\"> 1994</span>&#160; </div>\n<div class=\"line\"><a name=\"l01995\"></a><span class=\"lineno\"> 1995</span>&#160;    DeserializationError result = deserializeMsgPack (inputJSON, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l01996\"></a><span class=\"lineno\"> 1996</span>&#160; </div>\n<div class=\"line\"><a name=\"l01997\"></a><span class=\"lineno\"> 1997</span>&#160;    <span class=\"keywordflow\">if</span> (result != DeserializationError::Ok) {</div>\n<div class=\"line\"><a name=\"l01998\"></a><span class=\"lineno\"> 1998</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error decoding HA discovery message: %s&quot;</span>, result.c_str ());</div>\n<div class=\"line\"><a name=\"l01999\"></a><span class=\"lineno\"> 1999</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02000\"></a><span class=\"lineno\"> 2000</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02001\"></a><span class=\"lineno\"> 2001</span>&#160;    </div>\n<div class=\"line\"><a name=\"l02002\"></a><span class=\"lineno\"> 2002</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Entity name: %s&quot;</span>, nodeName ? nodeName : <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (address));</div>\n<div class=\"line\"><a name=\"l02003\"></a><span class=\"lineno\"> 2003</span>&#160; </div>\n<div class=\"line\"><a name=\"l02004\"></a><span class=\"lineno\"> 2004</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON.containsKey (<a class=\"code\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a>)) {</div>\n<div class=\"line\"><a name=\"l02005\"></a><span class=\"lineno\"> 2005</span>&#160;        deviceType = inputJSON[<a class=\"code\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a>];</div>\n<div class=\"line\"><a name=\"l02006\"></a><span class=\"lineno\"> 2006</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Device Type: %d&quot;</span>, deviceType);</div>\n<div class=\"line\"><a name=\"l02007\"></a><span class=\"lineno\"> 2007</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02008\"></a><span class=\"lineno\"> 2008</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Device type error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02009\"></a><span class=\"lineno\"> 2009</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02010\"></a><span class=\"lineno\"> 2010</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02011\"></a><span class=\"lineno\"> 2011</span>&#160; </div>\n<div class=\"line\"><a name=\"l02012\"></a><span class=\"lineno\"> 2012</span>&#160;    String topic = <a class=\"code\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">HAEntity::getDiscoveryTopic</a> (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020\">HA_DISCOVERY_PREFIX</a>, nodeName ? nodeName : <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a>(address), deviceType, inputJSON.containsKey (<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>) ? inputJSON[<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>] : (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> *) NULL);</div>\n<div class=\"line\"><a name=\"l02013\"></a><span class=\"lineno\"> 2013</span>&#160; </div>\n<div class=\"line\"><a name=\"l02014\"></a><span class=\"lineno\"> 2014</span>&#160;    <span class=\"keywordtype\">size_t</span> jsonStrLen;</div>\n<div class=\"line\"><a name=\"l02015\"></a><span class=\"lineno\"> 2015</span>&#160;    </div>\n<div class=\"line\"><a name=\"l02016\"></a><span class=\"lineno\"> 2016</span>&#160;    <span class=\"keywordflow\">switch</span> (deviceType) {</div>\n<div class=\"line\"><a name=\"l02017\"></a><span class=\"lineno\"> 2017</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">BINARY_SENSOR</a>:</div>\n<div class=\"line\"><a name=\"l02018\"></a><span class=\"lineno\"> 2018</span>&#160;        jsonStrLen = <a class=\"code\" href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">HABinarySensor::getDiscoveryJson</a> (jsonStringBuffer, jsonBufferSize, nodeName ? nodeName : <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (address), networkName, &amp;inputJSON);</div>\n<div class=\"line\"><a name=\"l02019\"></a><span class=\"lineno\"> 2019</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02020\"></a><span class=\"lineno\"> 2020</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">SENSOR</a>:</div>\n<div class=\"line\"><a name=\"l02021\"></a><span class=\"lineno\"> 2021</span>&#160;        jsonStrLen = <a class=\"code\" href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">HASensor::getDiscoveryJson</a> (jsonStringBuffer, jsonBufferSize, nodeName ? nodeName : <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (address), networkName, &amp;inputJSON);</div>\n<div class=\"line\"><a name=\"l02022\"></a><span class=\"lineno\"> 2022</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02023\"></a><span class=\"lineno\"> 2023</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">COVER</a>:</div>\n<div class=\"line\"><a name=\"l02024\"></a><span class=\"lineno\"> 2024</span>&#160;        jsonStrLen = <a class=\"code\" href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">HACover::getDiscoveryJson</a> (jsonStringBuffer, jsonBufferSize, nodeName ? nodeName : <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (address), networkName, &amp;inputJSON);</div>\n<div class=\"line\"><a name=\"l02025\"></a><span class=\"lineno\"> 2025</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02026\"></a><span class=\"lineno\"> 2026</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">SWITCH</a>:</div>\n<div class=\"line\"><a name=\"l02027\"></a><span class=\"lineno\"> 2027</span>&#160;        jsonStrLen = <a class=\"code\" href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">HASwitch::getDiscoveryJson</a> (jsonStringBuffer, jsonBufferSize, nodeName ? nodeName : <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (address), networkName, &amp;inputJSON);</div>\n<div class=\"line\"><a name=\"l02028\"></a><span class=\"lineno\"> 2028</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02029\"></a><span class=\"lineno\"> 2029</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">DEVICE_TRIGGER</a>:</div>\n<div class=\"line\"><a name=\"l02030\"></a><span class=\"lineno\"> 2030</span>&#160;        jsonStrLen = <a class=\"code\" href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">HATrigger::getDiscoveryJson</a> (jsonStringBuffer, jsonBufferSize, nodeName ? nodeName : <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (address), networkName, &amp;inputJSON);</div>\n<div class=\"line\"><a name=\"l02031\"></a><span class=\"lineno\"> 2031</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02032\"></a><span class=\"lineno\"> 2032</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l02033\"></a><span class=\"lineno\"> 2033</span>&#160;        jsonStringBuffer[0] = 0;</div>\n<div class=\"line\"><a name=\"l02034\"></a><span class=\"lineno\"> 2034</span>&#160;        jsonStrLen = 0;</div>\n<div class=\"line\"><a name=\"l02035\"></a><span class=\"lineno\"> 2035</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Device is not supported for HomeAssistant discovery: %d&quot;</span>, deviceType);</div>\n<div class=\"line\"><a name=\"l02036\"></a><span class=\"lineno\"> 2036</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02037\"></a><span class=\"lineno\"> 2037</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02038\"></a><span class=\"lineno\"> 2038</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02039\"></a><span class=\"lineno\"> 2039</span>&#160; </div>\n<div class=\"line\"><a name=\"l02040\"></a><span class=\"lineno\"> 2040</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;%s : %s&quot;</span>, topic.c_str (), jsonStringBuffer);</div>\n<div class=\"line\"><a name=\"l02041\"></a><span class=\"lineno\"> 2041</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">notifyHADiscovery</a>) {</div>\n<div class=\"line\"><a name=\"l02042\"></a><span class=\"lineno\"> 2042</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">notifyHADiscovery</a> (topic.c_str (), jsonStringBuffer, jsonStrLen);</div>\n<div class=\"line\"><a name=\"l02043\"></a><span class=\"lineno\"> 2043</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02044\"></a><span class=\"lineno\"> 2044</span>&#160;    </div>\n<div class=\"line\"><a name=\"l02045\"></a><span class=\"lineno\"> 2045</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02046\"></a><span class=\"lineno\"> 2046</span>&#160;    </div>\n<div class=\"line\"><a name=\"l02047\"></a><span class=\"lineno\"> 2047</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02048\"></a><span class=\"lineno\"> 2048</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l02049\"></a><span class=\"lineno\"> 2049</span>&#160; </div>\n<div class=\"line\"><a name=\"l02050\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#abcd4985de3ef6fbe1994af85093ca034\"> 2050</a></span>&#160;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>;</div>\n<div class=\"line\"><a name=\"l02051\"></a><span class=\"lineno\"> 2051</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a0db88323996d12342a9c60143d90c51f\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">Comms_halClass::onDataRcvd</a></div><div class=\"ttdeci\">virtual void onDataRcvd(comms_hal_rcvd_data dataRcvd)=0</div><div class=\"ttdoc\">Attach a callback function to be run on every received message.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ab639ce1297059231304d90d41ab65197\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">EnigmaIOTGatewayClass::flashRx</a></div><div class=\"ttdeci\">volatile bool flashRx</div><div class=\"ttdoc\">true if Rx LED should flash</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00124\">EnigmaIOTGateway.h:124</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a6aa9a1bf5b534f017d6c1c7bec100d1d\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d\">DISCONNECT_ON_DATA_ERROR</a></div><div class=\"ttdeci\">static const bool DISCONNECT_ON_DATA_ERROR</div><div class=\"ttdoc\">Activates node invalidation in case of data error.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00033\">EnigmaIoTconfigAdvanced.h:33</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a55883c161c22f5182fc40f97a84a5da6\"><div class=\"ttname\"><a href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a></div><div class=\"ttdeci\">static bool decryptBuffer(const uint8_t *data, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</div><div class=\"ttdoc\">Decrypts a buffer using a shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00052\">cryptModule.cpp:52</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\">CLOCK_RESPONSE</a></div><div class=\"ttdeci\">@ CLOCK_RESPONSE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00051\">EnigmaIOTGateway.h:51</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_ab8bc696d21186a4468f8add2c5e8d7c2\"><div class=\"ttname\"><a href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">HACover::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Cover template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00114\">haCover.cpp:114</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ac241f6c48c82d297389d78ec338ddb33\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">EnigmaIOTGatewayClass::invalidateKey</a></div><div class=\"ttdeci\">bool invalidateKey(Node *node, gwInvalidateReason_t reason)</div><div class=\"ttdoc\">Creates an InvalidateKey message and sned it. This trigger a new key agreement to start on related no...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01624\">EnigmaIOTGateway.cpp:1624</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_aefc84d57eee3eceeadc3611866925804\"><div class=\"ttname\"><a href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">CryptModule::getPubDHKey</a></div><div class=\"ttdeci\">uint8_t * getPubDHKey()</div><div class=\"ttdoc\">Gets own public key used on Diffie Hellman algorithm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00136\">cryptModule.h:136</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a96db16d874da26d9a7b199c904da0d5f\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f\">OTAongoing</a></div><div class=\"ttdeci\">bool OTAongoing</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00038\">EnigmaIOTGateway.cpp:38</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a24cc18886d923df0320b6ac4eac19028\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">EnigmaIOTGatewayClass::useCounter</a></div><div class=\"ttdeci\">bool useCounter</div><div class=\"ttdoc\">true if counter is used to check data messages order</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00139\">EnigmaIOTGateway.h:139</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">IDENTIFY</a></div><div class=\"ttdeci\">@ IDENTIFY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00057\">NodeList.h:57</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ae91f344eeae1900179ab65a247e38eda\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">EnigmaIOTGatewayClass::doResetConfig</a></div><div class=\"ttdeci\">static void doResetConfig(void)</div><div class=\"ttdoc\">Activates a flag that signals that configuration has to be saved.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00047\">EnigmaIOTGateway.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a2bd3dd6873079bda9c22994760e817dc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a></div><div class=\"ttdeci\">#define CHMSG_LEN</div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">COVER</a></div><div class=\"ttdeci\">@ COVER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00058\">haEntity.h:58</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_aa4eb5b74c01643d49f6b82908e85cc32\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#aa4eb5b74c01643d49f6b82908e85cc32\">buildSetName</a></div><div class=\"ttdeci\">bool buildSetName(uint8_t *data, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00135\">EnigmaIOTGateway.cpp:135</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a322bbbaa773a92c19c2ec8daee290bc5\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a322bbbaa773a92c19c2ec8daee290bc5\">buildSetResetConfig</a></div><div class=\"ttdeci\">bool buildSetResetConfig(uint8_t *data, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00151\">EnigmaIOTGateway.cpp:151</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_adefe71141a5aa6f9c46712487b6feb31\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">EnigmaIOTGatewayClass::myPublicKey</a></div><div class=\"ttdeci\">uint8_t myPublicKey[KEY_LENGTH]</div><div class=\"ttdoc\">Temporary public key store used during key agreement.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00122\">EnigmaIOTGateway.h:122</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a43043a36c73d7de2ffe49e551cc6ae43\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">EnigmaIOTGatewayClass::addInputMsgQueue</a></div><div class=\"ttdeci\">bool addInputMsgQueue(const uint8_t *addr, const uint8_t *msg, size_t len)</div><div class=\"ttdoc\">Add message to input queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00792\">EnigmaIOTGateway.cpp:792</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_ab043ae3361d34921f36d7d0189c058d1\"><div class=\"ttname\"><a href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">CryptModule::getDH1</a></div><div class=\"ttdeci\">void getDH1()</div><div class=\"ttdoc\">Starts first stage of Diffie Hellman key agreement algorithm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00141\">cryptModule.cpp:141</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">BINARY_SENSOR</a></div><div class=\"ttdeci\">@ BINARY_SENSOR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00056\">haEntity.h:56</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">SLEEP_SET</a></div><div class=\"ttdeci\">@ SLEEP_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00055\">NodeList.h:55</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5e93664145eb75e55ae4c6d3482c8a64\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">EnigmaIOTGatewayClass::rxLedOnTime</a></div><div class=\"ttdeci\">unsigned long rxLedOnTime</div><div class=\"ttdoc\">Flash duration for Rx LED.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00131\">EnigmaIOTGateway.h:131</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">RESTART_NODE</a></div><div class=\"ttdeci\">@ RESTART_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00065\">NodeList.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a08caf502661a3bf1b75ba6860eb1bebe\"><div class=\"ttname\"><a href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">NodeList::getNodeFromName</a></div><div class=\"ttdeci\">Node * getNodeFromName(const char *name)</div><div class=\"ttdoc\">Gets node that correspond with given node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00174\">NodeList.cpp:174</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; msg_queue_item_t &gt;</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a2e80e7a8216a26293d66f1e35829df71\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a></div><div class=\"ttdeci\">const uint8_t TAG_LENGTH</div><div class=\"ttdoc\">Authentication tag length. For Poly1305 it is always 16.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00072\">EnigmaIoTconfigAdvanced.h:72</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">USERDATA_SET</a></div><div class=\"ttdeci\">@ USERDATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00071\">NodeList.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a393acd5ba5c49031b3c827f7cbce37fa\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">Comms_halClass::onDataSent</a></div><div class=\"ttdeci\">virtual void onDataSent(comms_hal_sent_data dataRcvd)=0</div><div class=\"ttdoc\">Attach a callback function to be run after sending a message to receive its status.</div></div>\n<div class=\"ttc\" id=\"acryptModule_8h_html\"><div class=\"ttname\"><a href=\"cryptModule_8h.html\">cryptModule.h</a></div><div class=\"ttdoc\">Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\">NODE_NAME_SET</a></div><div class=\"ttdeci\">@ NODE_NAME_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00052\">EnigmaIOTGateway.h:52</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></div><div class=\"ttdoc\">Main gateway class. Manages communication with nodes and sends data to upper layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00120\">EnigmaIOTGateway.h:120</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a239930df15810784dab9a3284730a35f\"><div class=\"ttname\"><a href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">NodeList::printToSerial</a></div><div class=\"ttdeci\">void printToSerial(Stream *port)</div><div class=\"ttdoc\">Dumps node list data to a Stream object.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00340\">NodeList.cpp:340</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_aab651c53aaa5c935e3cc662399d0f091\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#aab651c53aaa5c935e3cc662399d0f091\">memstr</a></div><div class=\"ttdeci\">const void * memstr(const void *str, size_t str_size, const char *target, size_t target_size)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00073\">EnigmaIOTGateway.cpp:73</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a718f713933a902050be33c5651800011\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011\">MAX_NODE_INACTIVITY</a></div><div class=\"ttdeci\">static const unsigned int MAX_NODE_INACTIVITY</div><div class=\"ttdoc\">After this time (in ms) a node is marked as gone. Setting this to 0 means imfinite.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00026\">EnigmaIoTconfig.h:26</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a90c1c1bffe2884247a2e047d7d254767\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\">EnigmaIOTGatewayClass::processControlMessage</a></div><div class=\"ttdeci\">bool processControlMessage(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node)</div><div class=\"ttdoc\">Processes control message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01250\">EnigmaIOTGateway.cpp:1250</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a1b7f86efd799761dead77fcccf036d1d\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">Comms_halClass::begin</a></div><div class=\"ttdeci\">virtual void begin(uint8_t *gateway, uint8_t channel, peerType_t peerType=COMM_NODE)=0</div><div class=\"ttdoc\">Setup communication environment and establish the connection from node to gateway.</div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">SWITCH</a></div><div class=\"ttdeci\">@ SWITCH</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00067\">haEntity.h:67</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_acc743eebc6ec1a9480db25fa0f59332a\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#acc743eebc6ec1a9480db25fa0f59332a\">buildOtaMsg</a></div><div class=\"ttdeci\">bool buildOtaMsg(uint8_t *data, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00239\">EnigmaIOTGateway.cpp:239</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_aacd555a37dc6ff614813f365e0d85419\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">EnigmaIOTRingBuffer::size</a></div><div class=\"ttdeci\">int size()</div><div class=\"ttdoc\">Returns actual number of elements that buffer holds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00054\">EnigmaIOTRingBuffer.h:54</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a69f499591af56509cd3540f09207f091\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a69f499591af56509cd3540f09207f091\">GwAPI</a></div><div class=\"ttdeci\">GatewayAPI GwAPI</div><div class=\"ttdoc\">API instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00391\">GatewayAPI.cpp:391</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a025eed5564c31f411fc6950a5ecd4c40\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NODE_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00025\">EnigmaIoTconfigAdvanced.h:25</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_ad22aae6146b9da40aa95e2acfe12f6d3\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3\">initWiFi</a></div><div class=\"ttdeci\">void initWiFi(uint8_t channel, const char *networkName, const char *networkKey, uint8_t role)</div><div class=\"ttdoc\">Initalizes WiFi interfaces on ESP8266 or ESP32.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00032\">helperFunctions.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a2dc1f081e8bf48d5c4e64db9caf94f74\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74\">EnigmaIOTGatewayClass::tempBuffer</a></div><div class=\"ttdeci\">msg_queue_item_t tempBuffer</div><div class=\"ttdoc\">Temporary storage for input message got from buffer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00145\">EnigmaIOTGateway.h:145</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a0356f7e08a203093ad1c03e27ac18d0a\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">EnigmaIOTRingBuffer::push</a></div><div class=\"ttdeci\">bool push(Telement *item)</div><div class=\"ttdoc\">Adds a new item to buffer, deleting older element if it is full.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00073\">EnigmaIOTRingBuffer.h:73</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a956635fa60412a9a026ea64245dd4443\"><div class=\"ttname\"><a href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">NodeList::initBroadcastNode</a></div><div class=\"ttdeci\">void initBroadcastNode()</div><div class=\"ttdoc\">Init broadcast node data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00161\">NodeList.cpp:161</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a2e19a23469e04f87744ffc930e51cf8e\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">EnigmaIOTGatewayClass::manageMessage</a></div><div class=\"ttdeci\">void manageMessage(const uint8_t *mac, uint8_t *buf, uint8_t count)</div><div class=\"ttdoc\">Process every received message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00935\">EnigmaIOTGateway.cpp:935</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ab049e20310e2a18bd1f8adc4ec975254\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">EnigmaIOTGatewayClass::comm</a></div><div class=\"ttdeci\">Comms_halClass * comm</div><div class=\"ttdoc\">Instance of physical communication layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00127\">EnigmaIOTGateway.h:127</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad43bd94c6aebd18abd374da313d3b299\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">EnigmaIOTGatewayClass::rx_cb</a></div><div class=\"ttdeci\">static void rx_cb(uint8_t *mac_addr, uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Function that will be called anytime this gateway receives a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00849\">EnigmaIOTGateway.cpp:849</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a04851c9373e00d3c91c11a87d052f1f2\"><div class=\"ttname\"><a href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">NodeList::getNewNode</a></div><div class=\"ttdeci\">Node * getNewNode(const uint8_t *mac)</div><div class=\"ttdoc\">Finds a node that correspond with given address of creates a new one if it does not exist.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00324\">NodeList.cpp:324</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a8d86390169309396f3d21149c3649453\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">EnigmaIOTGatewayClass::txled</a></div><div class=\"ttdeci\">int8_t txled</div><div class=\"ttdoc\">I/O pin to connect a led that flashes when gateway transmits data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00128\">EnigmaIOTGateway.h:128</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad6c301b780bd802ee98bbe25885c0cfd\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">EnigmaIOTGatewayClass::configWiFiManager</a></div><div class=\"ttdeci\">bool configWiFiManager()</div><div class=\"ttdoc\">Starts configuration AP and web server and gets settings from it.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00494\">EnigmaIOTGateway.cpp:494</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a44cd0a3ac1595ecd3156af130a2cb130\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\">EnigmaIOTGatewayClass::processDataMessage</a></div><div class=\"ttdeci\">bool processDataMessage(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node, bool encrypted=true)</div><div class=\"ttdoc\">Processes data message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01377\">EnigmaIOTGateway.cpp:1377</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_ae90dfe037c5e9b1a6804f0292c28bddc\"><div class=\"ttname\"><a href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a></div><div class=\"ttdeci\">static bool encryptBuffer(const uint8_t *data, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</div><div class=\"ttdoc\">Decrypts a buffer using a shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00086\">cryptModule.cpp:86</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a6de87231a98aa132483ae97120b0f4d5\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">EnigmaIOTGatewayClass::server</a></div><div class=\"ttdeci\">AsyncWebServer * server</div><div class=\"ttdoc\">WebServer that holds configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00149\">EnigmaIOTGateway.h:149</a></div></div>\n<div class=\"ttc\" id=\"acryptModule_8cpp_html_a2f63b7a310b37c1127e7b8cfcbb5eb22\"><div class=\"ttname\"><a href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a></div><div class=\"ttdeci\">CryptModule Crypto</div><div class=\"ttdoc\">Singleton Crypto class instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00167\">cryptModule.cpp:167</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html\"><div class=\"ttname\"><a href=\"haEntity_8h.html\">haEntity.h</a></div><div class=\"ttdoc\">Defines an entity for Home Assistant autodiscovery.</div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">BRCAST_KEY</a></div><div class=\"ttdeci\">@ BRCAST_KEY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00067\">NodeList.h:67</a></div></div>\n<div class=\"ttc\" id=\"astructgateway__config__t_html_a0ff4851d0c71213fa6a1a63acb5c9d6f\"><div class=\"ttname\"><a href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">gateway_config_t::networkKey</a></div><div class=\"ttdeci\">uint8_t networkKey[KEY_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00106\">EnigmaIOTGateway.h:106</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_aab70cbb2f23008e90d70b1d744d3e71c\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#aab70cbb2f23008e90d70b1d744d3e71c\">buildSetSleep</a></div><div class=\"ttdeci\">bool buildSetSleep(uint8_t *data, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00333\">EnigmaIOTGateway.cpp:333</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a08530d06e81c160b346047e37839ee7d\"><div class=\"ttname\"><a href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">NodeList::getNodeFromMAC</a></div><div class=\"ttdeci\">Node * getNodeFromMAC(const uint8_t *mac)</div><div class=\"ttdoc\">Gets node that correspond with given address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00142\">NodeList.cpp:142</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ab21597ced9ee31298c8a8eefed562ff9\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">EnigmaIOTGatewayClass::notifyData</a></div><div class=\"ttdeci\">onGwDataRx_t notifyData</div><div class=\"ttdoc\">Callback function that will be invoked when data is received from a node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00132\">EnigmaIOTGateway.h:132</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a></div><div class=\"ttdeci\">@ RAW</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00062\">EnigmaIOTGateway.h:62</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a492277b3df7f10f988c3d5cd087d1a40\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">EnigmaIOTGatewayClass::input_queue</a></div><div class=\"ttdeci\">EnigmaIOTRingBuffer&lt; msg_queue_item_t &gt; * input_queue</div><div class=\"ttdoc\">Input messages buffer. It acts as a FIFO queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00147\">EnigmaIOTGateway.h:147</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76d\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a></div><div class=\"ttdeci\">haDeviceType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00053\">haEntity.h:53</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ae0c52d330bfce048e9d8c4fb8cf1a967\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">EnigmaIOTGatewayClass::notifyHADiscovery</a></div><div class=\"ttdeci\">onHADiscovery_t notifyHADiscovery</div><div class=\"ttdoc\">Callback function that will be invoked when HomeAssistant discovery message is received from a node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00134\">EnigmaIOTGateway.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a2fbf2cc61a51bdce3254f8478268f0c3\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\">EnigmaIOTGatewayClass::sendBroadcastKey</a></div><div class=\"ttdeci\">bool sendBroadcastKey(Node *node)</div><div class=\"ttdoc\">Sends broadcast key to node if it has requested it explicitly or it has notified during handshake.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01903\">EnigmaIOTGateway.cpp:1903</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_a80700bb63bd56ebabbb4728aa433fd29\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a></div><div class=\"ttdeci\">#define LED_OFF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00040\">enigmaiot_led_flasher.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">OTA</a></div><div class=\"ttdeci\">@ OTA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00068\">NodeList.h:68</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_ab822a0ab8cb5fbdfc582dd7fc5c73042\"><div class=\"ttname\"><a href=\"classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042\">NodeList::incLastBroadcastMsgCounter</a></div><div class=\"ttdeci\">void incLastBroadcastMsgCounter()</div><div class=\"ttdoc\">Increments last broadcast message counter stata by one.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00627\">NodeList.h:627</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9865adf18595ebc6eb73154e6267380e\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NETWORK_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00024\">EnigmaIoTconfigAdvanced.h:24</a></div></div>\n<div class=\"ttc\" id=\"ahaSwitch_8h_html\"><div class=\"ttname\"><a href=\"haSwitch_8h.html\">haSwitch.h</a></div><div class=\"ttdoc\">Home Assistant switch integration.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a90e4277194db83896803d38387ec0369\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a90e4277194db83896803d38387ec0369\">buildGetSleep</a></div><div class=\"ttdeci\">bool buildGetSleep(uint8_t *data, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00095\">EnigmaIOTGateway.cpp:95</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">ENIGMAIOT</a></div><div class=\"ttdeci\">@ ENIGMAIOT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00070\">EnigmaIOTGateway.h:69</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">RESET</a></div><div class=\"ttdeci\">@ RESET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00058\">NodeList.h:58</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00044\">EnigmaIOTGateway.h:44</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_ada98ad7b4543b42a5d57f458528bf2d6\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#ada98ad7b4543b42a5d57f458528bf2d6\">buildSetIdentify</a></div><div class=\"ttdeci\">bool buildSetIdentify(uint8_t *data, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00105\">EnigmaIOTGateway.cpp:105</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a514a694eb41c0cbb43e43c1621313187\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">EnigmaIOTGatewayClass::setRxLed</a></div><div class=\"ttdeci\">void setRxLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is received.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00066\">EnigmaIOTGateway.cpp:66</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a88c43de63b862f5a19a79e9d5558beba\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">EnigmaIOTGatewayClass::notifyWiFiManagerExit</a></div><div class=\"ttdeci\">onWiFiManagerExit_t notifyWiFiManagerExit</div><div class=\"ttdoc\">Function called when configuration portal exits.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00152\">EnigmaIOTGateway.h:152</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00042\">EnigmaIOTGateway.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a52bbd932eb2a7fac9a3dc1debbc62e5b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">EnigmaIOTGatewayClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00867\">EnigmaIOTGateway.cpp:867</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_acfff6ed812a219b7b7514989da7fc34e\"><div class=\"ttname\"><a href=\"classNodeList.html#acfff6ed812a219b7b7514989da7fc34e\">NodeList::getLastBroadcastMsgCounter</a></div><div class=\"ttdeci\">uint16_t getLastBroadcastMsgCounter()</div><div class=\"ttdoc\">Ask for last broadcast message counter state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00620\">NodeList.h:620</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">RSSI_GET</a></div><div class=\"ttdeci\">@ RSSI_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00060\">NodeList.h:60</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a2892fb1e6830073f3419da35ddad8725\"><div class=\"ttname\"><a href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">NodeList::unregisterNode</a></div><div class=\"ttdeci\">bool unregisterNode(uint16_t nodeId)</div><div class=\"ttdoc\">Frees up a node and marks it as available.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00258\">NodeList.cpp:258</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a59484fb7e3490df6600b5add60badbb7\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7\">DEBUG_ESP_PORT</a></div><div class=\"ttdeci\">#define DEBUG_ESP_PORT</div><div class=\"ttdoc\">Stream to output debug info. It will normally be Serial</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00058\">EnigmaIoTconfig.h:58</a></div></div>\n<div class=\"ttc\" id=\"astructmsg__queue__item__t_html_a745d5bdf98defbf82a2a6797ec8ddeb1\"><div class=\"ttname\"><a href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">msg_queue_item_t::addr</a></div><div class=\"ttdeci\">uint8_t addr[ENIGMAIOT_ADDR_LEN]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00111\">EnigmaIOTGateway.h:111</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">INIT</a></div><div class=\"ttdeci\">@ INIT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00025\">NodeList.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a264a9779679d77db65566233a952100d\"><div class=\"ttname\"><a href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">HAEntity::getDiscoveryTopic</a></div><div class=\"ttdeci\">static String getDiscoveryTopic(const char *hassPrefix, const char *nodeName, haDeviceType_t entityType, const char *nameSuffix=NULL)</div><div class=\"ttdoc\">Allows Gateway to get discovery message MQTT topic.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00277\">haEntity.h:277</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\">DOWNSTREAM_CTRL_DATA</a></div><div class=\"ttdeci\">@ DOWNSTREAM_CTRL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00047\">EnigmaIOTGateway.h:47</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ac311b64885137edaab70f3692e47f061\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">EnigmaIOTGatewayClass::notifyNodeDisconnection</a></div><div class=\"ttdeci\">onNodeDisconnected_t notifyNodeDisconnection</div><div class=\"ttdoc\">Callback function that will be invoked when a node gets disconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00137\">EnigmaIOTGateway.h:137</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a78b4e66eaf1e4a1cdb4baead912fb1cc\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\">EnigmaIOTGatewayClass::processUnencryptedDataMessage</a></div><div class=\"ttdeci\">bool processUnencryptedDataMessage(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node)</div><div class=\"ttdoc\">Processes unencrypted data message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01324\">EnigmaIOTGateway.cpp:1324</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a4000e36c678d2ae166b3689e5703c7e5\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">EnigmaIOTRingBuffer::empty</a></div><div class=\"ttdeci\">bool empty()</div><div class=\"ttdoc\">Checks if buffer is empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00066\">EnigmaIOTRingBuffer.h:66</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a0bc27edb1340a28f92b43dd4f91e9a16\"><div class=\"ttname\"><a href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a></div><div class=\"ttdeci\">static uint8_t * getSHA256(uint8_t *buffer, uint8_t length)</div><div class=\"ttdoc\">Generates a SHA256 hash from input.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00020\">cryptModule.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_aa713b61843ba50cdd12bba2d34d1065e\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#aa713b61843ba50cdd12bba2d34d1065e\">buildSendBrcastKey</a></div><div class=\"ttdeci\">bool buildSendBrcastKey(uint8_t *data, size_t &amp;dataLen, const uint8_t *key, size_t keyLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00171\">EnigmaIOTGateway.cpp:171</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a03ffb2c860c7276dca38abdca4423f16\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a></div><div class=\"ttdeci\">constexpr auto ha_name_sufix</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00047\">haEntity.h:47</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a330863b8dd757d66f990a14298f2faf0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">EnigmaIOTGatewayClass::setTxLed</a></div><div class=\"ttdeci\">void setTxLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00059\">EnigmaIOTGateway.cpp:59</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">SLEEP_GET</a></div><div class=\"ttdeci\">@ SLEEP_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00054\">NodeList.h:54</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\">CONTROL_DATA</a></div><div class=\"ttdeci\">@ CONTROL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00046\">EnigmaIOTGateway.h:46</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_aad94db36f97a563732bfd0ca10b164f9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9\">OTA_GW_TIMEOUT</a></div><div class=\"ttdeci\">static const int OTA_GW_TIMEOUT</div><div class=\"ttdoc\">OTA mode timeout. In OTA mode all data messages are ignored.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00031\">EnigmaIoTconfigAdvanced.h:31</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_ab8124d524ffeb47ab53c5435ac2fe4c8\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">EnigmaIOTRingBuffer::pop</a></div><div class=\"ttdeci\">bool pop()</div><div class=\"ttdoc\">Deletes older item from buffer, if buffer is not empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00106\">EnigmaIOTRingBuffer.h:106</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a3a00052a511fa3b63de7e280320b1ef9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a></div><div class=\"ttdeci\">const uint8_t AAD_LENGTH</div><div class=\"ttdoc\">Number of bytes from last part of key that will be used for additional authenticated data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00073\">EnigmaIoTconfigAdvanced.h:73</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a792b28373075cd82cdece3745a65b65a\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">lastOTAmsg</a></div><div class=\"ttdeci\">time_t lastOTAmsg</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00039\">EnigmaIOTGateway.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"ahaSensor_8h_html\"><div class=\"ttname\"><a href=\"haSensor_8h.html\">haSensor.h</a></div><div class=\"ttdoc\">Home Assistant sensor integration.</div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a0020539e3b49df3706fe66a44bbf3700\"><div class=\"ttname\"><a href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">NodeList::getBroadcastNode</a></div><div class=\"ttdeci\">Node * getBroadcastNode()</div><div class=\"ttdoc\">Gets broadcas node instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00607\">NodeList.h:607</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a></div><div class=\"ttdeci\">@ SENSOR_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00039\">EnigmaIOTGateway.h:39</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_ab9b144ebcf09f24dd9b85f95e6d118d0\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a></div><div class=\"ttdeci\">#define SHMSG_LEN</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a3dd72b32f71d5bf46c0c083c3bb9b942\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">EnigmaIOTRingBuffer::front</a></div><div class=\"ttdeci\">Telement * front()</div><div class=\"ttdoc\">Gets a pointer to older item in buffer, if buffer is not empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00125\">EnigmaIOTRingBuffer.h:125</a></div></div>\n<div class=\"ttc\" id=\"ahaCover_8h_html\"><div class=\"ttname\"><a href=\"haCover_8h.html\">haCover.h</a></div><div class=\"ttdoc\">Home Assistant cover and shade integration.</div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae7b7337fdc178fe350ac4ce2f4675040\"><div class=\"ttname\"><a href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">Node::setEncryptionKey</a></div><div class=\"ttdeci\">void setEncryptionKey(const uint8_t *key)</div><div class=\"ttdoc\">Sets encryption key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00011\">NodeList.cpp:11</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ac5a613a21aca12c2d2efbff02a2f0ff5\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">Comms_halClass::send</a></div><div class=\"ttdeci\">virtual int32_t send(uint8_t *da, uint8_t *data, int len)=0</div><div class=\"ttdoc\">Sends data to the other peer.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_af7c82da248870648a385a112d298ed78\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">GatewayAPI::begin</a></div><div class=\"ttdeci\">void begin()</div><div class=\"ttdoc\">Starts REST API web server.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00028\">GatewayAPI.cpp:28</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a61ac445d996a9304b34fc78a2514364f\"><div class=\"ttname\"><a href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">Node::getEncriptionKey</a></div><div class=\"ttdeci\">uint8_t * getEncriptionKey()</div><div class=\"ttdoc\">Gets Node encryption key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00173\">NodeList.h:173</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">USERDATA_GET</a></div><div class=\"ttdeci\">@ USERDATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00070\">NodeList.h:70</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a71ee5004618cb61a934f136d7c2f45e2\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a></div><div class=\"ttdeci\">static const int NUM_NODES</div><div class=\"ttdoc\">Maximum number of nodes that this gateway can handle.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00032\">EnigmaIoTconfig.h:32</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a0ea92c22b1d415d53d635391d9ef6b07\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\">EnigmaIOTGatewayClass::processClockRequest</a></div><div class=\"ttdeci\">bool processClockRequest(const uint8_t mac[ENIGMAIOT_ADDR_LEN], const uint8_t *buf, size_t count, Node *node)</div><div class=\"ttdoc\">Starts clock sync procedure from node to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01739\">EnigmaIOTGateway.cpp:1739</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a96b21ebe23b1914e09408bd3e41b34b0\"><div class=\"ttname\"><a href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a></div><div class=\"ttdeci\">static uint32_t random()</div><div class=\"ttdoc\">Gets a random number.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00119\">cryptModule.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_aad57d7638e39d6c3a95654f2c1e29e7f\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f\">getNextNumber</a></div><div class=\"ttdeci\">int getNextNumber(char *&amp;data, size_t &amp;len)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00184\">EnigmaIOTGateway.cpp:184</a></div></div>\n<div class=\"ttc\" id=\"astructmsg__queue__item__t_html_a59b67289f8b6a8e69ae955f1bdfc459f\"><div class=\"ttname\"><a href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">msg_queue_item_t::data</a></div><div class=\"ttdeci\">uint8_t data[MAX_MESSAGE_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00112\">EnigmaIOTGateway.h:112</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a></div><div class=\"ttdeci\">gatewayPayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00061\">EnigmaIOTGateway.h:61</a></div></div>\n<div class=\"ttc\" id=\"astructgateway__config__t_html_a1ac13a1c74a672e9dd1268ffc23a1a69\"><div class=\"ttname\"><a href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">gateway_config_t::channel</a></div><div class=\"ttdeci\">uint8_t channel</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00105\">EnigmaIOTGateway.h:105</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a47616803c1ff494134cb784756035a08\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a></div><div class=\"ttdeci\">const char CONFIG_FILE[]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00035\">EnigmaIOTGateway.cpp:35</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a8eed8023d964354b6a2533c9662037e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">EnigmaIOTGatewayClass::getTotalPackets</a></div><div class=\"ttdeci\">uint32_t getTotalPackets(uint8_t *address)</div><div class=\"ttdoc\">Gets total packets sent by node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01470\">EnigmaIOTGateway.cpp:1470</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a843647264ee900edb1ee5c51abef4bd2\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">HABinarySensor::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Binary Sensor template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00078\">haBinarySensor.cpp:78</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5eb353d426ea01a2aa183ae90855a3ae\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">EnigmaIOTGatewayClass::flashTx</a></div><div class=\"ttdeci\">bool flashTx</div><div class=\"ttdoc\">true if Tx LED should flash</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00123\">EnigmaIOTGateway.h:123</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aa057eae7440f60abe236ae5b121dbf7c\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">EnigmaIOTGatewayClass::dns</a></div><div class=\"ttdeci\">DNSServer * dns</div><div class=\"ttdoc\">DNS server used by configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00150\">EnigmaIOTGateway.h:150</a></div></div>\n<div class=\"ttc\" id=\"astructmsg__queue__item__t_html\"><div class=\"ttname\"><a href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00110\">EnigmaIOTGateway.h:110</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a6d0c9737f65f857080b7d11c34f4141e\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">EnigmaIOTGatewayClass::getStatus</a></div><div class=\"ttdeci\">void getStatus(uint8_t *mac_addr, uint8_t status)</div><div class=\"ttdoc\">Functrion to debug send status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00858\">EnigmaIOTGateway.cpp:858</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a446e327328ebbcbe9b20f38f1080b9e6\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">EnigmaIOTGatewayClass::getShouldSave</a></div><div class=\"ttdeci\">bool getShouldSave()</div><div class=\"ttdoc\">Gets flag that indicates if configuration should be saved.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00055\">EnigmaIOTGateway.cpp:55</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a1ef5d02770b1b3bf2acf0adf7b410a17\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">EnigmaIOTGatewayClass::nodelist</a></div><div class=\"ttdeci\">NodeList nodelist</div><div class=\"ttdoc\">Node database that keeps status and shared keys.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00126\">EnigmaIOTGateway.h:126</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aa132262cf2eee428208df22d2072acf9\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\">EnigmaIOTGatewayClass::clockResponse</a></div><div class=\"ttdeci\">bool clockResponse(Node *node, uint64_t t1, uint64_t t2)</div><div class=\"ttdoc\">Returns timestaps needed so that node can calculate time difference.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01822\">EnigmaIOTGateway.cpp:1822</a></div></div>\n<div class=\"ttc\" id=\"astructmsg__queue__item__t_html_a62805793291f61bc8b07e2b432ec3e65\"><div class=\"ttname\"><a href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">msg_queue_item_t::len</a></div><div class=\"ttdeci\">size_t len</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00113\">EnigmaIOTGateway.h:113</a></div></div>\n<div class=\"ttc\" id=\"acryptModule_8h_html_a164ce4566a4b31ef42907bf37f3e6654\"><div class=\"ttname\"><a href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">RANDOM_LENGTH</a></div><div class=\"ttdeci\">const uint8_t RANDOM_LENGTH</div><div class=\"ttdoc\">Length of random number generator values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00027\">cryptModule.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_abcd4985de3ef6fbe1994af85093ca034\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a></div><div class=\"ttdeci\">EnigmaIOTGatewayClass EnigmaIOTGateway</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l02050\">EnigmaIOTGateway.cpp:2050</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a6f1fba7f12792a5a622de9db17cd2bc9\"><div class=\"ttname\"><a href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">HASwitch::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Switch template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00085\">haSwitch.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a863ca9be67da8cdc5fb9447378021e07\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a></div><div class=\"ttdeci\">const uint8_t KEY_LENGTH</div><div class=\"ttdoc\">Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00070\">EnigmaIoTconfigAdvanced.h:70</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a69e6d53334b842b054fc9e3cfdbb6067\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">EnigmaIOTGatewayClass::node</a></div><div class=\"ttdeci\">node_t node</div><div class=\"ttdoc\">temporary store to keep node data while processing a message</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00125\">EnigmaIOTGateway.h:125</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aacbd1597e7a6be2957ac4f3ade9dc243\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">EnigmaIOTGatewayClass::txLedOnTime</a></div><div class=\"ttdeci\">unsigned long txLedOnTime</div><div class=\"ttdoc\">Flash duration for Tx LED.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00130\">EnigmaIOTGateway.h:130</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a375fbbd60c980937a4d80c1156fb9d33\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a></div><div class=\"ttdeci\">constexpr auto ha_device_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00023\">haEntity.h:23</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html\"><div class=\"ttname\"><a href=\"haTrigger_8h.html\">haTrigger.h</a></div><div class=\"ttdoc\">Home Assistant trigger integration.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a0edb12da3fe0cc767cab53ba480f6508\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">EnigmaIOTGatewayClass::doSave</a></div><div class=\"ttdeci\">static void doSave(void)</div><div class=\"ttdoc\">Activates a flag that signals that configuration has to be saved.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00042\">EnigmaIOTGateway.cpp:42</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a4e22033bdc1560ca309e9a14073c2282\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a></div><div class=\"ttdeci\">static const uint8_t BROADCAST_ADDRESS[]</div><div class=\"ttdoc\">Broadcast address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00026\">EnigmaIoTconfigAdvanced.h:26</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad704dfd5a37c58ef1311501b573f1251\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">EnigmaIOTGatewayClass::notifyWiFiManagerStarted</a></div><div class=\"ttdeci\">simpleEventHandler_t notifyWiFiManagerStarted</div><div class=\"ttdoc\">Function called when configuration portal is started.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00153\">EnigmaIOTGateway.h:153</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_aadcc5d2ec146be476018bdfc71d04f79\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">MAX_KEY_VALIDITY</a></div><div class=\"ttdeci\">static const unsigned int MAX_KEY_VALIDITY</div><div class=\"ttdoc\">After this time (in ms) a node is unregistered. Setting this to 0 means imfinite.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00025\">EnigmaIoTconfig.h:25</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_ad6e69a2870c8f219cc679677af110849\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a></div><div class=\"ttdeci\">#define MACSTR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00083\">helperFunctions.cpp:83</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html\"><div class=\"ttname\"><a href=\"classNode.html\">Node</a></div><div class=\"ttdoc\">Class definition for a single sensor Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00109\">NodeList.h:109</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a5b2105a285d12dbe89e9384d2351e1a9\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">shouldSave</a></div><div class=\"ttdeci\">bool shouldSave</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00037\">EnigmaIOTGateway.cpp:37</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">SENSOR</a></div><div class=\"ttdeci\">@ SENSOR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00066\">haEntity.h:66</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a6702f6b65634da0500f5e99ccf017178\"><div class=\"ttname\"><a href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">NodeList::checkNodeName</a></div><div class=\"ttdeci\">int8_t checkNodeName(const char *name, const uint8_t *address)</div><div class=\"ttdoc\">Check Node name for duplicate.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00201\">NodeList.cpp:201</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_a4e1eb68bd22273bc33e60c01f703e08f\"><div class=\"ttname\"><a href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">HASensor::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Sensor template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00065\">haSensor.cpp:65</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a7bb1ee00fcd42cf937a7f6173e2a8647\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a7bb1ee00fcd42cf937a7f6173e2a8647\">buildGetVersion</a></div><div class=\"ttdeci\">bool buildGetVersion(uint8_t *data, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00085\">EnigmaIOTGateway.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a77802389a0b41546f60ce114097bcadc\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">EnigmaIOTGatewayClass::gwConfig</a></div><div class=\"ttdeci\">gateway_config_t gwConfig</div><div class=\"ttdoc\">Gateway specific configuration to be stored on flash memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00140\">EnigmaIOTGateway.h:140</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a></div><div class=\"ttdeci\">@ KEY_EXPIRED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00081\">EnigmaIOTGateway.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a17e46dd4d8b522e0ce91b729e9687350\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\">EnigmaIOTGatewayClass::processClientHello</a></div><div class=\"ttdeci\">bool processClientHello(const uint8_t mac[ENIGMAIOT_ADDR_LEN], const uint8_t *buf, size_t count, Node *node)</div><div class=\"ttdoc\">Gets a buffer containing a ClientHello message and process it. This carries node public key to be use...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01660\">EnigmaIOTGateway.cpp:1660</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a0ab81e6867a72fc7dac05f24fe7fa484\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">EnigmaIOTGatewayClass::tx_cb</a></div><div class=\"ttdeci\">static void tx_cb(uint8_t *mac_addr, uint8_t status)</div><div class=\"ttdoc\">Function that will be called anytime this gateway sends a message to indicate status result of sendin...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00854\">EnigmaIOTGateway.cpp:854</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a179ab2224b2cb38ea355e8d770dc0d9a\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">EnigmaIOTGatewayClass::saveFlashData</a></div><div class=\"ttdeci\">bool saveFlashData()</div><div class=\"ttdoc\">Saves configuration to flash memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00692\">EnigmaIOTGateway.cpp:692</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">COMM_GATEWAY</a></div><div class=\"ttdeci\">@ COMM_GATEWAY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00026\">Comms_hal.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a038ecd9541cb893eb58fb6aa49994816\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">EnigmaIOTGatewayClass::rxled</a></div><div class=\"ttdeci\">int8_t rxled</div><div class=\"ttdoc\">I/O pin to connect a led that flashes when gateway receives data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00129\">EnigmaIOTGateway.h:129</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">VERSION</a></div><div class=\"ttdeci\">@ VERSION</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00052\">NodeList.h:52</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a09bed6e6ead886a7b0389afe7470835c\"><div class=\"ttname\"><a href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">HATrigger::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Trigger template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8cpp_source.html#l00039\">haTrigger.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a></div><div class=\"ttdeci\">@ HA_DISCOVERY_MESSAGE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00049\">EnigmaIOTGateway.h:49</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ae9b4cf7f3cd2da454161b943ba285cd0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\">EnigmaIOTGatewayClass::processNodeNameSet</a></div><div class=\"ttdeci\">bool processNodeNameSet(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node)</div><div class=\"ttdoc\">Processes new node name request fromn node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01175\">EnigmaIOTGateway.cpp:1175</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a20d09b7746e96e3f2706652522c121fa\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a20d09b7746e96e3f2706652522c121fa\">buildGetRSSI</a></div><div class=\"ttdeci\">bool buildGetRSSI(uint8_t *data, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00115\">EnigmaIOTGateway.cpp:115</a></div></div>\n<div class=\"ttc\" id=\"ahaBinarySensor_8h_html\"><div class=\"ttname\"><a href=\"haBinarySensor_8h.html\">haBinarySensor.h</a></div><div class=\"ttdoc\">Home Assistant binary sensor integration.</div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">NAME_GET</a></div><div class=\"ttdeci\">@ NAME_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00062\">NodeList.h:62</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a3e4fd7a7428749c7d8a375611f667165\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">EnigmaIOTGatewayClass::downstreamDataMessage</a></div><div class=\"ttdeci\">bool downstreamDataMessage(Node *node, const uint8_t *data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t encoding=ENIGMAIOT)</div><div class=\"ttdoc\">Builds, encrypts and sends a DownstreamData message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01489\">EnigmaIOTGateway.cpp:1489</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\">WRONG_DATA</a></div><div class=\"ttdeci\">@ WRONG_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00079\">EnigmaIOTGateway.h:79</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a></div><div class=\"ttdeci\">@ REGISTERED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00028\">NodeList.h:28</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\">SERVER_HELLO</a></div><div class=\"ttdeci\">@ SERVER_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00057\">EnigmaIOTGateway.h:57</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a2909f9f6e8ecc4dfd6947911e4eb2d96\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a2909f9f6e8ecc4dfd6947911e4eb2d96\">MAX_INPUT_QUEUE_SIZE</a></div><div class=\"ttdeci\">static const int MAX_INPUT_QUEUE_SIZE</div><div class=\"ttdoc\">Input queue size for EnigmaIOT messages. Acts as a buffer to be able to handle messages during high l...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00030\">EnigmaIoTconfig.h:30</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5d5ce4312735008866cf84559bc645c4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">EnigmaIOTGatewayClass::sendDownstream</a></div><div class=\"ttdeci\">bool sendDownstream(uint8_t *mac, const uint8_t *data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t payload_type=RAW, char *nodeName=NULL)</div><div class=\"ttdoc\">Starts a downstream data message transmission.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00364\">EnigmaIOTGateway.cpp:364</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a1cd41eabb8dc153f74d42f263d168fee\"><div class=\"ttname\"><a href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">CryptModule::getDH2</a></div><div class=\"ttdeci\">bool getDH2(const uint8_t *remotePubKey)</div><div class=\"ttdoc\">Starts second stage of Diffie Hellman key agreement algorithm and calculate shares key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00148\">cryptModule.cpp:148</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a160b39becf7cdf8700059947eaf6a73b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">EnigmaIOTGatewayClass::getErrorPackets</a></div><div class=\"ttdeci\">uint32_t getErrorPackets(uint8_t *address)</div><div class=\"ttdoc\">Gets number of errored packets of node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01476\">EnigmaIOTGateway.cpp:1476</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\">CLOCK_REQUEST</a></div><div class=\"ttdeci\">@ CLOCK_REQUEST</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00050\">EnigmaIOTGateway.h:50</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a27ddc1b8decbcf821a0427faa3c1ced3\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">EnigmaIOTGatewayClass::notifyNewNode</a></div><div class=\"ttdeci\">onNewNode_t notifyNewNode</div><div class=\"ttdoc\">Callback function that will be invoked when a new node is connected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00136\">EnigmaIOTGateway.h:136</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a77da5264eb27ff8d378a8b279c8b97c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">EnigmaIOTGatewayClass::getPacketsHour</a></div><div class=\"ttdeci\">double getPacketsHour(uint8_t *address)</div><div class=\"ttdoc\">Gets packet rate sent by node that has a specific address, in packets per hour.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01482\">EnigmaIOTGateway.cpp:1482</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a568f6925a7027004598c4ad288dd11f0\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">IKMSG_LEN</a></div><div class=\"ttdeci\">#define IKMSG_LEN</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\">UNREGISTERED_NODE</a></div><div class=\"ttdeci\">@ UNREGISTERED_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00080\">EnigmaIOTGateway.h:80</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\">NODE_NAME_RESULT</a></div><div class=\"ttdeci\">@ NODE_NAME_RESULT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00053\">EnigmaIOTGateway.h:53</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_a000e9c08be2b294e884d9a76d447c7ca\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#a000e9c08be2b294e884d9a76d447c7ca\">buildRestartNode</a></div><div class=\"ttdeci\">bool buildRestartNode(uint8_t *data, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00161\">EnigmaIOTGateway.cpp:161</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_aab4a7f7971eeeb4c0fa3af8064006b79\"><div class=\"ttname\"><a href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">NodeList::getNodeFromID</a></div><div class=\"ttdeci\">Node * getNodeFromID(uint16_t nodeId)</div><div class=\"ttdoc\">Gets node that correspond with given nodeId.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00135\">NodeList.cpp:135</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a0ae6c4c749724e380b6e717a6535bed6\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a></div><div class=\"ttdeci\">const uint8_t IV_LENGTH</div><div class=\"ttdoc\">Initalization vector length used by selected crypto algorythm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00071\">EnigmaIoTconfigAdvanced.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a21ccf12c2b61e8c6eeef4b41326d0020\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020\">HA_DISCOVERY_PREFIX</a></div><div class=\"ttdeci\">static const char HA_DISCOVERY_PREFIX[]</div><div class=\"ttdoc\">Used to build HomeAssistant discovery message topic.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00041\">EnigmaIoTconfigAdvanced.h:41</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a></div><div class=\"ttdoc\">Library to build a gateway for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></div><div class=\"ttdeci\">gwInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00075\">EnigmaIOTGateway.h:75</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aec8a0e96ff309d34ef19a5eaa66c40e0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\">EnigmaIOTGatewayClass::serverHello</a></div><div class=\"ttdeci\">bool serverHello(const uint8_t *key, Node *node)</div><div class=\"ttdoc\">Build a ServerHello message and send it to node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01910\">EnigmaIOTGateway.cpp:1910</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aaa13dfa56be2d1ad062cc69f6deef331\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">EnigmaIOTGatewayClass::loadFlashData</a></div><div class=\"ttdeci\">bool loadFlashData()</div><div class=\"ttdoc\">Loads configuration from flash memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00611\">EnigmaIOTGateway.cpp:611</a></div></div>\n<div class=\"ttc\" id=\"anamespaceEnigmaIoTUpdate_html_ad7b06ea4bc715581c290476212ae10c8\"><div class=\"ttname\"><a href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">EnigmaIoTUpdate.sleepyNode</a></div><div class=\"ttdeci\">bool sleepyNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTUpdate_8py_source.html#l00013\">EnigmaIoTUpdate.py:13</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\">CLIENT_HELLO</a></div><div class=\"ttdeci\">@ CLIENT_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00056\">EnigmaIOTGateway.h:56</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">DEVICE_TRIGGER</a></div><div class=\"ttdeci\">@ DEVICE_TRIGGER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00060\">haEntity.h:60</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_ac5c28a5827b5a3b34222c13589adeba7\"><div class=\"ttname\"><a href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a></div><div class=\"ttdeci\">enum control_message_type control_message_type_t</div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_af2e697ac60e05813d45ea2c9c9e79c25\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a></div><div class=\"ttdeci\">#define LED_ON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00039\">enigmaiot_led_flasher.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5d854e8aa39bd51344951c5205c09381\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381\">EnigmaIOTGatewayClass::nodeNameSetRespose</a></div><div class=\"ttdeci\">bool nodeNameSetRespose(Node *node, int8_t error)</div><div class=\"ttdoc\">Send back set name response.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01106\">EnigmaIOTGateway.cpp:1106</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_aae12028b7a1857ceb320c435832b09b5\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#aae12028b7a1857ceb320c435832b09b5\">buildGetName</a></div><div class=\"ttdeci\">bool buildGetName(uint8_t *data, size_t &amp;dataLen, const uint8_t *inputData, size_t inputLen)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00125\">EnigmaIOTGateway.cpp:125</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">NAME_SET</a></div><div class=\"ttdeci\">@ NAME_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00064\">NodeList.h:64</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_afb41f49d1291eebbd676d4915ee193d1\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">EnigmaIOTGatewayClass::getPER</a></div><div class=\"ttdeci\">double getPER(uint8_t *address)</div><div class=\"ttdoc\">Gets packet error rate of node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01460\">EnigmaIOTGateway.cpp:1460</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_ad08e6ed992bb54d4ab67627295e7fcf0\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#ad08e6ed992bb54d4ab67627295e7fcf0\">isHexChar</a></div><div class=\"ttdeci\">bool isHexChar(char c)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00230\">EnigmaIOTGateway.cpp:230</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5e875dd3fa022dfba029f1e1124fcded\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">EnigmaIOTGatewayClass::plainNetKey</a></div><div class=\"ttdeci\">char plainNetKey[KEY_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00141\">EnigmaIOTGateway.h:141</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a9a6b2d2a88c39a839f414e9ce861c5a0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">EnigmaIOTGatewayClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *networkKey=NULL, bool useDataCounter=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts accepting node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00736\">EnigmaIOTGateway.cpp:736</a></div></div>\n<div class=\"ttc\" id=\"astructgateway__config__t_html_a3203f7006f14c8a96c432703c519c8d6\"><div class=\"ttname\"><a href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">gateway_config_t::networkName</a></div><div class=\"ttdeci\">char networkName[NETWORK_NAME_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00107\">EnigmaIOTGateway.h:107</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\">INVALIDATE_KEY</a></div><div class=\"ttdeci\">@ INVALIDATE_KEY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00059\">EnigmaIOTGateway.h:58</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">SLEEP_ANS</a></div><div class=\"ttdeci\">@ SLEEP_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00056\">NodeList.h:56</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad7f3f86214c6989f2019f1df89e9f0b6\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">EnigmaIOTGatewayClass::wifiManager</a></div><div class=\"ttdeci\">AsyncWiFiManager * wifiManager</div><div class=\"ttdoc\">Wifi configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00151\">EnigmaIOTGateway.h:151</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ac3355fe40cad325eddb8e37dd9ddfaf5\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">EnigmaIOTGatewayClass::getInputMsgQueue</a></div><div class=\"ttdeci\">msg_queue_item_t * getInputMsgQueue(msg_queue_item_t *buffer)</div><div class=\"ttdoc\">Gets next item in the queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00815\">EnigmaIOTGateway.cpp:815</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html\"><div class=\"ttname\"><a href=\"classComms__halClass.html\">Comms_halClass</a></div><div class=\"ttdoc\">Interface for communication subsystem abstraction layer definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00041\">Comms_hal.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ae7c947e8bfc28c1b3731a5da874e24a7\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\">EnigmaIOTGatewayClass::sendHADiscoveryJSON</a></div><div class=\"ttdeci\">bool sendHADiscoveryJSON(uint8_t *address, uint8_t *data, size_t len, const char *networkName, const char *nodeName)</div><div class=\"ttdoc\">Sends a Home Assistant discovery message after receiving it from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01989\">EnigmaIOTGateway.cpp:1989</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\">UNENCRYPTED_NODE_DATA</a></div><div class=\"ttdeci\">@ UNENCRYPTED_NODE_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00041\">EnigmaIOTGateway.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_abf7f0271c0938cf36f316bf3338aba4b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">EnigmaIOTGatewayClass::popInputMsgQueue</a></div><div class=\"ttdeci\">void popInputMsgQueue()</div><div class=\"ttdoc\">Deletes next item in the queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00843\">EnigmaIOTGateway.cpp:843</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTGateway_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTGateway.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGateway.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Library to build a gateway for EnigmaIoT system.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>&quot;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n<code>#include &lt;DNSServer.h&gt;</code><br />\n<code>#include &lt;queue&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"GatewayAPI_8h_source.html\">GatewayAPI.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&quot;</code><br />\n</div>\n<p><a href=\"EnigmaIOTGateway_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structgateway__config__t.html\">gateway_config_t</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Main gateway class. Manages communication with nodes and sends data to upper layer.  <a href=\"classEnigmaIOTGatewayClass.html#details\">More...</a><br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:af2e697ac60e05813d45ea2c9c9e79c25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a>&#160;&#160;&#160;LOW</td></tr>\n<tr class=\"separator:af2e697ac60e05813d45ea2c9c9e79c25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a80700bb63bd56ebabbb4728aa433fd29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>&#160;&#160;&#160;!<a class=\"el\" href=\"EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a></td></tr>\n<tr class=\"separator:a80700bb63bd56ebabbb4728aa433fd29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:aee09b06c0f38b77b6cf19f8d89750a1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">onGwDataRx_t</a>) (uint8_t *mac, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len, uint16_t lostMessages, bool control, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> payload_type, char *nodeName)</td></tr>\n<tr class=\"separator:aee09b06c0f38b77b6cf19f8d89750a1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad49ee5d953f324e799a0434ff3b044c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">onNewNode_t</a>) (uint8_t *mac, uint16_t node_id, char *nodeName)</td></tr>\n<tr class=\"separator:ad49ee5d953f324e799a0434ff3b044c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17b8c1861e099264b904a9f20ee69666\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">onNodeDisconnected_t</a>) (uint8_t *mac, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a17b8c1861e099264b904a9f20ee69666\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a059cb90513e14cc8dc7befecc75bc891\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891\">onWiFiManagerExit_t</a>) (boolean <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:a059cb90513e14cc8dc7befecc75bc891\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7c95cb7d1926120867fd8a4246f90f5c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a>) (void)</td></tr>\n<tr class=\"separator:a7c95cb7d1926120867fd8a4246f90f5c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:a7493ad6706df484ac2749d7613266613\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613\">gatewayMessageType_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a> = 0x01, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613affd78f537f0c30f76f209e5afd106843\">SENSOR_BRCAST_DATA</a> = 0x81, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\">UNENCRYPTED_NODE_DATA</a> = 0x11, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a> = 0x02, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\">DOWNSTREAM_BRCAST_DATA_SET</a> = 0x82, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a> = 0x12, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\">DOWNSTREAM_BRCAST_DATA_GET</a> = 0x92, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\">CONTROL_DATA</a> = 0x03, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\">DOWNSTREAM_CTRL_DATA</a> = 0x04, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\">DOWNSTREAM_BRCAST_CTRL_DATA</a> = 0x84, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a> = 0x08, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\">CLOCK_REQUEST</a> = 0x05, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\">CLOCK_RESPONSE</a> = 0x06, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\">NODE_NAME_SET</a> = 0x07, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\">NODE_NAME_RESULT</a> = 0x17, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a45ed732c2c1b8f670d6730e6f7a684b5\">BROADCAST_KEY_REQUEST</a> = 0x08, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\">BROADCAST_KEY_RESPONSE</a> = 0x18, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\">CLIENT_HELLO</a> = 0xFF, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\">SERVER_HELLO</a> = 0xFE, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\">INVALIDATE_KEY</a> = 0xFB\n<br />\n }</td></tr>\n<tr class=\"memdesc:a7493ad6706df484ac2749d7613266613\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Message code definition.  <a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613\">More...</a><br /></td></tr>\n<tr class=\"separator:a7493ad6706df484ac2749d7613266613\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a404510882576d212315fd2ed67280d8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a> = 0x00, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a> = 0x81, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da4d6491239946f63d9cc27a2984c4fe59\">PROT_BUF</a> = 0x82, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a> = 0x83, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da311c13f8df1217b0cd4d5537cb91311f\">BSON</a> = 0x84, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da56f7b9e0a4250b6a5c73811ae092e686\">CBOR</a> = 0x85, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da298f796cee1bd5d6decfe81d4a98b554\">SMILE</a> = 0x86, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">ENIGMAIOT</a> = 0xFF\n<br />\n }</td></tr>\n<tr class=\"separator:a404510882576d212315fd2ed67280d8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4272866ccf327ab11a97c334d16cf977\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a> = 0x00, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977ad6e9d0b3e3d479305eb2ce4233f4eca6\">WRONG_CLIENT_HELLO</a> = 0x01, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\">WRONG_DATA</a> = 0x03, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\">UNREGISTERED_NODE</a> = 0x04, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a> = 0x05, \n<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\">KICKED</a> = 0x06\n<br />\n }</td></tr>\n<tr class=\"memdesc:a4272866ccf327ab11a97c334d16cf977\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Key invalidation reason definition.  <a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">More...</a><br /></td></tr>\n<tr class=\"separator:a4272866ccf327ab11a97c334d16cf977\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:abcd4985de3ef6fbe1994af85093ca034\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a></td></tr>\n<tr class=\"separator:abcd4985de3ef6fbe1994af85093ca034\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Library to build a gateway for EnigmaIoT system. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a80700bb63bd56ebabbb4728aa433fd29\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a80700bb63bd56ebabbb4728aa433fd29\">&#9670;&nbsp;</a></span>LED_OFF</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_OFF&#160;&#160;&#160;!<a class=\"el\" href=\"EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00033\">33</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af2e697ac60e05813d45ea2c9c9e79c25\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af2e697ac60e05813d45ea2c9c9e79c25\">&#9670;&nbsp;</a></span>LED_ON</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_ON&#160;&#160;&#160;LOW</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00032\">32</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a id=\"aee09b06c0f38b77b6cf19f8d89750a1b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aee09b06c0f38b77b6cf19f8d89750a1b\">&#9670;&nbsp;</a></span>onGwDataRx_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* onGwDataRx_t) (uint8_t *mac, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len, uint16_t lostMessages, bool control, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> payload_type, char *nodeName)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00097\">97</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad49ee5d953f324e799a0434ff3b044c7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad49ee5d953f324e799a0434ff3b044c7\">&#9670;&nbsp;</a></span>onNewNode_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* onNewNode_t) (uint8_t *mac, uint16_t node_id, char *nodeName)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00098\">98</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a17b8c1861e099264b904a9f20ee69666\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a17b8c1861e099264b904a9f20ee69666\">&#9670;&nbsp;</a></span>onNodeDisconnected_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* onNodeDisconnected_t) (uint8_t *mac, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00099\">99</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a059cb90513e14cc8dc7befecc75bc891\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a059cb90513e14cc8dc7befecc75bc891\">&#9670;&nbsp;</a></span>onWiFiManagerExit_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* onWiFiManagerExit_t) (boolean <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00100\">100</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7c95cb7d1926120867fd8a4246f90f5c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7c95cb7d1926120867fd8a4246f90f5c\">&#9670;&nbsp;</a></span>simpleEventHandler_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* simpleEventHandler_t) (void)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00101\">101</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a id=\"a7493ad6706df484ac2749d7613266613\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7493ad6706df484ac2749d7613266613\">&#9670;&nbsp;</a></span>gatewayMessageType_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613\">gatewayMessageType_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Message code definition. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\"></a>SENSOR_DATA&#160;</td><td class=\"fielddoc\"><p>Data message from sensor node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613affd78f537f0c30f76f209e5afd106843\"></a>SENSOR_BRCAST_DATA&#160;</td><td class=\"fielddoc\"><p>Data broadcast message from sensor node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\"></a>UNENCRYPTED_NODE_DATA&#160;</td><td class=\"fielddoc\"><p>Data message from sensor node. Unencrypted </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\"></a>DOWNSTREAM_DATA_SET&#160;</td><td class=\"fielddoc\"><p>Data message from gateway. Downstream data for user commands </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\"></a>DOWNSTREAM_BRCAST_DATA_SET&#160;</td><td class=\"fielddoc\"><p>Data broadcast message from gateway. Downstream data for user commands </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\"></a>DOWNSTREAM_DATA_GET&#160;</td><td class=\"fielddoc\"><p>Data message from gateway. Downstream data for user commands </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\"></a>DOWNSTREAM_BRCAST_DATA_GET&#160;</td><td class=\"fielddoc\"><p>Data broadcast message from gateway. Downstream data for user commands </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\"></a>CONTROL_DATA&#160;</td><td class=\"fielddoc\"><p>Internal control message from sensor to gateway. Used for OTA, settings configuration, etc </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\"></a>DOWNSTREAM_CTRL_DATA&#160;</td><td class=\"fielddoc\"><p>Internal control message from gateway to sensor. Used for OTA, settings configuration, etc </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\"></a>DOWNSTREAM_BRCAST_CTRL_DATA&#160;</td><td class=\"fielddoc\"><p>Internal control broadcast message from gateway to sensor. Used for OTA, settings configuration, etc </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\"></a>HA_DISCOVERY_MESSAGE&#160;</td><td class=\"fielddoc\"><p>This sends gateway needed information to build a Home Assistant discovery MQTT message to allow automatic entities provision </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\"></a>CLOCK_REQUEST&#160;</td><td class=\"fielddoc\"><p>Clock request message from node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\"></a>CLOCK_RESPONSE&#160;</td><td class=\"fielddoc\"><p>Clock response message from gateway </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\"></a>NODE_NAME_SET&#160;</td><td class=\"fielddoc\"><p>Message from node to signal its own custom node name </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\"></a>NODE_NAME_RESULT&#160;</td><td class=\"fielddoc\"><p>Message from gateway to get result after set node name </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a45ed732c2c1b8f670d6730e6f7a684b5\"></a>BROADCAST_KEY_REQUEST&#160;</td><td class=\"fielddoc\"><p>Message from node to request broadcast key </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\"></a>BROADCAST_KEY_RESPONSE&#160;</td><td class=\"fielddoc\"><p>Message from gateway with broadcast key </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\"></a>CLIENT_HELLO&#160;</td><td class=\"fielddoc\"><p>ClientHello message from sensor node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\"></a>SERVER_HELLO&#160;</td><td class=\"fielddoc\"><p>ServerHello message from gateway </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\"></a>INVALIDATE_KEY&#160;</td><td class=\"fielddoc\"><p>InvalidateKey message from gateway </p>\n</td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00038\">38</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a404510882576d212315fd2ed67280d8d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a404510882576d212315fd2ed67280d8d\">&#9670;&nbsp;</a></span>gatewayPayloadEncoding_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\"></a>RAW&#160;</td><td class=\"fielddoc\"><p>Raw data without specific format </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\"></a>CAYENNELPP&#160;</td><td class=\"fielddoc\"><p>CayenneLPP packed data </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a404510882576d212315fd2ed67280d8da4d6491239946f63d9cc27a2984c4fe59\"></a>PROT_BUF&#160;</td><td class=\"fielddoc\"><p>Data packed using Protocol Buffers. NOT IMPLEMENTED </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"></a>MSG_PACK&#160;</td><td class=\"fielddoc\"><p>Data packed using MessagePack </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a404510882576d212315fd2ed67280d8da311c13f8df1217b0cd4d5537cb91311f\"></a>BSON&#160;</td><td class=\"fielddoc\"><p>Data packed using BSON. NOT IMPLEMENTED </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a404510882576d212315fd2ed67280d8da56f7b9e0a4250b6a5c73811ae092e686\"></a>CBOR&#160;</td><td class=\"fielddoc\"><p>Data packed using CBOR. NOT IMPLEMENTED </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a404510882576d212315fd2ed67280d8da298f796cee1bd5d6decfe81d4a98b554\"></a>SMILE&#160;</td><td class=\"fielddoc\"><p>Data packed using SMILE. NOT IMPLEMENTED </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\"></a>ENIGMAIOT&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00061\">61</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4272866ccf327ab11a97c334d16cf977\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4272866ccf327ab11a97c334d16cf977\">&#9670;&nbsp;</a></span>gwInvalidateReason_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Key invalidation reason definition. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\"></a>UNKNOWN_ERROR&#160;</td><td class=\"fielddoc\"><p>Unknown error. Not used by the moment </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4272866ccf327ab11a97c334d16cf977ad6e9d0b3e3d479305eb2ce4233f4eca6\"></a>WRONG_CLIENT_HELLO&#160;</td><td class=\"fielddoc\"><p>ClientHello message received was invalid </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\"></a>WRONG_DATA&#160;</td><td class=\"fielddoc\"><p>Data message received could not be decrypted successfuly </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\"></a>UNREGISTERED_NODE&#160;</td><td class=\"fielddoc\"><p>Data received from an unregistered node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\"></a>KEY_EXPIRED&#160;</td><td class=\"fielddoc\"><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> key has reached maximum validity time </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\"></a>KICKED&#160;</td><td class=\"fielddoc\"><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> key has been forcibly unregistered </p>\n</td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00075\">75</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"abcd4985de3ef6fbe1994af85093ca034\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abcd4985de3ef6fbe1994af85093ca034\">&#9670;&nbsp;</a></span>EnigmaIOTGateway</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> EnigmaIOTGateway</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">extern</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l02050\">2050</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTGateway_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTGateway.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGateway.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOTGateway_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _ENIGMAIOTGATEWAY_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _ENIGMAIOTGATEWAY_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"NodeList_8h.html\">NodeList.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"Filter_8h.html\">Filter.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"Comms__hal_8h.html\">Comms_hal.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;DNSServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;queue&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIOTRingBuffer_8h.html\">EnigmaIOTRingBuffer.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#if ENABLE_REST_API</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"GatewayAPI_8h.html\">GatewayAPI.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif // ENABLE_REST_API</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">   32</a></span>&#160;<span class=\"preprocessor\">#define LED_ON LOW</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a80700bb63bd56ebabbb4728aa433fd29\">   33</a></span>&#160;<span class=\"preprocessor\">#define LED_OFF !LED_ON</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613\">   38</a></span>&#160;<span class=\"keyword\">enum</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613\">gatewayMessageType_t</a> {</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">   39</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a> = 0x01, </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613affd78f537f0c30f76f209e5afd106843\">   40</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613affd78f537f0c30f76f209e5afd106843\">SENSOR_BRCAST_DATA</a> = 0x81, </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\">   41</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\">UNENCRYPTED_NODE_DATA</a> = 0x11, </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">   42</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a> = 0x02, </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\">   43</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\">DOWNSTREAM_BRCAST_DATA_SET</a> = 0x82, </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">   44</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a> = 0x12, </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\">   45</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\">DOWNSTREAM_BRCAST_DATA_GET</a> = 0x92, </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\">   46</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\">CONTROL_DATA</a> = 0x03, </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\">   47</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\">DOWNSTREAM_CTRL_DATA</a> = 0x04, </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\">   48</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\">DOWNSTREAM_BRCAST_CTRL_DATA</a> = 0x84, </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">   49</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a> = 0x08, </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\">   50</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\">CLOCK_REQUEST</a> = 0x05, </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\">   51</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\">CLOCK_RESPONSE</a> = 0x06, </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\">   52</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\">NODE_NAME_SET</a> = 0x07, </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\">   53</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\">NODE_NAME_RESULT</a> = 0x17, </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a45ed732c2c1b8f670d6730e6f7a684b5\">   54</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a45ed732c2c1b8f670d6730e6f7a684b5\">BROADCAST_KEY_REQUEST</a> = 0x08, </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\">   55</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\">BROADCAST_KEY_RESPONSE</a> = 0x18, </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\">   56</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\">CLIENT_HELLO</a> = 0xFF, </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\">   57</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\">SERVER_HELLO</a> = 0xFE, </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\">INVALIDATE_KEY</a> = 0xFB </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\">   59</a></span>&#160;};</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160; </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">   61</a></span>&#160;<span class=\"keyword\">enum</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> {</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">   62</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a> = 0x00, </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">   63</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a> = 0x81, </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da4d6491239946f63d9cc27a2984c4fe59\">   64</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da4d6491239946f63d9cc27a2984c4fe59\">PROT_BUF</a> = 0x82, </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">   65</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a> = 0x83, </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da311c13f8df1217b0cd4d5537cb91311f\">   66</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da311c13f8df1217b0cd4d5537cb91311f\">BSON</a> = 0x84, </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da56f7b9e0a4250b6a5c73811ae092e686\">   67</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da56f7b9e0a4250b6a5c73811ae092e686\">CBOR</a> = 0x85, </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da298f796cee1bd5d6decfe81d4a98b554\">   68</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da298f796cee1bd5d6decfe81d4a98b554\">SMILE</a> = 0x86, </div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">ENIGMAIOT</a> = 0xFF</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">   70</a></span>&#160;};</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">   75</a></span>&#160;<span class=\"keyword\">enum</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> {</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\">   76</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a> = 0x00, </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977ad6e9d0b3e3d479305eb2ce4233f4eca6\">   77</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977ad6e9d0b3e3d479305eb2ce4233f4eca6\">WRONG_CLIENT_HELLO</a> = 0x01, </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    <span class=\"comment\">//WRONG_EXCHANGE_FINISHED = 0x02, /**&lt; KeyExchangeFinished message received was invalid. Probably this means an error on shared key */</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\">   79</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\">WRONG_DATA</a> = 0x03, </div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\">   80</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\">UNREGISTERED_NODE</a> = 0x04, </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">   81</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a> = 0x05, </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\">KICKED</a> = 0x06 </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\">   83</a></span>&#160;};</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">#if defined ARDUINO_ARCH_ESP8266 || defined ARDUINO_ARCH_ESP32</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (uint8_t* mac, uint8_t* buf, uint8_t len, uint16_t lostMessages, <span class=\"keywordtype\">bool</span> control, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> payload_type, <span class=\"keywordtype\">char</span>* nodeName)&gt; <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">onGwDataRx_t</a>;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* topic, <span class=\"keywordtype\">char</span> *message, <span class=\"keywordtype\">size_t</span> len)&gt; onHADiscovery_t;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (uint8_t* mac, uint16_t node_id, <span class=\"keywordtype\">char</span>* nodeName)&gt; <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">onNewNode_t</a>;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (uint8_t* mac, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason)&gt; <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">onNodeDisconnected_t</a>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (<span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)&gt; <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891\">onWiFiManagerExit_t</a>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (<span class=\"keywordtype\">void</span>)&gt; <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a>;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">   97</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">onGwDataRx_t</a>)(uint8_t* mac, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len, uint16_t lostMessages, <span class=\"keywordtype\">bool</span> control, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> payload_type, <span class=\"keywordtype\">char</span>* nodeName);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">   98</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">onNewNode_t</a>)(uint8_t* mac, uint16_t node_id, <span class=\"keywordtype\">char</span>* nodeName);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">   99</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">onNodeDisconnected_t</a>)(uint8_t* mac, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891\">  100</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891\">onWiFiManagerExit_t</a>)(<span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">  101</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a>)(void);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"structgateway__config__t.html\">  104</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span>{</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">  105</a></span>&#160;    uint8_t channel = <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">DEFAULT_CHANNEL</a>; </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">  106</a></span>&#160;    uint8_t networkKey[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>];   </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">  107</a></span>&#160;    <span class=\"keywordtype\">char</span> networkName[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a>];   </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;} <a class=\"code\" href=\"structgateway__config__t.html\">gateway_config_t</a>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160; </div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmsg__queue__item__t.html\">  110</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span>{</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">  111</a></span>&#160;    uint8_t addr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]; </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">  112</a></span>&#160;    uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">  113</a></span>&#160;    <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">len</a>; </div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;} <a class=\"code\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160; </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html\">  120</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> {</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">  122</a></span>&#160;    uint8_t <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">myPublicKey</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">  123</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">flashTx</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">  124</a></span>&#160;    <span class=\"keyword\">volatile</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">flashRx</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">  125</a></span>&#160;    <a class=\"code\" href=\"structnode__instance.html\">node_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>; </div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">  126</a></span>&#160;    <a class=\"code\" href=\"classNodeList.html\">NodeList</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>; </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">  127</a></span>&#160;    <a class=\"code\" href=\"classComms__halClass.html\">Comms_halClass</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>; </div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">  128</a></span>&#160;    int8_t <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">txled</a> = -1; </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">  129</a></span>&#160;    int8_t <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">rxled</a> = -1; </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">  130</a></span>&#160;    <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">txLedOnTime</a>; </div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">  131</a></span>&#160;    <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">rxLedOnTime</a>; </div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">  132</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">onGwDataRx_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">notifyData</a>; </div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">  134</a></span>&#160;    onHADiscovery_t <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">notifyHADiscovery</a>; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">  136</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">onNewNode_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">notifyNewNode</a>; </div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">  137</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">onNodeDisconnected_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">notifyNodeDisconnection</a>; </div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">  138</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">notifyRestartRequested</a>; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">  139</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a> = <span class=\"keyword\">true</span>; </div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">  140</a></span>&#160;    <a class=\"code\" href=\"structgateway__config__t.html\">gateway_config_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>; </div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">  141</a></span>&#160;    <span class=\"keywordtype\">char</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">plainNetKey</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    portMUX_TYPE myMutex = portMUX_INITIALIZER_UNLOCKED; </div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74\">  145</a></span>&#160;    <a class=\"code\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74\">tempBuffer</a>; </div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160; </div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">  147</a></span>&#160;    <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt;msg_queue_item_t&gt;</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a>; </div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160; </div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">  149</a></span>&#160;    AsyncWebServer* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">server</a>; </div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">  150</a></span>&#160;    DNSServer* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">dns</a>; </div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">  151</a></span>&#160;    AsyncWiFiManager* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">  152</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891\">onWiFiManagerExit_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">notifyWiFiManagerExit</a>; </div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">  153</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">notifyWiFiManagerStarted</a>; </div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a0b1bb7ec1dc2b4a244c77ffd04786a0c\">  155</a></span>&#160;    <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code\" href=\"classGatewayAPI.html\">GatewayAPI</a>;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160; </div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">doSave</a> (<span class=\"keywordtype\">void</span>);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">doResetConfig</a> (<span class=\"keywordtype\">void</span>);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160; </div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160; </div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\">serverHello</a> (<span class=\"keyword\">const</span> uint8_t* key, <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160; </div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\">sendBroadcastKey</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160; </div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\">processClientHello</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160; </div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\">processClockRequest</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160; </div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\">clockResponse</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, uint64_t t1, uint64_t t2);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160; </div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason);</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160; </div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\">processDataMessage</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <span class=\"keywordtype\">bool</span> encrypted = <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160; </div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\">processUnencryptedDataMessage</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160; </div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">downstreamDataMessage</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> controlData, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> encoding = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">ENIGMAIOT</a>);</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160; </div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\">processControlMessage</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160; </div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\">processNodeNameSet</a> (<span class=\"keyword\">const</span> uint8_t mac[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>);</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160; </div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381\">nodeNameSetRespose</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, int8_t error);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160; </div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">manageMessage</a> (<span class=\"keyword\">const</span> uint8_t* mac, uint8_t* buf, uint8_t count);</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160; </div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">rx_cb</a> (uint8_t* mac_addr, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160; </div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">tx_cb</a> (uint8_t* mac_addr, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160; </div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">getStatus</a> (uint8_t* mac_addr, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160; </div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">loadFlashData</a> ();</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160; </div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">saveFlashData</a> ();</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160; </div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\">sendHADiscoveryJSON</a> (uint8_t* address, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName);</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">getShouldSave</a> ();</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160; </div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">  349</a></span>&#160;    <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">getNetworkName</a> () {</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a>;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160; </div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">  357</a></span>&#160;    <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">getNetworkKey</a> (<span class=\"keywordtype\">bool</span> plain = <span class=\"keyword\">false</span>) {</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;        <span class=\"keywordflow\">if</span> (plain)</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;            <span class=\"keywordflow\">return</span> (<span class=\"keywordtype\">char</span>*)(<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">plainNetKey</a>);</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;        <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;            <span class=\"keywordflow\">return</span> (<span class=\"keywordtype\">char</span>*)(<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a>.<a class=\"code\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a>);</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160; </div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">  368</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">addWiFiManagerParameter</a> (AsyncWiFiManagerParameter* p) {</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>) {</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a>-&gt;addParameter (p);</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160; </div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">  378</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">onWiFiManagerExit</a> (<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891\">onWiFiManagerExit_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a>) {</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">notifyWiFiManagerExit</a> = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a>;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160; </div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">  386</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">onWiFiManagerStarted</a> (<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a>) {</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">notifyWiFiManagerStarted</a> = <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a>;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160; </div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">configWiFiManager</a> ();</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160; </div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">begin</a> (<a class=\"code\" href=\"classComms__halClass.html\">Comms_halClass</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>, uint8_t* networkKey = NULL, <span class=\"keywordtype\">bool</span> useDataCounter = <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160; </div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a> ();</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160; </div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">setTxLed</a> (uint8_t led, time_t onTime = <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a>);</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160; </div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">setRxLed</a> (uint8_t led, time_t onTime = <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a>);</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160; </div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">  449</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">onGwDataRx_t</a> handler) {</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">notifyData</a> = handler;</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160; </div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160; </div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83\">  458</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83\">onHADiscovery</a> (onHADiscovery_t handler) {</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">notifyHADiscovery</a> = handler;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160; </div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;    <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">getPER</a> (uint8_t* address);</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160; </div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;    uint32_t <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">getTotalPackets</a> (uint8_t* address);</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160; </div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;    uint32_t <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">getErrorPackets</a> (uint8_t* address);</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160; </div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;    <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">getPacketsHour</a> (uint8_t* address);</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160; </div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">sendDownstream</a> (uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> controlData, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> payload_type = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a>, <span class=\"keywordtype\">char</span>* nodeName = NULL);</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160; </div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">  528</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">onNewNode</a> (<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">onNewNode_t</a> handler) {</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">notifyNewNode</a> = handler;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160; </div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">  557</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">onNodeDisconnected</a> (<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">onNodeDisconnected_t</a> handler) {</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">notifyNodeDisconnection</a> = handler;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160; </div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db\">  565</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db\">onGatewayRestartRequested</a> (<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> handler) {</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">notifyRestartRequested</a> = handler;</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">addInputMsgQueue</a> (<span class=\"keyword\">const</span> uint8_t* addr, <span class=\"keyword\">const</span> uint8_t* msg, <span class=\"keywordtype\">size_t</span> len);</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160; </div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;    <a class=\"code\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">getInputMsgQueue</a> (<a class=\"code\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>* buffer);</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160; </div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">popInputMsgQueue</a> ();</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160; </div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">  592</a></span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">getActiveNodesNumber</a> () {</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">countActiveNodes</a> ();</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160; </div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">  600</a></span>&#160;    <a class=\"code\" href=\"classNodeList.html\">NodeList</a>* <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">getNodes</a> () {</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;        <span class=\"keywordflow\">return</span> &amp;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160; </div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160; </div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;<span class=\"keyword\">extern</span> <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>;</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160; </div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da311c13f8df1217b0cd4d5537cb91311f\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da311c13f8df1217b0cd4d5537cb91311f\">BSON</a></div><div class=\"ttdeci\">@ BSON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00066\">EnigmaIOTGateway.h:66</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a74f3b21d578650defdb63b334102dc48\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">EnigmaIOTGatewayClass::onWiFiManagerExit</a></div><div class=\"ttdeci\">void onWiFiManagerExit(onWiFiManagerExit_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager exit.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00378\">EnigmaIOTGateway.h:378</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ab639ce1297059231304d90d41ab65197\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">EnigmaIOTGatewayClass::flashRx</a></div><div class=\"ttdeci\">volatile bool flashRx</div><div class=\"ttdoc\">true if Rx LED should flash</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00124\">EnigmaIOTGateway.h:124</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\">CLOCK_RESPONSE</a></div><div class=\"ttdeci\">@ CLOCK_RESPONSE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00051\">EnigmaIOTGateway.h:51</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a4a8fee82bf25fa412846a5ffa2a3cbbb\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">EnigmaIOTGatewayClass::getActiveNodesNumber</a></div><div class=\"ttdeci\">int getActiveNodesNumber()</div><div class=\"ttdoc\">Gets number of active nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00592\">EnigmaIOTGateway.h:592</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ac241f6c48c82d297389d78ec338ddb33\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">EnigmaIOTGatewayClass::invalidateKey</a></div><div class=\"ttdeci\">bool invalidateKey(Node *node, gwInvalidateReason_t reason)</div><div class=\"ttdoc\">Creates an InvalidateKey message and sned it. This trigger a new key agreement to start on related no...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01624\">EnigmaIOTGateway.cpp:1624</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613\">gatewayMessageType_t</a></div><div class=\"ttdeci\">gatewayMessageType_t</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00038\">EnigmaIOTGateway.h:38</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTRingBuffer_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTRingBuffer_8h.html\">EnigmaIOTRingBuffer.h</a></div><div class=\"ttdoc\">Library to build a gateway for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a24cc18886d923df0320b6ac4eac19028\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">EnigmaIOTGatewayClass::useCounter</a></div><div class=\"ttdeci\">bool useCounter</div><div class=\"ttdoc\">true if counter is used to check data messages order</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00139\">EnigmaIOTGateway.h:139</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ae91f344eeae1900179ab65a247e38eda\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">EnigmaIOTGatewayClass::doResetConfig</a></div><div class=\"ttdeci\">static void doResetConfig(void)</div><div class=\"ttdoc\">Activates a flag that signals that configuration has to be saved.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00047\">EnigmaIOTGateway.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977ad6e9d0b3e3d479305eb2ce4233f4eca6\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977ad6e9d0b3e3d479305eb2ce4233f4eca6\">WRONG_CLIENT_HELLO</a></div><div class=\"ttdeci\">@ WRONG_CLIENT_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00077\">EnigmaIOTGateway.h:77</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_adefe71141a5aa6f9c46712487b6feb31\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">EnigmaIOTGatewayClass::myPublicKey</a></div><div class=\"ttdeci\">uint8_t myPublicKey[KEY_LENGTH]</div><div class=\"ttdoc\">Temporary public key store used during key agreement.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00122\">EnigmaIOTGateway.h:122</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a43043a36c73d7de2ffe49e551cc6ae43\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">EnigmaIOTGatewayClass::addInputMsgQueue</a></div><div class=\"ttdeci\">bool addInputMsgQueue(const uint8_t *addr, const uint8_t *msg, size_t len)</div><div class=\"ttdoc\">Add message to input queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00792\">EnigmaIOTGateway.cpp:792</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5e93664145eb75e55ae4c6d3482c8a64\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">EnigmaIOTGatewayClass::rxLedOnTime</a></div><div class=\"ttdeci\">unsigned long rxLedOnTime</div><div class=\"ttdoc\">Flash duration for Rx LED.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00131\">EnigmaIOTGateway.h:131</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a45ed732c2c1b8f670d6730e6f7a684b5\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a45ed732c2c1b8f670d6730e6f7a684b5\">BROADCAST_KEY_REQUEST</a></div><div class=\"ttdeci\">@ BROADCAST_KEY_REQUEST</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00054\">EnigmaIOTGateway.h:54</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; msg_queue_item_t &gt;</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a975c9b549e113deebe5581d5107d34b2\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">EnigmaIOTGatewayClass::onNodeDisconnected</a></div><div class=\"ttdeci\">void onNodeDisconnected(onNodeDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called every time a node is disconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00557\">EnigmaIOTGateway.h:557</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\">NODE_NAME_SET</a></div><div class=\"ttdeci\">@ NODE_NAME_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00052\">EnigmaIOTGateway.h:52</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html\"><div class=\"ttname\"><a href=\"NodeList_8h.html\">NodeList.h</a></div><div class=\"ttdoc\">EnigmaIoT sensor node management structures.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></div><div class=\"ttdoc\">Main gateway class. Manages communication with nodes and sends data to upper layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00120\">EnigmaIOTGateway.h:120</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a2611c30452fc9785b3958eddca02daf8\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">EnigmaIOTGatewayClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onGwDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00449\">EnigmaIOTGateway.h:449</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html\"><div class=\"ttname\"><a href=\"classGatewayAPI.html\">GatewayAPI</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8h_source.html#l00025\">GatewayAPI.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a90c1c1bffe2884247a2e047d7d254767\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\">EnigmaIOTGatewayClass::processControlMessage</a></div><div class=\"ttdeci\">bool processControlMessage(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node)</div><div class=\"ttdoc\">Processes control message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01250\">EnigmaIOTGateway.cpp:1250</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5ddb096aa5a0ec2113307a1480992a83\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83\">EnigmaIOTGatewayClass::onHADiscovery</a></div><div class=\"ttdeci\">void onHADiscovery(onHADiscovery_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called when a Home Assistant discovery message is received f...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00458\">EnigmaIOTGateway.h:458</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a2dc1f081e8bf48d5c4e64db9caf94f74\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74\">EnigmaIOTGatewayClass::tempBuffer</a></div><div class=\"ttdeci\">msg_queue_item_t tempBuffer</div><div class=\"ttdoc\">Temporary storage for input message got from buffer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00145\">EnigmaIOTGateway.h:145</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a2e19a23469e04f87744ffc930e51cf8e\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">EnigmaIOTGatewayClass::manageMessage</a></div><div class=\"ttdeci\">void manageMessage(const uint8_t *mac, uint8_t *buf, uint8_t count)</div><div class=\"ttdoc\">Process every received message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00935\">EnigmaIOTGateway.cpp:935</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ab049e20310e2a18bd1f8adc4ec975254\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">EnigmaIOTGatewayClass::comm</a></div><div class=\"ttdeci\">Comms_halClass * comm</div><div class=\"ttdoc\">Instance of physical communication layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00127\">EnigmaIOTGateway.h:127</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad43bd94c6aebd18abd374da313d3b299\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">EnigmaIOTGatewayClass::rx_cb</a></div><div class=\"ttdeci\">static void rx_cb(uint8_t *mac_addr, uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Function that will be called anytime this gateway receives a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00849\">EnigmaIOTGateway.cpp:849</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\">DOWNSTREAM_BRCAST_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_BRCAST_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00045\">EnigmaIOTGateway.h:45</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a8d86390169309396f3d21149c3649453\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">EnigmaIOTGatewayClass::txled</a></div><div class=\"ttdeci\">int8_t txled</div><div class=\"ttdoc\">I/O pin to connect a led that flashes when gateway transmits data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00128\">EnigmaIOTGateway.h:128</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad6c301b780bd802ee98bbe25885c0cfd\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">EnigmaIOTGatewayClass::configWiFiManager</a></div><div class=\"ttdeci\">bool configWiFiManager()</div><div class=\"ttdoc\">Starts configuration AP and web server and gets settings from it.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00494\">EnigmaIOTGateway.cpp:494</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a44cd0a3ac1595ecd3156af130a2cb130\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\">EnigmaIOTGatewayClass::processDataMessage</a></div><div class=\"ttdeci\">bool processDataMessage(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node, bool encrypted=true)</div><div class=\"ttdoc\">Processes data message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01377\">EnigmaIOTGateway.cpp:1377</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a6de87231a98aa132483ae97120b0f4d5\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">EnigmaIOTGatewayClass::server</a></div><div class=\"ttdeci\">AsyncWebServer * server</div><div class=\"ttdoc\">WebServer that holds configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00149\">EnigmaIOTGateway.h:149</a></div></div>\n<div class=\"ttc\" id=\"astructgateway__config__t_html_a0ff4851d0c71213fa6a1a63acb5c9d6f\"><div class=\"ttname\"><a href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">gateway_config_t::networkKey</a></div><div class=\"ttdeci\">uint8_t networkKey[KEY_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00106\">EnigmaIOTGateway.h:106</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ab21597ced9ee31298c8a8eefed562ff9\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">EnigmaIOTGatewayClass::notifyData</a></div><div class=\"ttdeci\">onGwDataRx_t notifyData</div><div class=\"ttdoc\">Callback function that will be invoked when data is received from a node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00132\">EnigmaIOTGateway.h:132</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a></div><div class=\"ttdeci\">@ RAW</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00062\">EnigmaIOTGateway.h:62</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a492277b3df7f10f988c3d5cd087d1a40\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">EnigmaIOTGatewayClass::input_queue</a></div><div class=\"ttdeci\">EnigmaIOTRingBuffer&lt; msg_queue_item_t &gt; * input_queue</div><div class=\"ttdoc\">Input messages buffer. It acts as a FIFO queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00147\">EnigmaIOTGateway.h:147</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a></div><div class=\"ttdoc\">Parameter configuration.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a29ed1ba0c2a04911013795cb11ff13e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">EnigmaIOTGatewayClass::getNetworkName</a></div><div class=\"ttdeci\">char * getNetworkName()</div><div class=\"ttdoc\">Gets EnigmaIOT network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00349\">EnigmaIOTGateway.h:349</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\">KICKED</a></div><div class=\"ttdeci\">@ KICKED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00083\">EnigmaIOTGateway.h:82</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ae0c52d330bfce048e9d8c4fb8cf1a967\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">EnigmaIOTGatewayClass::notifyHADiscovery</a></div><div class=\"ttdeci\">onHADiscovery_t notifyHADiscovery</div><div class=\"ttdoc\">Callback function that will be invoked when HomeAssistant discovery message is received from a node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00134\">EnigmaIOTGateway.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a2fbf2cc61a51bdce3254f8478268f0c3\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\">EnigmaIOTGatewayClass::sendBroadcastKey</a></div><div class=\"ttdeci\">bool sendBroadcastKey(Node *node)</div><div class=\"ttdoc\">Sends broadcast key to node if it has requested it explicitly or it has notified during handshake.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01903\">EnigmaIOTGateway.cpp:1903</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9865adf18595ebc6eb73154e6267380e\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NETWORK_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00024\">EnigmaIoTconfigAdvanced.h:24</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da56f7b9e0a4250b6a5c73811ae092e686\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da56f7b9e0a4250b6a5c73811ae092e686\">CBOR</a></div><div class=\"ttdeci\">@ CBOR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00067\">EnigmaIOTGateway.h:67</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da4d6491239946f63d9cc27a2984c4fe59\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da4d6491239946f63d9cc27a2984c4fe59\">PROT_BUF</a></div><div class=\"ttdeci\">@ PROT_BUF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00064\">EnigmaIOTGateway.h:64</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">ENIGMAIOT</a></div><div class=\"ttdeci\">@ ENIGMAIOT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00070\">EnigmaIOTGateway.h:69</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a9f121c9f733353f210aa9725375fae4b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">EnigmaIOTGatewayClass::notifyRestartRequested</a></div><div class=\"ttdeci\">simpleEventHandler_t notifyRestartRequested</div><div class=\"ttdoc\">Callback function that will be invoked when a hardware restart is requested.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00138\">EnigmaIOTGateway.h:138</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_abcd4985de3ef6fbe1994af85093ca034\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a></div><div class=\"ttdeci\">EnigmaIOTGatewayClass EnigmaIOTGateway</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l02050\">EnigmaIOTGateway.cpp:2050</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00044\">EnigmaIOTGateway.h:44</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a514a694eb41c0cbb43e43c1621313187\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">EnigmaIOTGatewayClass::setRxLed</a></div><div class=\"ttdeci\">void setRxLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is received.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00066\">EnigmaIOTGateway.cpp:66</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a88c43de63b862f5a19a79e9d5558beba\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">EnigmaIOTGatewayClass::notifyWiFiManagerExit</a></div><div class=\"ttdeci\">onWiFiManagerExit_t notifyWiFiManagerExit</div><div class=\"ttdoc\">Function called when configuration portal exits.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00152\">EnigmaIOTGateway.h:152</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00042\">EnigmaIOTGateway.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a52bbd932eb2a7fac9a3dc1debbc62e5b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">EnigmaIOTGatewayClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00867\">EnigmaIOTGateway.cpp:867</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad900c9546a9b2f0e99d2c7bec781dad7\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">EnigmaIOTGatewayClass::addWiFiManagerParameter</a></div><div class=\"ttdeci\">void addWiFiManagerParameter(AsyncWiFiManagerParameter *p)</div><div class=\"ttdoc\">Adds a parameter to configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00368\">EnigmaIOTGateway.h:368</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8h_html\"><div class=\"ttname\"><a href=\"GatewayAPI_8h.html\">GatewayAPI.h</a></div><div class=\"ttdoc\">API web server to control EnigmaIOT Gateway.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\">DOWNSTREAM_CTRL_DATA</a></div><div class=\"ttdeci\">@ DOWNSTREAM_CTRL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00047\">EnigmaIOTGateway.h:47</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ac311b64885137edaab70f3692e47f061\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">EnigmaIOTGatewayClass::notifyNodeDisconnection</a></div><div class=\"ttdeci\">onNodeDisconnected_t notifyNodeDisconnection</div><div class=\"ttdoc\">Callback function that will be invoked when a node gets disconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00137\">EnigmaIOTGateway.h:137</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a78b4e66eaf1e4a1cdb4baead912fb1cc\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\">EnigmaIOTGatewayClass::processUnencryptedDataMessage</a></div><div class=\"ttdeci\">bool processUnencryptedDataMessage(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node)</div><div class=\"ttdoc\">Processes unencrypted data message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01324\">EnigmaIOTGateway.cpp:1324</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a330863b8dd757d66f990a14298f2faf0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">EnigmaIOTGatewayClass::setTxLed</a></div><div class=\"ttdeci\">void setTxLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00059\">EnigmaIOTGateway.cpp:59</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_ad49ee5d953f324e799a0434ff3b044c7\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">onNewNode_t</a></div><div class=\"ttdeci\">void(* onNewNode_t)(uint8_t *mac, uint16_t node_id, char *nodeName)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00098\">EnigmaIOTGateway.h:98</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\">CONTROL_DATA</a></div><div class=\"ttdeci\">@ CONTROL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00046\">EnigmaIOTGateway.h:46</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7c95cb7d1926120867fd8a4246f90f5c\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a></div><div class=\"ttdeci\">void(* simpleEventHandler_t)(void)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00101\">EnigmaIOTGateway.h:101</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a></div><div class=\"ttdeci\">@ SENSOR_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00039\">EnigmaIOTGateway.h:39</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a0ea92c22b1d415d53d635391d9ef6b07\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\">EnigmaIOTGatewayClass::processClockRequest</a></div><div class=\"ttdeci\">bool processClockRequest(const uint8_t mac[ENIGMAIOT_ADDR_LEN], const uint8_t *buf, size_t count, Node *node)</div><div class=\"ttdoc\">Starts clock sync procedure from node to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01739\">EnigmaIOTGateway.cpp:1739</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a></div><div class=\"ttdeci\">gatewayPayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00061\">EnigmaIOTGateway.h:61</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html\"><div class=\"ttname\"><a href=\"structnode__instance.html\">node_instance</a></div><div class=\"ttdoc\">Struct that define node fields. Used for long term storage needs.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00089\">NodeList.h:89</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\">DOWNSTREAM_BRCAST_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_BRCAST_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00043\">EnigmaIOTGateway.h:43</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a8eed8023d964354b6a2533c9662037e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">EnigmaIOTGatewayClass::getTotalPackets</a></div><div class=\"ttdeci\">uint32_t getTotalPackets(uint8_t *address)</div><div class=\"ttdoc\">Gets total packets sent by node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01470\">EnigmaIOTGateway.cpp:1470</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5eb353d426ea01a2aa183ae90855a3ae\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">EnigmaIOTGatewayClass::flashTx</a></div><div class=\"ttdeci\">bool flashTx</div><div class=\"ttdoc\">true if Tx LED should flash</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00123\">EnigmaIOTGateway.h:123</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aa057eae7440f60abe236ae5b121dbf7c\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">EnigmaIOTGatewayClass::dns</a></div><div class=\"ttdeci\">DNSServer * dns</div><div class=\"ttdoc\">DNS server used by configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00150\">EnigmaIOTGateway.h:150</a></div></div>\n<div class=\"ttc\" id=\"astructmsg__queue__item__t_html\"><div class=\"ttname\"><a href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00110\">EnigmaIOTGateway.h:110</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a1726020bc65217b9ec4d01bb0216a526\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">EnigmaIOTGatewayClass::onNewNode</a></div><div class=\"ttdeci\">void onNewNode(onNewNode_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called every time a node gets connected or reconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00528\">EnigmaIOTGateway.h:528</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a6d0c9737f65f857080b7d11c34f4141e\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">EnigmaIOTGatewayClass::getStatus</a></div><div class=\"ttdeci\">void getStatus(uint8_t *mac_addr, uint8_t status)</div><div class=\"ttdoc\">Functrion to debug send status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00858\">EnigmaIOTGateway.cpp:858</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a446e327328ebbcbe9b20f38f1080b9e6\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">EnigmaIOTGatewayClass::getShouldSave</a></div><div class=\"ttdeci\">bool getShouldSave()</div><div class=\"ttdoc\">Gets flag that indicates if configuration should be saved.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00055\">EnigmaIOTGateway.cpp:55</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a1ef5d02770b1b3bf2acf0adf7b410a17\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">EnigmaIOTGatewayClass::nodelist</a></div><div class=\"ttdeci\">NodeList nodelist</div><div class=\"ttdoc\">Node database that keeps status and shared keys.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00126\">EnigmaIOTGateway.h:126</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aa132262cf2eee428208df22d2072acf9\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\">EnigmaIOTGatewayClass::clockResponse</a></div><div class=\"ttdeci\">bool clockResponse(Node *node, uint64_t t1, uint64_t t2)</div><div class=\"ttdoc\">Returns timestaps needed so that node can calculate time difference.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01822\">EnigmaIOTGateway.cpp:1822</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613affd78f537f0c30f76f209e5afd106843\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613affd78f537f0c30f76f209e5afd106843\">SENSOR_BRCAST_DATA</a></div><div class=\"ttdeci\">@ SENSOR_BRCAST_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00040\">EnigmaIOTGateway.h:40</a></div></div>\n<div class=\"ttc\" id=\"astructmsg__queue__item__t_html_a62805793291f61bc8b07e2b432ec3e65\"><div class=\"ttname\"><a href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">msg_queue_item_t::len</a></div><div class=\"ttdeci\">size_t len</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00113\">EnigmaIOTGateway.h:113</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aabb971124202457b2e8a3627217dd213\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">EnigmaIOTGatewayClass::getNodes</a></div><div class=\"ttdeci\">NodeList * getNodes()</div><div class=\"ttdoc\">Gets nodes data structure.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00600\">EnigmaIOTGateway.h:600</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a863ca9be67da8cdc5fb9447378021e07\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a></div><div class=\"ttdeci\">const uint8_t KEY_LENGTH</div><div class=\"ttdoc\">Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00070\">EnigmaIoTconfigAdvanced.h:70</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a037f8a0b338363b5555f353df30120ca\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">EnigmaIOTGatewayClass::onWiFiManagerStarted</a></div><div class=\"ttdeci\">void onWiFiManagerStarted(simpleEventHandler_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager start.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00386\">EnigmaIOTGateway.h:386</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a69e6d53334b842b054fc9e3cfdbb6067\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">EnigmaIOTGatewayClass::node</a></div><div class=\"ttdeci\">node_t node</div><div class=\"ttdoc\">temporary store to keep node data while processing a message</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00125\">EnigmaIOTGateway.h:125</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aacbd1597e7a6be2957ac4f3ade9dc243\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">EnigmaIOTGatewayClass::txLedOnTime</a></div><div class=\"ttdeci\">unsigned long txLedOnTime</div><div class=\"ttdoc\">Flash duration for Tx LED.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00130\">EnigmaIOTGateway.h:130</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a0edb12da3fe0cc767cab53ba480f6508\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">EnigmaIOTGatewayClass::doSave</a></div><div class=\"ttdeci\">static void doSave(void)</div><div class=\"ttdoc\">Activates a flag that signals that configuration has to be saved.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00042\">EnigmaIOTGateway.cpp:42</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad704dfd5a37c58ef1311501b573f1251\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">EnigmaIOTGatewayClass::notifyWiFiManagerStarted</a></div><div class=\"ttdeci\">simpleEventHandler_t notifyWiFiManagerStarted</div><div class=\"ttdoc\">Function called when configuration portal is started.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00153\">EnigmaIOTGateway.h:153</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html\"><div class=\"ttname\"><a href=\"classNode.html\">Node</a></div><div class=\"ttdoc\">Class definition for a single sensor Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00109\">NodeList.h:109</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a77802389a0b41546f60ce114097bcadc\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">EnigmaIOTGatewayClass::gwConfig</a></div><div class=\"ttdeci\">gateway_config_t gwConfig</div><div class=\"ttdoc\">Gateway specific configuration to be stored on flash memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00140\">EnigmaIOTGateway.h:140</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a></div><div class=\"ttdeci\">@ KEY_EXPIRED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00081\">EnigmaIOTGateway.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html\"><div class=\"ttname\"><a href=\"classNodeList.html\">NodeList</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00506\">NodeList.h:506</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a17e46dd4d8b522e0ce91b729e9687350\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\">EnigmaIOTGatewayClass::processClientHello</a></div><div class=\"ttdeci\">bool processClientHello(const uint8_t mac[ENIGMAIOT_ADDR_LEN], const uint8_t *buf, size_t count, Node *node)</div><div class=\"ttdoc\">Gets a buffer containing a ClientHello message and process it. This carries node public key to be use...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01660\">EnigmaIOTGateway.cpp:1660</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a0ab81e6867a72fc7dac05f24fe7fa484\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">EnigmaIOTGatewayClass::tx_cb</a></div><div class=\"ttdeci\">static void tx_cb(uint8_t *mac_addr, uint8_t status)</div><div class=\"ttdoc\">Function that will be called anytime this gateway sends a message to indicate status result of sendin...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00854\">EnigmaIOTGateway.cpp:854</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a179ab2224b2cb38ea355e8d770dc0d9a\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">EnigmaIOTGatewayClass::saveFlashData</a></div><div class=\"ttdeci\">bool saveFlashData()</div><div class=\"ttdoc\">Saves configuration to flash memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00692\">EnigmaIOTGateway.cpp:692</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a038ecd9541cb893eb58fb6aa49994816\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">EnigmaIOTGatewayClass::rxled</a></div><div class=\"ttdeci\">int8_t rxled</div><div class=\"ttdoc\">I/O pin to connect a led that flashes when gateway receives data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00129\">EnigmaIOTGateway.h:129</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a></div><div class=\"ttdeci\">@ HA_DISCOVERY_MESSAGE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00049\">EnigmaIOTGateway.h:49</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ae9b4cf7f3cd2da454161b943ba285cd0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\">EnigmaIOTGatewayClass::processNodeNameSet</a></div><div class=\"ttdeci\">bool processNodeNameSet(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node)</div><div class=\"ttdoc\">Processes new node name request fromn node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01175\">EnigmaIOTGateway.cpp:1175</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a3e4fd7a7428749c7d8a375611f667165\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">EnigmaIOTGatewayClass::downstreamDataMessage</a></div><div class=\"ttdeci\">bool downstreamDataMessage(Node *node, const uint8_t *data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t encoding=ENIGMAIOT)</div><div class=\"ttdoc\">Builds, encrypts and sends a DownstreamData message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01489\">EnigmaIOTGateway.cpp:1489</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\">WRONG_DATA</a></div><div class=\"ttdeci\">@ WRONG_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00079\">EnigmaIOTGateway.h:79</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\">SERVER_HELLO</a></div><div class=\"ttdeci\">@ SERVER_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00057\">EnigmaIOTGateway.h:57</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a059cb90513e14cc8dc7befecc75bc891\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891\">onWiFiManagerExit_t</a></div><div class=\"ttdeci\">void(* onWiFiManagerExit_t)(boolean status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00100\">EnigmaIOTGateway.h:100</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5d5ce4312735008866cf84559bc645c4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">EnigmaIOTGatewayClass::sendDownstream</a></div><div class=\"ttdeci\">bool sendDownstream(uint8_t *mac, const uint8_t *data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t payload_type=RAW, char *nodeName=NULL)</div><div class=\"ttdoc\">Starts a downstream data message transmission.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00364\">EnigmaIOTGateway.cpp:364</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_af561a36a9d4be8596b2187252342ffdf\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">DEFAULT_CHANNEL</a></div><div class=\"ttdeci\">static const uint8_t DEFAULT_CHANNEL</div><div class=\"ttdoc\">WiFi channel to be used on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00017\">EnigmaIoTconfig.h:17</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a160b39becf7cdf8700059947eaf6a73b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">EnigmaIOTGatewayClass::getErrorPackets</a></div><div class=\"ttdeci\">uint32_t getErrorPackets(uint8_t *address)</div><div class=\"ttdoc\">Gets number of errored packets of node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01476\">EnigmaIOTGateway.cpp:1476</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\">CLOCK_REQUEST</a></div><div class=\"ttdeci\">@ CLOCK_REQUEST</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00050\">EnigmaIOTGateway.h:50</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_aee09b06c0f38b77b6cf19f8d89750a1b\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">onGwDataRx_t</a></div><div class=\"ttdeci\">void(* onGwDataRx_t)(uint8_t *mac, uint8_t *data, uint8_t len, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char *nodeName)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00097\">EnigmaIOTGateway.h:97</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5c8f994db7043a0e12f9c1d2149e63db\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db\">EnigmaIOTGatewayClass::onGatewayRestartRequested</a></div><div class=\"ttdeci\">void onGatewayRestartRequested(simpleEventHandler_t handler)</div><div class=\"ttdoc\">Defines a function callback that will process a gateway restart request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00565\">EnigmaIOTGateway.h:565</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a27ddc1b8decbcf821a0427faa3c1ced3\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">EnigmaIOTGatewayClass::notifyNewNode</a></div><div class=\"ttdeci\">onNewNode_t notifyNewNode</div><div class=\"ttdoc\">Callback function that will be invoked when a new node is connected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00136\">EnigmaIOTGateway.h:136</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a77da5264eb27ff8d378a8b279c8b97c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">EnigmaIOTGatewayClass::getPacketsHour</a></div><div class=\"ttdeci\">double getPacketsHour(uint8_t *address)</div><div class=\"ttdoc\">Gets packet rate sent by node that has a specific address, in packets per hour.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01482\">EnigmaIOTGateway.cpp:1482</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\">UNREGISTERED_NODE</a></div><div class=\"ttdeci\">@ UNREGISTERED_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00080\">EnigmaIOTGateway.h:80</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\">NODE_NAME_RESULT</a></div><div class=\"ttdeci\">@ NODE_NAME_RESULT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00053\">EnigmaIOTGateway.h:53</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a152501c4de4fad4ccdc6dffa8b47c349\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a></div><div class=\"ttdeci\">static const uint32_t FLASH_LED_TIME</div><div class=\"ttdoc\">Time that led keeps on during flash in ms.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00018\">EnigmaIoTconfig.h:18</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a></div><div class=\"ttdeci\">@ UNKNOWN_ERROR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00076\">EnigmaIOTGateway.h:76</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da298f796cee1bd5d6decfe81d4a98b554\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da298f796cee1bd5d6decfe81d4a98b554\">SMILE</a></div><div class=\"ttdeci\">@ SMILE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00068\">EnigmaIOTGateway.h:68</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></div><div class=\"ttdeci\">gwInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00075\">EnigmaIOTGateway.h:75</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aec8a0e96ff309d34ef19a5eaa66c40e0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\">EnigmaIOTGatewayClass::serverHello</a></div><div class=\"ttdeci\">bool serverHello(const uint8_t *key, Node *node)</div><div class=\"ttdoc\">Build a ServerHello message and send it to node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01910\">EnigmaIOTGateway.cpp:1910</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aaa13dfa56be2d1ad062cc69f6deef331\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">EnigmaIOTGatewayClass::loadFlashData</a></div><div class=\"ttdeci\">bool loadFlashData()</div><div class=\"ttdoc\">Loads configuration from flash memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00611\">EnigmaIOTGateway.cpp:611</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\">DOWNSTREAM_BRCAST_CTRL_DATA</a></div><div class=\"ttdeci\">@ DOWNSTREAM_BRCAST_CTRL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00048\">EnigmaIOTGateway.h:48</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\">CLIENT_HELLO</a></div><div class=\"ttdeci\">@ CLIENT_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00056\">EnigmaIOTGateway.h:56</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_abb4895c5b9ae6b041c9102178de837c4\"><div class=\"ttname\"><a href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">NodeList::countActiveNodes</a></div><div class=\"ttdeci\">uint16_t countActiveNodes()</div><div class=\"ttdoc\">Gets the number of active nodes (registered or registering)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00247\">NodeList.cpp:247</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_ac5c28a5827b5a3b34222c13589adeba7\"><div class=\"ttname\"><a href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a></div><div class=\"ttdeci\">enum control_message_type control_message_type_t</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5d854e8aa39bd51344951c5205c09381\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381\">EnigmaIOTGatewayClass::nodeNameSetRespose</a></div><div class=\"ttdeci\">bool nodeNameSetRespose(Node *node, int8_t error)</div><div class=\"ttdoc\">Send back set name response.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01106\">EnigmaIOTGateway.cpp:1106</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_afb41f49d1291eebbd676d4915ee193d1\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">EnigmaIOTGatewayClass::getPER</a></div><div class=\"ttdeci\">double getPER(uint8_t *address)</div><div class=\"ttdoc\">Gets packet error rate of node that has a specific address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01460\">EnigmaIOTGateway.cpp:1460</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></div><div class=\"ttdeci\">@ CAYENNELPP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00063\">EnigmaIOTGateway.h:63</a></div></div>\n<div class=\"ttc\" id=\"astructgateway__config__t_html\"><div class=\"ttname\"><a href=\"structgateway__config__t.html\">gateway_config_t</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00104\">EnigmaIOTGateway.h:104</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5e875dd3fa022dfba029f1e1124fcded\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">EnigmaIOTGatewayClass::plainNetKey</a></div><div class=\"ttdeci\">char plainNetKey[KEY_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00141\">EnigmaIOTGateway.h:141</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html\">Comms_hal.h</a></div><div class=\"ttdoc\">Generic communication system abstraction layer.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ac015f00758aac57a7f7ef2ffe26298b3\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">EnigmaIOTGatewayClass::getNetworkKey</a></div><div class=\"ttdeci\">char * getNetworkKey(bool plain=false)</div><div class=\"ttdoc\">Gets hashed EnigmaIOT network key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00357\">EnigmaIOTGateway.h:357</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a9a6b2d2a88c39a839f414e9ce861c5a0\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">EnigmaIOTGatewayClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *networkKey=NULL, bool useDataCounter=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts accepting node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00736\">EnigmaIOTGateway.cpp:736</a></div></div>\n<div class=\"ttc\" id=\"astructgateway__config__t_html_a3203f7006f14c8a96c432703c519c8d6\"><div class=\"ttname\"><a href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">gateway_config_t::networkName</a></div><div class=\"ttdeci\">char networkName[NETWORK_NAME_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00107\">EnigmaIOTGateway.h:107</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\">INVALIDATE_KEY</a></div><div class=\"ttdeci\">@ INVALIDATE_KEY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00059\">EnigmaIOTGateway.h:58</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a17b8c1861e099264b904a9f20ee69666\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">onNodeDisconnected_t</a></div><div class=\"ttdeci\">void(* onNodeDisconnected_t)(uint8_t *mac, gwInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00099\">EnigmaIOTGateway.h:99</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad7f3f86214c6989f2019f1df89e9f0b6\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">EnigmaIOTGatewayClass::wifiManager</a></div><div class=\"ttdeci\">AsyncWiFiManager * wifiManager</div><div class=\"ttdoc\">Wifi configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00151\">EnigmaIOTGateway.h:151</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ac3355fe40cad325eddb8e37dd9ddfaf5\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">EnigmaIOTGatewayClass::getInputMsgQueue</a></div><div class=\"ttdeci\">msg_queue_item_t * getInputMsgQueue(msg_queue_item_t *buffer)</div><div class=\"ttdoc\">Gets next item in the queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00815\">EnigmaIOTGateway.cpp:815</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html\"><div class=\"ttname\"><a href=\"classComms__halClass.html\">Comms_halClass</a></div><div class=\"ttdoc\">Interface for communication subsystem abstraction layer definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00041\">Comms_hal.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ae7c947e8bfc28c1b3731a5da874e24a7\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\">EnigmaIOTGatewayClass::sendHADiscoveryJSON</a></div><div class=\"ttdeci\">bool sendHADiscoveryJSON(uint8_t *address, uint8_t *data, size_t len, const char *networkName, const char *nodeName)</div><div class=\"ttdoc\">Sends a Home Assistant discovery message after receiving it from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01989\">EnigmaIOTGateway.cpp:1989</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\">UNENCRYPTED_NODE_DATA</a></div><div class=\"ttdeci\">@ UNENCRYPTED_NODE_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00041\">EnigmaIOTGateway.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_abf7f0271c0938cf36f316bf3338aba4b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">EnigmaIOTGatewayClass::popInputMsgQueue</a></div><div class=\"ttdeci\">void popInputMsgQueue()</div><div class=\"ttdoc\">Deletes next item in the queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00843\">EnigmaIOTGateway.cpp:843</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html\"><div class=\"ttname\"><a href=\"Filter_8h.html\">Filter.h</a></div><div class=\"ttdoc\">Filter to process message rate or other values.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\">BROADCAST_KEY_RESPONSE</a></div><div class=\"ttdeci\">@ BROADCAST_KEY_RESPONSE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00055\">EnigmaIOTGateway.h:55</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTNode_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTNode.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTNode.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Library to build a node for EnigmaIoT system.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>&quot;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n<code>#include &lt;MD5Builder.h&gt;</code><br />\n<code>#include &lt;StreamString.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;regex&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOTNode_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a2bd3dd6873079bda9c22994760e817dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a>&#160;&#160;&#160;sizeof(clientHello_msg)</td></tr>\n<tr class=\"separator:a2bd3dd6873079bda9c22994760e817dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab9b144ebcf09f24dd9b85f95e6d118d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a>&#160;&#160;&#160;sizeof(serverHello_msg)</td></tr>\n<tr class=\"separator:ab9b144ebcf09f24dd9b85f95e6d118d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a568f6925a7027004598c4ad288dd11f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">IKMSG_LEN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:a568f6925a7027004598c4ad288dd11f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a1b66b36dbb3d32b25e7f4b2cc4e0accb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a1b66b36dbb3d32b25e7f4b2cc4e0accb\">clearRtcData</a> (<a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>)</td></tr>\n<tr class=\"separator:a1b66b36dbb3d32b25e7f4b2cc4e0accb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4dcb9645090920f31f391adcd5b3850c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">dumpRtcData</a> (<a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t *gateway=NULL)</td></tr>\n<tr class=\"separator:a4dcb9645090920f31f391adcd5b3850c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2f399d10e625fb459fb5e0b8a3a79ef8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a2f399d10e625fb459fb5e0b8a3a79ef8\">flashLed</a> (void *led)</td></tr>\n<tr class=\"separator:a2f399d10e625fb459fb5e0b8a3a79ef8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae79c9303923c11f39edb388b32d4646b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#ae79c9303923c11f39edb388b32d4646b\">startFlash</a> (time_t period)</td></tr>\n<tr class=\"separator:ae79c9303923c11f39edb388b32d4646b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad072ccb795ca00a2cc374f3ce7bd5d55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#ad072ccb795ca00a2cc374f3ce7bd5d55\">stopFlash</a> ()</td></tr>\n<tr class=\"separator:ad072ccb795ca00a2cc374f3ce7bd5d55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a47616803c1ff494134cb784756035a08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a> [] = &quot;/config.json&quot;</td></tr>\n<tr class=\"separator:a47616803c1ff494134cb784756035a08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92e5a2fd1601642b4ee6c4a9ec126524\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">localLed</a> = -1</td></tr>\n<tr class=\"separator:a92e5a2fd1601642b4ee6c4a9ec126524\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0bf0b548fcfd9b0089f62fda8fff81aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a> = false</td></tr>\n<tr class=\"separator:a0bf0b548fcfd9b0089f62fda8fff81aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aad0a67af9b0ad60557652e3170f8a2af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></td></tr>\n<tr class=\"separator:aad0a67af9b0ad60557652e3170f8a2af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Library to build a node for EnigmaIoT system. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a2bd3dd6873079bda9c22994760e817dc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2bd3dd6873079bda9c22994760e817dc\">&#9670;&nbsp;</a></span>CHMSG_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define CHMSG_LEN&#160;&#160;&#160;sizeof(clientHello_msg)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"a568f6925a7027004598c4ad288dd11f0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a568f6925a7027004598c4ad288dd11f0\">&#9670;&nbsp;</a></span>IKMSG_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define IKMSG_LEN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"ab9b144ebcf09f24dd9b85f95e6d118d0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab9b144ebcf09f24dd9b85f95e6d118d0\">&#9670;&nbsp;</a></span>SHMSG_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SHMSG_LEN&#160;&#160;&#160;sizeof(serverHello_msg)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a1b66b36dbb3d32b25e7f4b2cc4e0accb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1b66b36dbb3d32b25e7f4b2cc4e0accb\">&#9670;&nbsp;</a></span>clearRtcData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void clearRtcData </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> *&#160;</td>\n          <td class=\"paramname\"><em>data</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00098\">98</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4dcb9645090920f31f391adcd5b3850c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4dcb9645090920f31f391adcd5b3850c\">&#9670;&nbsp;</a></span>dumpRtcData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void dumpRtcData </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>gateway</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00113\">113</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2f399d10e625fb459fb5e0b8a3a79ef8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2f399d10e625fb459fb5e0b8a3a79ef8\">&#9670;&nbsp;</a></span>flashLed()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void flashLed </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>led</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00617\">617</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae79c9303923c11f39edb388b32d4646b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae79c9303923c11f39edb388b32d4646b\">&#9670;&nbsp;</a></span>startFlash()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void startFlash </td>\n          <td>(</td>\n          <td class=\"paramtype\">time_t&#160;</td>\n          <td class=\"paramname\"><em>period</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00627\">627</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad072ccb795ca00a2cc374f3ce7bd5d55\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad072ccb795ca00a2cc374f3ce7bd5d55\">&#9670;&nbsp;</a></span>stopFlash()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void stopFlash </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00647\">647</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a47616803c1ff494134cb784756035a08\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a47616803c1ff494134cb784756035a08\">&#9670;&nbsp;</a></span>CONFIG_FILE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char CONFIG_FILE[] = &quot;/config.json&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00027\">27</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aad0a67af9b0ad60557652e3170f8a2af\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aad0a67af9b0ad60557652e3170f8a2af\">&#9670;&nbsp;</a></span>EnigmaIOTNode</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> EnigmaIOTNode</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02719\">2719</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a92e5a2fd1601642b4ee6c4a9ec126524\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a92e5a2fd1601642b4ee6c4a9ec126524\">&#9670;&nbsp;</a></span>localLed</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int localLed = -1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00029\">29</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0bf0b548fcfd9b0089f62fda8fff81aa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0bf0b548fcfd9b0089f62fda8fff81aa\">&#9670;&nbsp;</a></span>nodeConnectionLedFlashing</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool nodeConnectionLedFlashing = false</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00037\">37</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTNode_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTNode.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTNode.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOTNode_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"comment\">//#define ESP8266</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"comment\">//#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"timeManager_8h.html\">timeManager.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &lt;MD5Builder.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;Updater.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;StreamString.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;regex&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160; </div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">   27</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>[] = <span class=\"stringliteral\">&quot;/config.json&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160; </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">   29</a></span>&#160;<span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">localLed</a> = -1;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160; </div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;TimerHandle_t ledTimer;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;ETSTimer ledTimer;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160; </div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">   37</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;RTC_DATA_ATTR <a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> rtcmem_data_storage; </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160; </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325\">   44</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325\">EnigmaIOTNodeClass::resetConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">restartReason</a> = <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\">CONFIG_RESET</a>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">sendRestart</a> ();</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    FILESYSTEM.begin ();</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    FILESYSTEM.remove (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    FILESYSTEM.end ();</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Config file %s deleted. Restarting&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">clearRTC</a> ();</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">   56</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">EnigmaIOTNodeClass::sendRestart</a> () {</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> len = 2;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    uint8_t buffer[len];</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;    buffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\">RESTART_CONFIRM</a>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;    buffer[1] = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">restartReason</a>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160; </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Message Len %d\\n&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Trying to send: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, len));</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (buffer, len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>)) {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending restart&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Restart sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;    <span class=\"comment\">//time_t restartRequested = millis ();</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    <span class=\"comment\">//while (millis () - restartRequested &gt; 200) {</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    <span class=\"comment\">//  yield ();</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    <span class=\"comment\">//}</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160; </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">   77</a></span>&#160;uint32_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">EnigmaIOTNodeClass::getSleepTime</a> () {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> ()) {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a>;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93\">   85</a></span>&#160;int8_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93\">EnigmaIOTNodeClass::getRSSI</a> () {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b\">rssi</a>;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160; </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">   89</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a> (uint8_t led, time_t onTime) {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;    this-&gt;led = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">ledOnTime</a> = onTime;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160; </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">   94</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a> (<span class=\"keywordtype\">int</span> pin) {</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">resetPin</a> = pin;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8cpp.html#a1b66b36dbb3d32b25e7f4b2cc4e0accb\">   98</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a1b66b36dbb3d32b25e7f4b2cc4e0accb\">clearRtcData</a> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    memset (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeKey, 0, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;lastMessageCounter = 0;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeId = 0;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;channel = 3;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    memset (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;gateway, 0, 6);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;    memset (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkKey, 0, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeRegisterStatus = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;sleepy = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeKeyValid = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;broadcastKeyRequested = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;broadcastKeyValid = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;RTC Cleared&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">  113</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">dumpRtcData</a> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t* gateway = NULL) {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    Serial.println (<span class=\"stringliteral\">&quot;RTC MEM DATA:&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- CRC: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;(<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;crc32), sizeof (uint32_t)));</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Node Key: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Node key is %svalid\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeKeyValid ? <span class=\"stringliteral\">&quot;&quot;</span> : <span class=\"stringliteral\">&quot;NOT &quot;</span>);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Node status is %d: %s\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeRegisterStatus, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeRegisterStatus == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a> ? <span class=\"stringliteral\">&quot;REGISTERED&quot;</span> : <span class=\"stringliteral\">&quot;NOT REGISTERED&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Node name: %s\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeName);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Last message counter: %d\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;lastMessageCounter);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Last control counter: %d\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;lastControlCounter);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Last downlink counter: %d\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;lastDownlinkMsgCounter);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- NodeID: %d\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeId);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Channel: %d\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;channel);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- RSSI: %d\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;rssi);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Network name: %s\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkName);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keywordtype\">char</span> gwAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Gateway: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;gateway, gwAddress));</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Comm errors: %d\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;commErrors);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        <span class=\"keywordflow\">if</span> (gateway)</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;            Serial.printf (<span class=\"stringliteral\">&quot; -- Gateway address: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (gateway, gwAddress));</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Network Key: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Mode: %s\\n&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;sleepy ? <span class=\"stringliteral\">&quot;sleepy&quot;</span> : <span class=\"stringliteral\">&quot;non sleepy&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Broadcast key: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;broadcastKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot; -- Broadcast key is %s and %s requested\\n&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                       <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;broadcastKeyValid ? <span class=\"stringliteral\">&quot;valid&quot;</span> : <span class=\"stringliteral\">&quot;not valid&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                       <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;broadcastKeyRequested ? <span class=\"stringliteral\">&quot;is&quot;</span> : <span class=\"stringliteral\">&quot;is not&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        Serial.println (<span class=\"stringliteral\">&quot;rtcmem_data pointer is NULL&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160; </div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#if USE_FLASH_INSTEAD_RTC</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* RTC_DATA_FILE = <span class=\"stringliteral\">&quot;/context.bin&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">EnigmaIOTNodeClass::loadRTCData</a> () {</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    <span class=\"comment\">//FILESYSTEM.remove (RTC_DATA_FILE); // Only for testing</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    <span class=\"comment\">//bool file_correct = false;</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    clock_t start_load = millis ();</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;    FILESYSTEM.begin ();</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> context;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160; </div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;    <span class=\"keywordflow\">if</span> (FILESYSTEM.exists (RTC_DATA_FILE)) {</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Opening %s file&quot;</span>, RTC_DATA_FILE);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        File contextFile = FILESYSTEM.open (RTC_DATA_FILE, <span class=\"stringliteral\">&quot;r&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keywordflow\">if</span> (contextFile) {</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;%s opened&quot;</span>, RTC_DATA_FILE);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;            <span class=\"keywordtype\">size_t</span> size = contextFile.size ();</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;            <span class=\"keywordflow\">if</span> (size != <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>)) {</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;File size error. Expected %d bytes. Got %d&quot;</span>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>), size);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                contextFile.close ();</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                FILESYSTEM.remove (RTC_DATA_FILE);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;            size = contextFile.readBytes ((<span class=\"keywordtype\">char</span>*)&amp;context, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>));</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;            contextFile.close ();</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;            <span class=\"keywordflow\">if</span> (size != <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>)) {</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;File read error. Expected %d bytes. Got %d&quot;</span>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>), size);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;                <span class=\"comment\">//contextFile.close ();</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                FILESYSTEM.remove (RTC_DATA_FILE);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;            <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">checkCRC</a> ((uint8_t*)context.nodeKey, sizeof (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>) - <span class=\"keyword\">sizeof</span> (uint32_t), &amp;context.crc32)) {</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;RTC Data is not valid. Wrong CRC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;                <span class=\"comment\">//contextFile.close ();</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                FILESYSTEM.remove (RTC_DATA_FILE);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                memcpy (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, &amp;context, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>));</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">setEncryptionKey</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">nodeKey</a>);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">setKeyValid</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">nodeKeyValid</a>);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">nodeKeyValid</a>)</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">setKeyValidFrom</a> (millis ());</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">setLastMessageCounter</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">lastMessageCounter</a>);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">setLastControlCounter</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">lastControlCounter</a>);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">setLastDownlinkMsgCounter</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">lastDownlinkMsgCounter</a>);</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">setLastMessageTime</a> ();</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">setNodeId</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">nodeId</a>);</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                <span class=\"comment\">// setChannel (rtcmem_data.channel);</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;                <span class=\"comment\">//channel = rtcmem_data.channel;</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                <span class=\"comment\">//memcpy (gateway, rtcmem_data.gateway, comm-&gt;getAddressLength ()); // setGateway</span></div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                <span class=\"comment\">//memcpy (networkKey, rtcmem_data.networkKey, KEY_LENGTH);</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">setSleepy</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">sleepy</a>);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">setNodeName</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                <span class=\"comment\">// set default sleep time if it was not set</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">sleepy</a> &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> == 0) {</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> = <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f\">DEFAULT_SLEEP_TIME</a>;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">setStatus</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">nodeRegisterStatus</a>);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;Set %s mode&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> () ? <span class=\"stringliteral\">&quot;sleepy&quot;</span> : <span class=\"stringliteral\">&quot;non sleepy&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= VERBOSE</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;                <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">dumpRtcData</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>);</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error opening file %s&quot;</span>, RTC_DATA_FILE);</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;            FILESYSTEM.remove (RTC_DATA_FILE);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;%s do not exist&quot;</span>, RTC_DATA_FILE);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160; </div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Load process finished in %lu ms&quot;</span>, millis () - start_load);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160; </div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">  221</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">EnigmaIOTNodeClass::loadRTCData</a> () {</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;    <span class=\"keywordflow\">if</span> (ESP.rtcUserMemoryRead (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">RTC_ADDRESS</a>, (uint32_t*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, sizeof (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>))) {</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Read RTCData: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>)));</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error reading RTC memory&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a1b66b36dbb3d32b25e7f4b2cc4e0accb\">clearRtcData</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>);</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;    memcpy ((uint8_t*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, (uint8_t*)&amp;rtcmem_data_storage, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>));</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;----- Read RTCData: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>)));</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">checkCRC</a> ((uint8_t*)<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">nodeKey</a>, sizeof (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>) - <span class=\"keyword\">sizeof</span> (uint32_t), &amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">crc32</a>)) {</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;RTC Data is not valid&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a1b66b36dbb3d32b25e7f4b2cc4e0accb\">clearRtcData</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>);</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">setEncryptionKey</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">nodeKey</a>);</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">setKeyValid</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">nodeKeyValid</a>);</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">nodeKeyValid</a>)</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">setKeyValidFrom</a> (millis ());</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">setLastMessageCounter</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">lastMessageCounter</a>);</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">setLastControlCounter</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">lastControlCounter</a>);</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">setLastDownlinkMsgCounter</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">lastDownlinkMsgCounter</a>);</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">setLastMessageTime</a> ();</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">setNodeId</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">nodeId</a>);</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;        <span class=\"comment\">// setChannel (rtcmem_data.channel);</span></div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;        <span class=\"comment\">//channel = rtcmem_data.channel;</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        <span class=\"comment\">//memcpy (gateway, rtcmem_data.gateway, comm-&gt;getAddressLength ()); // setGateway</span></div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        <span class=\"comment\">//memcpy (networkKey, rtcmem_data.networkKey, KEY_LENGTH);</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">setSleepy</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">sleepy</a>);</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">setNodeName</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>);</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        <span class=\"comment\">// set default sleep time if it was not set</span></div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">sleepy</a> &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> == 0) {</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> = <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f\">DEFAULT_SLEEP_TIME</a>;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">setStatus</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">nodeRegisterStatus</a>);</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Set %s mode&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> () ? <span class=\"stringliteral\">&quot;sleepy&quot;</span> : <span class=\"stringliteral\">&quot;non sleepy&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= VERBOSE</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">dumpRtcData</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>);</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160; </div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160; </div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160; </div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">  270</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">EnigmaIOTNodeClass::loadFlashData</a> () {</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;    <span class=\"comment\">//FILESYSTEM.remove (CONFIG_FILE); // Only for testing</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;    <span class=\"keywordtype\">bool</span> json_correct = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160; </div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;    <span class=\"keywordflow\">if</span> (FILESYSTEM.exists (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>)) {</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Opening %s file&quot;</span>, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        File configFile = FILESYSTEM.open (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>, <span class=\"stringliteral\">&quot;r&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        <span class=\"keywordflow\">if</span> (configFile) {</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;%s opened&quot;</span>, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;            <span class=\"comment\">//size_t size = configFile.size ();</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160; </div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;            <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_ARRAY_SIZE (32) + JSON_OBJECT_SIZE (7) + 110;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;            DynamicJsonDocument doc (capacity);</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;            DeserializationError error = deserializeJson (doc, configFile);</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;            <span class=\"keywordflow\">if</span> (error) {</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Failed to parse file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;JSON file parsed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;            configFile.close ();</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;            </div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;            <span class=\"keywordflow\">if</span> (doc.containsKey(<span class=\"stringliteral\">&quot;type&quot;</span>)){</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;                <span class=\"keywordflow\">if</span> (!strcmp(<span class=\"stringliteral\">&quot;node&quot;</span>,doc[<span class=\"stringliteral\">&quot;type&quot;</span>])) {</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;                    <span class=\"keywordflow\">if</span> (doc.containsKey (<span class=\"stringliteral\">&quot;networkName&quot;</span>) &amp;&amp; doc.containsKey (<span class=\"stringliteral\">&quot;networkKey&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;                        &amp;&amp; doc.containsKey (<span class=\"stringliteral\">&quot;sleepTime&quot;</span>)) {</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;                        json_correct = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;                } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;                    FILESYSTEM.remove (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;                    DEBUG_ERROR (<span class=\"stringliteral\">&quot;Wrong configuration. Removing file %s&quot;</span>, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;                    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160; </div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;            strlcpy (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">networkName</a>, doc[<span class=\"stringliteral\">&quot;networkName&quot;</span>] | <span class=\"stringliteral\">&quot;&quot;</span>, sizeof (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">networkName</a>));</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> = doc[<span class=\"stringliteral\">&quot;sleepTime&quot;</span>].as&lt;<span class=\"keywordtype\">int</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">sleepy</a> = !(<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> == 0);</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160; </div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;            memset (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a>, 0, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;            JsonArray netKeyJson = doc[<span class=\"stringliteral\">&quot;networkKey&quot;</span>];</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;            <span class=\"keywordflow\">if</span> (netKeyJson.size () != <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>) {</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error in stored network key. Expected length: %d, actual length %d&quot;</span>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>, netKeyJson.size ());</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;            <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a>[i] = netKeyJson[i].as&lt;<span class=\"keywordtype\">int</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Network Key dump: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;            strncpy ((<span class=\"keywordtype\">char</span>*)<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>, doc[<span class=\"stringliteral\">&quot;nodeName&quot;</span>] | <span class=\"stringliteral\">&quot;&quot;</span>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">setNodeName</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>);</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160; </div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;            uint8_t gwAddr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;            <span class=\"keywordtype\">char</span> gwAddrStr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;            <span class=\"keywordflow\">if</span> (doc.containsKey (<span class=\"stringliteral\">&quot;gateway&quot;</span>)) {</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;                strncpy (gwAddrStr, doc[<span class=\"stringliteral\">&quot;gateway&quot;</span>], <span class=\"keyword\">sizeof</span> (gwAddrStr));</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;                <a class=\"code\" href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a> (gwAddrStr, gwAddr);</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;                memcpy (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, gwAddr, 6);</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160; </div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;            <span class=\"keywordflow\">if</span> (json_correct) {</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;                DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Configuration successfuly read&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160; </div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;==== EnigmaIOT Node Configuration ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Network name: %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">networkName</a>);</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Sleep time: %u&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a>);</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Node name: %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>);</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Gateway: %s&quot;</span>, gwAddrStr);</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Network key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160; </div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;            String output;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;            serializeJsonPretty (doc, output);</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160; </div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;JSON file %s&quot;</span>, output.c_str ());</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;%s do not exist&quot;</span>, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160; </div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;    <span class=\"keywordflow\">return</span> json_correct;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160; </div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">  352</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">EnigmaIOTNodeClass::saveFlashData</a> (<span class=\"keywordtype\">bool</span> fsOpen) {</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">configCleared</a>)</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160; </div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;    <span class=\"keywordflow\">if</span> (!fsOpen)</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;        FILESYSTEM.begin ();</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160; </div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;    File configFile = FILESYSTEM.open (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>, <span class=\"stringliteral\">&quot;w&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;    <span class=\"keywordflow\">if</span> (!configFile) {</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;failed to open config file %s for writing&quot;</span>, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160; </div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_ARRAY_SIZE (32) + JSON_OBJECT_SIZE (7) + 110;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;    DynamicJsonDocument doc (capacity);</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160; </div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;    <span class=\"keywordtype\">char</span> gwAddrStr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, gwAddrStr);</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160; </div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;    doc[<span class=\"stringliteral\">&quot;type&quot;</span>] = <span class=\"stringliteral\">&quot;node&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;    doc[<span class=\"stringliteral\">&quot;networkName&quot;</span>] = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">networkName</a>;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;    JsonArray netKeyJson = doc.createNestedArray (<span class=\"stringliteral\">&quot;networkKey&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;        netKeyJson.add (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a>[i]);</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;    doc[<span class=\"stringliteral\">&quot;sleepTime&quot;</span>] = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a>;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;    doc[<span class=\"stringliteral\">&quot;gateway&quot;</span>] = gwAddrStr;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;    doc[<span class=\"stringliteral\">&quot;nodeName&quot;</span>] = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160; </div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;    <span class=\"keywordflow\">if</span> (serializeJson (doc, configFile) == 0) {</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Failed to write to file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;        configFile.close ();</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;        <span class=\"comment\">//FILESYSTEM.remove (CONFIG_FILE); // Testing</span></div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160; </div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;    String output;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;    serializeJsonPretty (doc, output);</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160; </div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;%s&quot;</span>, output.c_str ());</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160; </div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;    configFile.flush ();</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;    <span class=\"comment\">//size_t size = configFile.size ();</span></div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160; </div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;    configFile.close ();</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Configuration saved to flash. %u bytes&quot;</span>, configFile.size ());</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= DBG</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">dumpRtcData</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>);</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;<span class=\"preprocessor\">#endif  </span></div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;    <span class=\"keywordflow\">if</span> (!fsOpen)</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        FILESYSTEM.end ();</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160; </div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;<span class=\"preprocessor\">#if USE_FLASH_INSTEAD_RTC</span></div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">EnigmaIOTNodeClass::saveRTCData</a> () {</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;    clock_t start_save = millis ();</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">configCleared</a>)</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">crc32</a> = <a class=\"code\" href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a> ((uint8_t*)<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">nodeKey</a>, sizeof (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>) - <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;    File contextFile = FILESYSTEM.open (RTC_DATA_FILE, <span class=\"stringliteral\">&quot;w&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;    <span class=\"keywordflow\">if</span> (!contextFile) {</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;failed to open config file %s for writing&quot;</span>, RTC_DATA_FILE);</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;    contextFile.write ((uint8_t*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>));</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;    contextFile.flush ();</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;    <span class=\"keywordtype\">size_t</span> size = contextFile.size ();</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;    contextFile.close ();</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Write configuration data to file %s in flash. %u bytes&quot;</span>, RTC_DATA_FILE, size);</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Write RTCData: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>)));</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= VERBOSE</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">dumpRtcData</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>);</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Save process finished in %lu ms&quot;</span>, millis () - start_save);</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160; </div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160; </div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160; </div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">  433</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">EnigmaIOTNodeClass::saveRTCData</a> () {</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">configCleared</a>)</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">protectOTA</a> || <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) {</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Cannot write to RTC memory&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">crc32</a> = <a class=\"code\" href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a> ((uint8_t*)<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">nodeKey</a>, sizeof (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>) - <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;    <span class=\"keywordflow\">if</span> (ESP.rtcUserMemoryWrite (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">RTC_ADDRESS</a>, (uint32_t*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, sizeof (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>))) {</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Write configuration data to RTC memory&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= VERBOSE</span></div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Write RTCData: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>)));</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">dumpRtcData</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>);</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">crc32</a> = <a class=\"code\" href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a> ((uint8_t*)<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">nodeKey</a>, sizeof (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>) - <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;    memcpy ((uint8_t*)&amp;rtcmem_data_storage, (uint8_t*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>));</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;    rtcmem_data_storage.crc32 = <a class=\"code\" href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a> ((uint8_t*)rtcmem_data_storage.nodeKey, sizeof (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>) - <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Write RTCData: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>)));</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= VERBOSE</span></div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">dumpRtcData</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>);</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160; </div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">  464</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">EnigmaIOTNodeClass::clearFlash</a> () {</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;    <span class=\"keywordflow\">if</span> (!FILESYSTEM.begin ()) {</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error on FILESYSTEM.begin()&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;About to format Flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;    <span class=\"keywordflow\">if</span> (FILESYSTEM.format()) {</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Filesystem formatted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;    <span class=\"comment\">/*if (FILESYSTEM.remove (CONFIG_FILE)) {</span></div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;<span class=\"comment\">        DEBUG_DBG (&quot;%s deleted&quot;, CONFIG_FILE);</span></div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;<span class=\"comment\">    }*/</span> <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error on FILESYSTEM.format()&quot;</span>, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;    FILESYSTEM.end ();</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160; </div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">  481</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">EnigmaIOTNodeClass::configWiFiManager</a> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;    AsyncWebServer server (80);</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;    DNSServer dns;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160; </div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;    <span class=\"comment\">//regex_t regex;</span></div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;    <span class=\"keywordtype\">bool</span> regexResult = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160; </div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;    <span class=\"comment\">//char networkKey[33] = &quot;&quot;;</span></div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;    <span class=\"keywordtype\">char</span> sleepy[5] = <span class=\"stringliteral\">&quot;10&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;    <span class=\"comment\">//char networkName[NETWORK_NAME_LENGTH] = &quot;&quot;;</span></div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;    <span class=\"keywordtype\">char</span> nodeName[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>] = <span class=\"stringliteral\">&quot;&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160; </div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a> = <span class=\"keyword\">new</span> AsyncWiFiManager (&amp;server, &amp;dns);</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL == NONE</span></div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>-&gt;setDebugOutput (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160; </div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;    <span class=\"comment\">//AsyncWiFiManagerParameter networkNameParam (&quot;netname&quot;, &quot;Network name&quot;, networkName, (int)NETWORK_NAME_LENGTH, &quot;required type=\\&quot;text\\&quot; maxlength=20&quot;);</span></div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;    <span class=\"comment\">//AsyncWiFiManagerParameter netKeyParam (&quot;netkey&quot;, &quot;NetworkKey&quot;, networkKey, 33, &quot;required type=\\&quot;password\\&quot; maxlength=32&quot;);</span></div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;    AsyncWiFiManagerParameter sleepyParam (<span class=\"stringliteral\">&quot;sleepy&quot;</span>, <span class=\"stringliteral\">&quot;Sleep Time&quot;</span>, sleepy, 5, <span class=\"stringliteral\">&quot;required type=\\&quot;number\\&quot; min=\\&quot;0\\&quot; max=\\&quot;13600\\&quot; step=\\&quot;1\\&quot;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;    AsyncWiFiManagerParameter <a class=\"code\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a> (<span class=\"stringliteral\">&quot;nodename&quot;</span>, <span class=\"stringliteral\">&quot;Node Name&quot;</span>, nodeName, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>, <span class=\"stringliteral\">&quot;type=\\&quot;text\\&quot; pattern=\\&quot;^[^/\\\\\\\\]+$\\&quot; maxlength=32&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160; </div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>-&gt;setCustomHeadElement (<span class=\"stringliteral\">&quot;&lt;style&gt;input:invalid {border: 2px dashed red;input:valid{border: 2px solid black;}&lt;/style&gt;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;    <span class=\"comment\">//wifiManager-&gt;addParameter (&amp;networkNameParam);</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;    <span class=\"comment\">//wifiManager-&gt;addParameter (&amp;netKeyParam);</span></div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>-&gt;addParameter (&amp;sleepyParam);</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>-&gt;addParameter (&amp;<a class=\"code\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a>);</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160; </div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">notifyWiFiManagerStarted</a>) {</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">notifyWiFiManagerStarted</a> ();</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>-&gt;setConnectTimeout (30);</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>-&gt;setBreakAfterConfig (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>-&gt;setTryConnectDuringConfigPortal (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;    <span class=\"keywordtype\">char</span> apname[64];</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;    snprintf (apname, 64, <span class=\"stringliteral\">&quot;EnigmaIoTNode%06x&quot;</span>, ESP.getChipId ());</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;    <span class=\"comment\">//String apname = &quot;EnigmaIoTNode&quot; + String (ESP.getChipId (), 16);</span></div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;    snprintf (apname, 64, <span class=\"stringliteral\">&quot;EnigmaIoTNode%06x&quot;</span>, (uint32_t)(ESP.getEfuseMac () &amp; (uint64_t)0x0000000000FFFFFF));</div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;    <span class=\"comment\">//String apname = &quot;EnigmaIoTNode&quot; + String (ESP.getEfuseMac (), 16);</span></div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Start AP: %s&quot;</span>, apname);</div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160; </div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;    <span class=\"keywordtype\">boolean</span> result = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>-&gt;startConfigPortal (apname, NULL);</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;    <span class=\"keywordflow\">if</span> (result) {</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;==== Config Portal result ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160; </div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Network Name: %s&quot;</span>, WiFi.SSID ().c_str ());</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;        station_config wifiConfig;</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;        <span class=\"keywordflow\">if</span> (!wifi_station_get_config (&amp;wifiConfig)) {</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error getting WiFi config&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;WiFi password: %s&quot;</span>, wifiConfig.password);</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* netkey = (<span class=\"keywordtype\">char</span>*)(wifiConfig.password);</div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;        wifi_config_t wifiConfig;</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;        <span class=\"keywordflow\">if</span> (esp_wifi_get_config (WIFI_IF_STA, &amp;wifiConfig)) {</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error getting WiFi config&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;WiFi password: %.*s&quot;</span>, 64, wifiConfig.sta.password);</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* netkey = (<span class=\"keywordtype\">char</span>*)(wifiConfig.sta.password);</div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Network Key: %s&quot;</span>, netkey);</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Sleppy time: %s&quot;</span>, sleepyParam.getValue ());</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node Name: %s&quot;</span>, <a class=\"code\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a>.getValue ());</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160; </div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;        <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;lastMessageCounter = 0;</div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160; </div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;        strncpy ((<span class=\"keywordtype\">char</span>*)(<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkKey), netkey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Stored network key before hash: %.*s&quot;</span>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>, (<span class=\"keywordtype\">char</span>*)(<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkKey));</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160; </div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;        <a class=\"code\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Calculated network key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;        <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeRegisterStatus = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160; </div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <span class=\"comment\">//const char* netName = WiFi.SSID ().c_str ();</span></div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Temp network name: %s&quot;</span>, WiFi.SSID ().c_str ());</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;        strncpy (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkName, WiFi.SSID ().c_str (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a> - 1);</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Stored network name: %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkName);</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160; </div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;        std::regex sleepTimeRegex (<span class=\"stringliteral\">&quot;(\\\\d)+&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;        regexResult = std::regex_match (sleepyParam.getValue (), sleepTimeRegex);</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;        <span class=\"keywordflow\">if</span> (regexResult) {</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Sleep time check ok&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;            <span class=\"keywordtype\">int</span> sleepyVal = atoi (sleepyParam.getValue ());</div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;            <span class=\"keywordflow\">if</span> (sleepyVal &gt; 0) {</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;                <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;sleepy = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;            <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;sleepTime = sleepyVal;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Sleep time parameter error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;            result = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160; </div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;        <span class=\"comment\">//char tempStr[NODE_NAME_LENGTH];</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;        <span class=\"comment\">//strncpy (tempStr, nodeNameParam.getValue (), NODE_NAME_LENGTH - 1);</span></div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160; </div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;        std::regex nodeNameRegex (<span class=\"stringliteral\">&quot;^[^/\\\\\\\\]+$&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;        regexResult = std::regex_match (<a class=\"code\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a>.getValue (), nodeNameRegex);</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;<span class=\"preprocessor\">#elif defined ESP8266</span></div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;        <span class=\"keywordflow\">if</span> (strstr (<a class=\"code\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a>.getValue (), <span class=\"stringliteral\">&quot;/&quot;</span>)) {</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;            regexResult = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Node name parameter error. Contains &#39;/&#39;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;        } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (strstr (<a class=\"code\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a>.getValue (), <span class=\"stringliteral\">&quot;\\\\&quot;</span>)) {</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;            regexResult = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Node name parameter error. Contains &#39;\\\\&#39;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;        <span class=\"keywordflow\">if</span> (regexResult) {</div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;            strncpy (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeName, <a class=\"code\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a>.getValue (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Node name: %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeName);</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Node name parameter error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;            result = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160; </div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;        <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeKeyValid = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;        <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;crc32 = <a class=\"code\" href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a> ((uint8_t*)(<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;nodeKey), sizeof (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>) - <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160; </div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">notifyWiFiManagerExit</a>) {</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">notifyWiFiManagerExit</a> (result);</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;    <span class=\"keyword\">delete</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>);</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160; </div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;    <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160; </div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8cpp.html#a2f399d10e625fb459fb5e0b8a3a79ef8\">  617</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a2f399d10e625fb459fb5e0b8a3a79ef8\">flashLed</a> (<span class=\"keywordtype\">void</span>* led) {</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;    digitalWrite (*(<span class=\"keywordtype\">int</span>*)led, !digitalRead (*(<span class=\"keywordtype\">int</span>*)led));</div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;    <span class=\"keywordtype\">bool</span> led_on = !digitalRead (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">localLed</a>);</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Change LED %d to %d&quot;</span>, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">localLed</a>, led_on);</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;    digitalWrite (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">localLed</a>, led_on);</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160; </div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8cpp.html#ae79c9303923c11f39edb388b32d4646b\">  627</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#ae79c9303923c11f39edb388b32d4646b\">startFlash</a> (time_t period) {</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;    <span class=\"comment\">//static int id = 1;</span></div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Start flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;        ledTimer = xTimerCreate (<span class=\"stringliteral\">&quot;led_flash&quot;</span>, pdMS_TO_TICKS (period), pdTRUE, (<span class=\"keywordtype\">void</span>*)0, &amp;<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a2f399d10e625fb459fb5e0b8a3a79ef8\">flashLed</a>);</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;        <span class=\"keywordflow\">if</span> (xTimerStart (ledTimer, 0) != pdPASS) {</div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Problem starting LED timer&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;<span class=\"preprocessor\">#elif defined (ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;    ets_timer_disarm (&amp;ledTimer);</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;        ets_timer_arm_new (&amp;ledTimer, period, <span class=\"keyword\">true</span>, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160; </div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8cpp.html#ad072ccb795ca00a2cc374f3ce7bd5d55\">  647</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#ad072ccb795ca00a2cc374f3ce7bd5d55\">stopFlash</a> () {</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;        xTimerStop (ledTimer, 0);</div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;        xTimerDelete (ledTimer, 0);</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a>) {</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;        ets_timer_disarm (&amp;ledTimer);</div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;        digitalWrite (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">localLed</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>);</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160; </div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">  663</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">EnigmaIOTNodeClass::startIdentifying</a> (time_t period) {</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">identifyStart</a> = millis ();</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">indentifying</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#ae79c9303923c11f39edb388b32d4646b\">startFlash</a> (period);</div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160; </div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">  669</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">EnigmaIOTNodeClass::stopIdentifying</a> () {</div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">indentifying</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#ad072ccb795ca00a2cc374f3ce7bd5d55\">stopFlash</a> ();</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160; </div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">  674</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">EnigmaIOTNodeClass::checkResetButton</a> () {</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">resetPin</a> &gt; 0) {</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;        pinMode (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">resetPin</a>, INPUT_PULLUP);</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;        digitalWrite (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a>); <span class=\"comment\">// Turn on LED</span></div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;        <span class=\"keywordflow\">if</span> (digitalRead (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">resetPin</a>) == LOW) { <span class=\"comment\">// If pin is grounded</span></div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;            time_t resetPinGrounded = millis ();</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;            <span class=\"keywordflow\">while</span> (digitalRead (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">resetPin</a>) == LOW) {</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;                <span class=\"keywordflow\">if</span> (millis () - resetPinGrounded &gt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b\">RESET_PIN_DURATION</a>) {</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;                    DEBUG_WARN (<span class=\"stringliteral\">&quot;Produce reset. Reset pin %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">resetPin</a>);</div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;                    digitalWrite (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>); <span class=\"comment\">// Turn off LED</span></div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;                    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#ae79c9303923c11f39edb388b32d4646b\">startFlash</a> (50);</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">clearFlash</a> ();</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">clearRTC</a> ();</div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;                    delay (5000);</div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;                    ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;                delay (50);</div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160; </div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">  696</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a> (<a class=\"code\" href=\"classComms__halClass.html\">Comms_halClass</a>* comm, uint8_t* gateway, uint8_t* networkKey, <span class=\"keywordtype\">bool</span> useCounter, <span class=\"keywordtype\">bool</span> sleepy) {</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">cycleStartedTime</a> = 0; <span class=\"comment\">// Calculate time from start</span></div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;    pinMode (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>, OUTPUT);</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;    ets_timer_setfn (&amp;ledTimer, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a2f399d10e625fb459fb5e0b8a3a79ef8\">flashLed</a>, (<span class=\"keywordtype\">void</span>*)&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>);</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">localLed</a> = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>;</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160; </div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">checkResetButton</a> ();</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160; </div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;    <span class=\"comment\">// startFlash (100); // Do not flash during setup for less battery drain</span></div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160; </div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;    digitalWrite (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>);</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160; </div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;    this-&gt;comm = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>;</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160; </div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;    this-&gt;useCounter = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>;</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160; </div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a3621fd27cee1a28145a7daa167ad0b3d\">setInitAsSleepy</a> (sleepy);</div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">setSleepy</a> (sleepy);</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Set %s mode: %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> () ? <span class=\"stringliteral\">&quot;sleepy&quot;</span> : <span class=\"stringliteral\">&quot;non sleepy&quot;</span>, sleepy ? <span class=\"stringliteral\">&quot;sleepy&quot;</span> : <span class=\"stringliteral\">&quot;non sleepy&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160; </div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">loadRTCData</a> () &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">commErrors</a> &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5\">COMM_ERRORS_BEFORE_SCAN</a>) { <span class=\"comment\">// If data present on RTC node has waked up or it is just configured, continue</span></div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= DBG</span></div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;        <span class=\"keywordtype\">char</span> gwAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;RTC data loaded. Gateway: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, gwAddress));</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Own address: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">getMacAddress</a> (), gwAddress));</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;    } <span class=\"keywordflow\">else</span> { <span class=\"comment\">// No RTC data, first boot or not configured</span></div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;        <span class=\"keywordflow\">if</span> (gateway &amp;&amp; networkKey) { <span class=\"comment\">// If connection data has been passed to library</span></div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;EnigmaIot started with config data con begin() call&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;            memcpy (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, gateway, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">getAddressLength</a> ()); <span class=\"comment\">// setGateway</span></div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;            memcpy (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a>, networkKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);          <span class=\"comment\">// setNetworkKey</span></div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;            <a class=\"code\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">nodeKeyValid</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;            <span class=\"comment\">//rtcmem_data.channel = channel;</span></div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">sleepy</a> = sleepy;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">nodeRegisterStatus</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;        } <span class=\"keywordflow\">else</span> { <span class=\"comment\">// Try read from flash</span></div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Starting from Flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;            <span class=\"keywordflow\">if</span> (!FILESYSTEM.begin ()) {</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error mounting flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;                <span class=\"keywordflow\">if</span> (FILESYSTEM.format ()) {</div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;                    DEBUG_INFO (<span class=\"stringliteral\">&quot;FILESYSTEM formatted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;                } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;                    DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error formatting FILESYSTEM&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;                delay (2500);</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;                ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;                <span class=\"comment\">//return;</span></div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;FILESYSTEM mounted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">loadFlashData</a> ()) { <span class=\"comment\">// If data present on flash, read and continue</span></div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">setStatus</a> (<a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>);</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;Flash data loaded&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;                uint8_t prevGwAddr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;                memcpy (prevGwAddr, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, 6);</div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">searchForGateway</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">true</span>)) {</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;                    <span class=\"comment\">//DEBUG_DBG (&quot;Found gateway. Storing&quot;);</span></div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">commErrors</a> = 0;</div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;            } <span class=\"keywordflow\">else</span> { <span class=\"comment\">// Configuration empty. Enter config AP mode</span></div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;No flash data present. Starting Configuration AP&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;                <span class=\"keywordtype\">bool</span> result = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">configWiFiManager</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>);</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;                <span class=\"keywordflow\">if</span> (result) {</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;                    DEBUG_DBG (<span class=\"stringliteral\">&quot;Got configuration. Searching for Gateway&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;                    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">searchForGateway</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">true</span>)) {</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;                        DEBUG_DBG (<span class=\"stringliteral\">&quot;Found EnigmaIOT Gateway. Storing configuration&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;                        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">saveFlashData</a> (<span class=\"keyword\">true</span>)) {</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;                            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;                        FILESYSTEM.end ();</div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;                        ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;                        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;                    FILESYSTEM.end ();</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;                    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> ()) {</div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;                        DEBUG_WARN (<span class=\"stringliteral\">&quot;No gateway found. Go to sleep for 120 seconds&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\">  775</span>&#160;                        ESP.deepSleep (120);</div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;                    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;                        DEBUG_WARN (<span class=\"stringliteral\">&quot;No gateway found. Restarting&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;                        ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;                } <span class=\"keywordflow\">else</span> { <span class=\"comment\">// Configuration error</span></div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;                    DEBUG_ERROR (<span class=\"stringliteral\">&quot;Configuration error. Restarting&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;                    ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160; </div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3\">initWiFi</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">channel</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">networkName</a>);</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">begin</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">channel</a>);</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">onDataRcvd</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\">rx_cb</a>);</div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">onDataSent</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\">tx_cb</a>);</div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160; </div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;    wifi_set_channel (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">channel</a>);</div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;    esp_err_t err_ok;</div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;    <span class=\"keywordflow\">if</span> ((err_ok = esp_wifi_set_promiscuous (<span class=\"keyword\">true</span>))) {</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting promiscuous mode: %s&quot;</span>, esp_err_to_name (err_ok));</div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;    <span class=\"keywordflow\">if</span> ((err_ok = esp_wifi_set_channel (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">channel</a>, WIFI_SECOND_CHAN_NONE))) {</div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting wifi channel: %s&quot;</span>, esp_err_to_name (err_ok));</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;    <span class=\"keywordflow\">if</span> ((err_ok = esp_wifi_set_promiscuous (<span class=\"keyword\">false</span>))) {</div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting promiscuous mode off: %s&quot;</span>, esp_err_to_name (err_ok));</div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160; </div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\">  808</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Comms started. Channel %u&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">channel</a>);</div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160; </div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;<span class=\"keywordtype\">int</span> scanGatewaySSID (<span class=\"keywordtype\">char</span>* name, <span class=\"keywordtype\">int</span>&amp; wifiIndex) {</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\">  813</span>&#160;    uint32_t scanStarted;</div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\">  814</span>&#160;    int16_t numAP = 0;</div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> MAX_INDEXES = 10;</div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;    <span class=\"keywordtype\">int</span> numFound = 0;</div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;    <span class=\"keywordtype\">int</span> indexes[MAX_INDEXES];</div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160; </div>\n<div class=\"line\"><a name=\"l00819\"></a><span class=\"lineno\">  819</span>&#160;    <span class=\"keywordflow\">if</span> (!name) {</div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\">  820</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;SSID Name is NULL&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00821\"></a><span class=\"lineno\">  821</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00822\"></a><span class=\"lineno\">  822</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\">  823</span>&#160; </div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;    scanStarted = millis ();</div>\n<div class=\"line\"><a name=\"l00825\"></a><span class=\"lineno\">  825</span>&#160;    numAP = WiFi.scanNetworks (<span class=\"keyword\">false</span>, <span class=\"keyword\">false</span>, <span class=\"keyword\">false</span>, 300U);</div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\">  826</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Found %d APs in %lu ms&quot;</span>, numAP, millis () - scanStarted);</div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Scan finished. Result = %d&quot;</span>, WiFi.scanComplete ());</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;    <span class=\"keywordflow\">while</span> (!(WiFi.scanComplete ()) &amp;&amp; (millis () - scanStarted) &gt; 1500) { <span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= DBG</span></div>\n<div class=\"line\"><a name=\"l00830\"></a><span class=\"lineno\">  830</span>&#160;        delay (250);</div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot;%lu.&quot;</span>, millis () - scanStarted);</div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00833\"></a><span class=\"lineno\">  833</span>&#160;        delay (50);</div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\">  834</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00836\"></a><span class=\"lineno\">  836</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Scan finished. Result = %d&quot;</span>, WiFi.scanComplete ());</div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\">  837</span>&#160; </div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Found %d APs in %lu ms&quot;</span>, numAP, millis () - scanStarted);</div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160; </div>\n<div class=\"line\"><a name=\"l00840\"></a><span class=\"lineno\">  840</span>&#160;    wifi_ap_record_t* wifiAP;</div>\n<div class=\"line\"><a name=\"l00841\"></a><span class=\"lineno\">  841</span>&#160; </div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; numAP; i++) {</div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\">  843</span>&#160;        wifiAP = (wifi_ap_record_t*)WiFi.getScanInfoByIndex (i);</div>\n<div class=\"line\"><a name=\"l00844\"></a><span class=\"lineno\">  844</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Found AP %.*s with BSSID &quot;</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a> <span class=\"stringliteral\">&quot; and RSSI %d dBm&quot;</span>, 32, wifiAP-&gt;ssid, MAC2STR (wifiAP-&gt;bssid), wifiAP-&gt;rssi);</div>\n<div class=\"line\"><a name=\"l00845\"></a><span class=\"lineno\">  845</span>&#160;        <span class=\"keywordflow\">if</span> (!strncmp (name, (<span class=\"keywordtype\">char</span>*)(wifiAP-&gt;ssid), 32)) {</div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;            indexes[numFound] = i;</div>\n<div class=\"line\"><a name=\"l00847\"></a><span class=\"lineno\">  847</span>&#160;            numFound++;</div>\n<div class=\"line\"><a name=\"l00848\"></a><span class=\"lineno\">  848</span>&#160;            <span class=\"keywordflow\">if</span> (numFound &gt;= MAX_INDEXES) {</div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\">  849</span>&#160;                <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00851\"></a><span class=\"lineno\">  851</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\">  852</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160; </div>\n<div class=\"line\"><a name=\"l00854\"></a><span class=\"lineno\">  854</span>&#160;    wifiIndex = indexes[0];</div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160; </div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;    <span class=\"keywordflow\">return</span> numFound;</div>\n<div class=\"line\"><a name=\"l00857\"></a><span class=\"lineno\">  857</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00858\"></a><span class=\"lineno\">  858</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160; </div>\n<div class=\"line\"><a name=\"l00860\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">  860</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">EnigmaIOTNodeClass::searchForGateway</a> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">bool</span> shouldStoreData) {</div>\n<div class=\"line\"><a name=\"l00861\"></a><span class=\"lineno\">  861</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Searching for AP %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkName);</div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160; </div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;    <span class=\"comment\">//WiFi.mode (WIFI_STA);</span></div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\">  864</span>&#160;    <span class=\"keywordtype\">int</span> numWifi = 0;</div>\n<div class=\"line\"><a name=\"l00865\"></a><span class=\"lineno\">  865</span>&#160;    <span class=\"keywordtype\">int</span> wifiIndex = 0;</div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160; </div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">enableTransmit</a> (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Transmission disabled&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00869\"></a><span class=\"lineno\">  869</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;    time_t scanStarted = millis ();</div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;    numWifi = WiFi.scanNetworks (<span class=\"keyword\">false</span>, <span class=\"keyword\">false</span>, 0, (uint8_t*)(<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkName));</div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;    <span class=\"keywordflow\">while</span> (!(WiFi.scanComplete () || (millis () - scanStarted) &gt; 1500)) {</div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= DBG</span></div>\n<div class=\"line\"><a name=\"l00874\"></a><span class=\"lineno\">  874</span>&#160;        delay (250);</div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot;%lu.&quot;</span>, millis () - scanStarted);</div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;        delay (50);</div>\n<div class=\"line\"><a name=\"l00878\"></a><span class=\"lineno\">  878</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;    WiFiMode_t mode = WiFi.getMode ();</div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;WiFi mode is %d. Restarting network interface after scan&quot;</span>, mode);</div>\n<div class=\"line\"><a name=\"l00882\"></a><span class=\"lineno\">  882</span>&#160;    WiFi.mode (WIFI_OFF);</div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;    WiFi.mode (mode);</div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;    numWifi = scanGatewaySSID (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkName, wifiIndex);</div>\n<div class=\"line\"><a name=\"l00886\"></a><span class=\"lineno\">  886</span>&#160;<span class=\"preprocessor\">#endif // ESP8266</span></div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">enableTransmit</a> (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Transmission enabled&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160; </div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;    uint8_t prevGwAddr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;    memcpy (prevGwAddr, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;gateway, 6);</div>\n<div class=\"line\"><a name=\"l00892\"></a><span class=\"lineno\">  892</span>&#160; </div>\n<div class=\"line\"><a name=\"l00893\"></a><span class=\"lineno\">  893</span>&#160;    <span class=\"keywordflow\">if</span> (numWifi &gt; 0) {</div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Gateway %s found: %d&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkName, numWifi);</div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;BSSID: %s&quot;</span>, WiFi.BSSIDstr (wifiIndex).c_str ());</div>\n<div class=\"line\"><a name=\"l00896\"></a><span class=\"lineno\">  896</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Channel: %d&quot;</span>, WiFi.channel (wifiIndex));</div>\n<div class=\"line\"><a name=\"l00897\"></a><span class=\"lineno\">  897</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;RSSI: %d&quot;</span>, WiFi.RSSI (wifiIndex));</div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;        <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;channel = WiFi.channel (wifiIndex);</div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;        <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;rssi = WiFi.RSSI (wifiIndex);</div>\n<div class=\"line\"><a name=\"l00900\"></a><span class=\"lineno\">  900</span>&#160;        memcpy (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;gateway, WiFi.BSSID (wifiIndex), 6);</div>\n<div class=\"line\"><a name=\"l00901\"></a><span class=\"lineno\">  901</span>&#160; </div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;        <span class=\"keywordflow\">if</span> (shouldStoreData) {</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Found gateway. Storing&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00904\"></a><span class=\"lineno\">  904</span>&#160;            <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l00905\"></a><span class=\"lineno\">  905</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;            <span class=\"keywordflow\">if</span> (memcmp (prevGwAddr, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;gateway, 6)) {</div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;                <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">saveFlashData</a> ()) {</div>\n<div class=\"line\"><a name=\"l00909\"></a><span class=\"lineno\">  909</span>&#160;                    DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00910\"></a><span class=\"lineno\">  910</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00913\"></a><span class=\"lineno\">  913</span>&#160; </div>\n<div class=\"line\"><a name=\"l00914\"></a><span class=\"lineno\">  914</span>&#160;        WiFi.scanDelete ();</div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160; </div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00917\"></a><span class=\"lineno\">  917</span>&#160;        wifi_set_channel (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;channel);</div>\n<div class=\"line\"><a name=\"l00918\"></a><span class=\"lineno\">  918</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;        esp_err_t err_ok;</div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;        <span class=\"keywordflow\">if</span> ((err_ok = esp_wifi_set_promiscuous (<span class=\"keyword\">true</span>))) {</div>\n<div class=\"line\"><a name=\"l00921\"></a><span class=\"lineno\">  921</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting promiscuous mode: %s&quot;</span>, esp_err_to_name (err_ok));</div>\n<div class=\"line\"><a name=\"l00922\"></a><span class=\"lineno\">  922</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;        <span class=\"keywordflow\">if</span> ((err_ok = esp_wifi_set_channel (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;channel, WIFI_SECOND_CHAN_NONE))) {</div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting wifi channel: %s&quot;</span>, esp_err_to_name (err_ok));</div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00926\"></a><span class=\"lineno\">  926</span>&#160;        <span class=\"keywordflow\">if</span> ((err_ok = esp_wifi_set_promiscuous (<span class=\"keyword\">false</span>))) {</div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting promiscuous mode off: %s&quot;</span>, esp_err_to_name (err_ok));</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00930\"></a><span class=\"lineno\">  930</span>&#160; </div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">requestReportRSSI</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00934\"></a><span class=\"lineno\">  934</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Gateway %s not found&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>-&gt;networkName);</div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160; </div>\n<div class=\"line\"><a name=\"l00938\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22\">  938</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22\">EnigmaIOTNodeClass::stop</a> () {</div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">stop</a> ();</div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Communication layer uninitalized&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00942\"></a><span class=\"lineno\">  942</span>&#160; </div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">  943</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a> (uint8_t address[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]) {</div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">setMacAddress</a> (address);</div>\n<div class=\"line\"><a name=\"l00945\"></a><span class=\"lineno\">  945</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\">  946</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160; </div>\n<div class=\"line\"><a name=\"l00948\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">  948</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">EnigmaIOTNodeClass::setSleepTime</a> (uint32_t sleepTime, <span class=\"keywordtype\">bool</span> forceSleepForever) {</div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">getInitAsSleepy</a> ()) {</div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266 // ESP32 does not have this limitation</span></div>\n<div class=\"line\"><a name=\"l00951\"></a><span class=\"lineno\">  951</span>&#160;        uint64_t maxSleepTime = (ESP.deepSleepMax () / (uint64_t)1000000);</div>\n<div class=\"line\"><a name=\"l00952\"></a><span class=\"lineno\">  952</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160; </div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a> == 0 &amp;&amp; !forceSleepForever) {</div>\n<div class=\"line\"><a name=\"l00955\"></a><span class=\"lineno\">  955</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">setSleepy</a> (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00956\"></a><span class=\"lineno\">  956</span>&#160;            <span class=\"comment\">//rtcmem_data.sleepy = false; // This setting is temporary, do not store</span></div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;        } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a></div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;#ifdef ESP8266</div>\n<div class=\"line\"><a name=\"l00959\"></a><span class=\"lineno\">  959</span>&#160;                   &lt; maxSleepTime</div>\n<div class=\"line\"><a name=\"l00960\"></a><span class=\"lineno\">  960</span>&#160;#endif</div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;                   ) {</div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">setSleepy</a> (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00963\"></a><span class=\"lineno\">  963</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>;</div>\n<div class=\"line\"><a name=\"l00964\"></a><span class=\"lineno\">  964</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;        <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00967\"></a><span class=\"lineno\">  967</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Max sleep time is %lu&quot;</span>, (uint32_t)maxSleepTime);</div>\n<div class=\"line\"><a name=\"l00968\"></a><span class=\"lineno\">  968</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">setSleepy</a> (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> = (uint32_t)maxSleepTime;</div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00972\"></a><span class=\"lineno\">  972</span>&#160;        this-&gt;sleepTime = (uint64_t)<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> * (uint64_t)1000000;</div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\">  973</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Sleep time set to %d. Sleepy mode is %s&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;                   <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a>,</div>\n<div class=\"line\"><a name=\"l00975\"></a><span class=\"lineno\">  975</span>&#160;                   <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> () ? <span class=\"stringliteral\">&quot;sleepy&quot;</span> : <span class=\"stringliteral\">&quot;non sleepy&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\">  976</span>&#160; </div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Cannot set sleep time to %u seconds as this node started as non sleepy&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>);</div>\n<div class=\"line\"><a name=\"l00979\"></a><span class=\"lineno\">  979</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160; </div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">  982</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">EnigmaIOTNodeClass::reportRSSI</a> () {</div>\n<div class=\"line\"><a name=\"l00983\"></a><span class=\"lineno\">  983</span>&#160;    uint8_t buffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l00984\"></a><span class=\"lineno\">  984</span>&#160;    uint8_t bufLength;</div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\">  985</span>&#160; </div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Report RSSI and channel&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00987\"></a><span class=\"lineno\">  987</span>&#160; </div>\n<div class=\"line\"><a name=\"l00988\"></a><span class=\"lineno\">  988</span>&#160;    buffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\">control_message_type::RSSI_ANS</a>;</div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;    buffer[1] = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b\">rssi</a>;</div>\n<div class=\"line\"><a name=\"l00990\"></a><span class=\"lineno\">  990</span>&#160;    buffer[2] = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">channel</a>;</div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\">  991</span>&#160;    bufLength = 3;</div>\n<div class=\"line\"><a name=\"l00992\"></a><span class=\"lineno\">  992</span>&#160; </div>\n<div class=\"line\"><a name=\"l00993\"></a><span class=\"lineno\">  993</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (buffer, bufLength, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>)) {</div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\">  994</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Sleep time is %d seconds&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a> / 1000000);</div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, bufLength));</div>\n<div class=\"line\"><a name=\"l00996\"></a><span class=\"lineno\">  996</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00997\"></a><span class=\"lineno\">  997</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending version response&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00999\"></a><span class=\"lineno\">  999</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01000\"></a><span class=\"lineno\"> 1000</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01001\"></a><span class=\"lineno\"> 1001</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01002\"></a><span class=\"lineno\"> 1002</span>&#160; </div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\"> 1003</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a> () {</div>\n<div class=\"line\"><a name=\"l01004\"></a><span class=\"lineno\"> 1004</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> blueOntime;</div>\n<div class=\"line\"><a name=\"l01005\"></a><span class=\"lineno\"> 1005</span>&#160; </div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"> 1006</span>&#160;    <span class=\"comment\">// Locate gateway address, channel and rssi</span></div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">requestSearchGateway</a>) {</div>\n<div class=\"line\"><a name=\"l01008\"></a><span class=\"lineno\"> 1008</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">requestSearchGateway</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01009\"></a><span class=\"lineno\"> 1009</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">requestReportRSSI</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">searchForGateway</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l01011\"></a><span class=\"lineno\"> 1011</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01012\"></a><span class=\"lineno\"> 1012</span>&#160; </div>\n<div class=\"line\"><a name=\"l01013\"></a><span class=\"lineno\"> 1013</span>&#160;    <span class=\"comment\">// Report RSSI to gateway</span></div>\n<div class=\"line\"><a name=\"l01014\"></a><span class=\"lineno\"> 1014</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">requestReportRSSI</a> &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">isRegistered</a> ()) {</div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"> 1015</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">requestReportRSSI</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01016\"></a><span class=\"lineno\"> 1016</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">reportRSSI</a> ();</div>\n<div class=\"line\"><a name=\"l01017\"></a><span class=\"lineno\"> 1017</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"> 1018</span>&#160; </div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;    <span class=\"comment\">// Flash led if programmed (when data is transferred)</span></div>\n<div class=\"line\"><a name=\"l01020\"></a><span class=\"lineno\"> 1020</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a> &gt;= 0) {</div>\n<div class=\"line\"><a name=\"l01021\"></a><span class=\"lineno\"> 1021</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">flashBlue</a>) {</div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;            blueOntime = millis ();</div>\n<div class=\"line\"><a name=\"l01023\"></a><span class=\"lineno\"> 1023</span>&#160;            digitalWrite (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a>);</div>\n<div class=\"line\"><a name=\"l01024\"></a><span class=\"lineno\"> 1024</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">flashBlue</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01025\"></a><span class=\"lineno\"> 1025</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01026\"></a><span class=\"lineno\"> 1026</span>&#160; </div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"> 1027</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">indentifying</a>) {</div>\n<div class=\"line\"><a name=\"l01028\"></a><span class=\"lineno\"> 1028</span>&#160;            <span class=\"keywordflow\">if</span> ( millis () - blueOntime &gt; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">ledOnTime</a>) {</div>\n<div class=\"line\"><a name=\"l01029\"></a><span class=\"lineno\"> 1029</span>&#160;                digitalWrite (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>);</div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"> 1030</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01032\"></a><span class=\"lineno\"> 1032</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01033\"></a><span class=\"lineno\"> 1033</span>&#160; </div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;    <span class=\"comment\">// Check if this should go to sleep</span></div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> () &amp;&amp; !<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">shouldRestart</a>) {</div>\n<div class=\"line\"><a name=\"l01036\"></a><span class=\"lineno\"> 1036</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">sleepRequested</a> &amp;&amp; millis () - <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">getLastMessageTime</a> () &gt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e\">DOWNLINK_WAIT_TIME</a> &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">isRegistered</a> () &amp;&amp; !<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">indentifying</a>) {</div>\n<div class=\"line\"><a name=\"l01037\"></a><span class=\"lineno\"> 1037</span>&#160;            <span class=\"comment\">// Substract running time</span></div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;            int64_t sleep_t = 0;</div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>) {</div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;                sleep_t = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a> - ((millis () - <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">cycleStartedTime</a>) * 1000);</div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01042\"></a><span class=\"lineno\"> 1042</span>&#160;            <span class=\"keywordflow\">if</span> (sleep_t &amp;&amp; sleep_t &lt; 1000) {</div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;                <span class=\"comment\">// Avoid negative values</span></div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;                sleep_t = 1000;</div>\n<div class=\"line\"><a name=\"l01045\"></a><span class=\"lineno\"> 1045</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01046\"></a><span class=\"lineno\"> 1046</span>&#160;            <span class=\"comment\">//int64_t msSleep = sleep_t / 1000;</span></div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;            <span class=\"keywordflow\">if</span> (sleep_t) {</div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Go to sleep for %ld ms&quot;</span>, (int32_t)(sleep_t / 1000L));</div>\n<div class=\"line\"><a name=\"l01049\"></a><span class=\"lineno\"> 1049</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01050\"></a><span class=\"lineno\"> 1050</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Go to sleep indefinitely&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;%d&quot;</span>, millis ());</div>\n<div class=\"line\"><a name=\"l01053\"></a><span class=\"lineno\"> 1053</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">enableTransmit</a> (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l01054\"></a><span class=\"lineno\"> 1054</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;            ESP.deepSleep (sleep_t);</div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l01057\"></a><span class=\"lineno\"> 1057</span>&#160;            esp_deep_sleep (sleep_t);</div>\n<div class=\"line\"><a name=\"l01058\"></a><span class=\"lineno\"> 1058</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01061\"></a><span class=\"lineno\"> 1061</span>&#160; </div>\n<div class=\"line\"><a name=\"l01062\"></a><span class=\"lineno\"> 1062</span>&#160;    <span class=\"comment\">// Check registration timeout</span></div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;    <span class=\"keyword\">static</span> time_t lastRegistration = millis ();</div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a> ();</div>\n<div class=\"line\"><a name=\"l01065\"></a><span class=\"lineno\"> 1065</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">WAIT_FOR_SERVER_HELLO</a> <span class=\"comment\">/*|| status == WAIT_FOR_CIPHER_FINISHED*/</span>) {</div>\n<div class=\"line\"><a name=\"l01066\"></a><span class=\"lineno\"> 1066</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> ()) { <span class=\"comment\">// Sleep after registration timeout</span></div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;            <span class=\"keywordflow\">if</span> (millis () - <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">getLastMessageTime</a> () &gt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">RECONNECTION_PERIOD</a>) {</div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Current node status: %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a> ());</div>\n<div class=\"line\"><a name=\"l01069\"></a><span class=\"lineno\"> 1069</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l01070\"></a><span class=\"lineno\"> 1070</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">nodeRegisterStatus</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160; </div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;                <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l01073\"></a><span class=\"lineno\"> 1073</span>&#160;                    DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01074\"></a><span class=\"lineno\"> 1074</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160; </div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;                uint32_t rnd = <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a\">PRE_REG_DELAY</a> * 1000); <span class=\"comment\">// nanoseconds</span></div>\n<div class=\"line\"><a name=\"l01077\"></a><span class=\"lineno\"> 1077</span>&#160; </div>\n<div class=\"line\"><a name=\"l01078\"></a><span class=\"lineno\"> 1078</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Registration timeout. Go to sleep for %lu ms&quot;</span>, (uint32_t)(<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">RECONNECTION_PERIOD</a> * 4 + rnd / 1000));</div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;                ESP.deepSleep (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">RECONNECTION_PERIOD</a> * 4000 + rnd, RF_NO_CAL);</div>\n<div class=\"line\"><a name=\"l01081\"></a><span class=\"lineno\"> 1081</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l01082\"></a><span class=\"lineno\"> 1082</span>&#160;                ESP.deepSleep (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">RECONNECTION_PERIOD</a> * 4000 + rnd);</div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01085\"></a><span class=\"lineno\"> 1085</span>&#160;        } <span class=\"keywordflow\">else</span> { <span class=\"comment\">// Retry registration</span></div>\n<div class=\"line\"><a name=\"l01086\"></a><span class=\"lineno\"> 1086</span>&#160;            <span class=\"keywordflow\">if</span> (millis () - <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">getLastMessageTime</a> () &gt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">RECONNECTION_PERIOD</a> * 5) {</div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Current node status: %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a> ());</div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l01089\"></a><span class=\"lineno\"> 1089</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">setLastMessageTime</a> (); <span class=\"comment\">// Set wait time start</span></div>\n<div class=\"line\"><a name=\"l01090\"></a><span class=\"lineno\"> 1090</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01093\"></a><span class=\"lineno\"> 1093</span>&#160; </div>\n<div class=\"line\"><a name=\"l01094\"></a><span class=\"lineno\"> 1094</span>&#160;    <span class=\"comment\">// Retry registration</span></div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a> () == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;        <span class=\"keywordflow\">if</span> (millis () - lastRegistration &gt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">RECONNECTION_PERIOD</a>) {</div>\n<div class=\"line\"><a name=\"l01097\"></a><span class=\"lineno\"> 1097</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Current node status: %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a> ());</div>\n<div class=\"line\"><a name=\"l01098\"></a><span class=\"lineno\"> 1098</span>&#160;            lastRegistration = millis (); <span class=\"comment\">// Set wait time start</span></div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;            uint32_t rnd = <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a\">PRE_REG_DELAY</a>);</div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Random delay (%u)&quot;</span>, rnd);</div>\n<div class=\"line\"><a name=\"l01102\"></a><span class=\"lineno\"> 1102</span>&#160;            delay (1500 + rnd);</div>\n<div class=\"line\"><a name=\"l01103\"></a><span class=\"lineno\"> 1103</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\">clientHello</a> ();</div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;            delay (1500 + <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed\">POST_REG_DELAY</a>)); <span class=\"comment\">// Wait for Server Hello</span></div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01106\"></a><span class=\"lineno\"> 1106</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01107\"></a><span class=\"lineno\"> 1107</span>&#160; </div>\n<div class=\"line\"><a name=\"l01108\"></a><span class=\"lineno\"> 1108</span>&#160;    <span class=\"comment\">// Check OTA update timeout</span></div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) {</div>\n<div class=\"line\"><a name=\"l01110\"></a><span class=\"lineno\"> 1110</span>&#160;        <span class=\"keywordflow\">if</span> (millis () - <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">lastOTAmsg</a> &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e\">OTA_TIMEOUT_TIME</a>) {</div>\n<div class=\"line\"><a name=\"l01111\"></a><span class=\"lineno\"> 1111</span>&#160;            uint8_t responseBuffer[2];</div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;            responseBuffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">control_message_type::OTA_ANS</a>;</div>\n<div class=\"line\"><a name=\"l01113\"></a><span class=\"lineno\"> 1113</span>&#160;            responseBuffer[1] = <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\">ota_status::OTA_TIMEOUT</a>;</div>\n<div class=\"line\"><a name=\"l01114\"></a><span class=\"lineno\"> 1114</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (responseBuffer, <span class=\"keyword\">sizeof</span> (responseBuffer), <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>)) {</div>\n<div class=\"line\"><a name=\"l01115\"></a><span class=\"lineno\"> 1115</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;OTA TIMEOUT&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01116\"></a><span class=\"lineno\"> 1116</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"> 1117</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01118\"></a><span class=\"lineno\"> 1118</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Restart due to OTA timeout&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01119\"></a><span class=\"lineno\"> 1119</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">restart</a> (<a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\">IRRELEVANT</a>);</div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"> 1120</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01122\"></a><span class=\"lineno\"> 1122</span>&#160; </div>\n<div class=\"line\"><a name=\"l01123\"></a><span class=\"lineno\"> 1123</span>&#160;    <span class=\"comment\">// Check identifying LED timeout</span></div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">indentifying</a>) {</div>\n<div class=\"line\"><a name=\"l01125\"></a><span class=\"lineno\"> 1125</span>&#160;        <span class=\"keywordflow\">if</span> (millis () - <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">identifyStart</a> &gt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5\">IDENTIFY_TIMEOUT</a>) {</div>\n<div class=\"line\"><a name=\"l01126\"></a><span class=\"lineno\"> 1126</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">stopIdentifying</a> ();</div>\n<div class=\"line\"><a name=\"l01127\"></a><span class=\"lineno\"> 1127</span>&#160;            digitalWrite (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>);</div>\n<div class=\"line\"><a name=\"l01128\"></a><span class=\"lineno\"> 1128</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"> 1129</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01130\"></a><span class=\"lineno\"> 1130</span>&#160; </div>\n<div class=\"line\"><a name=\"l01131\"></a><span class=\"lineno\"> 1131</span>&#160;    <span class=\"comment\">//if (!node.getSleepy () &amp;&amp; node.isRegistered () &amp;&amp; !node.hasClockSync())</span></div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"> 1132</span>&#160;    <span class=\"comment\">//  clockRequest ();</span></div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160; </div>\n<div class=\"line\"><a name=\"l01134\"></a><span class=\"lineno\"> 1134</span>&#160;    <span class=\"comment\">// Check time sync timeout</span></div>\n<div class=\"line\"><a name=\"l01135\"></a><span class=\"lineno\"> 1135</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">clockSyncEnabled</a>) {</div>\n<div class=\"line\"><a name=\"l01136\"></a><span class=\"lineno\"> 1136</span>&#160;        <span class=\"keyword\">static</span> time_t lastTimeSync;</div>\n<div class=\"line\"><a name=\"l01137\"></a><span class=\"lineno\"> 1137</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> () &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">isRegistered</a> ()) {</div>\n<div class=\"line\"><a name=\"l01138\"></a><span class=\"lineno\"> 1138</span>&#160;            <span class=\"keywordflow\">if</span> ((millis () - lastTimeSync &gt; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">timeSyncPeriod</a>)) {</div>\n<div class=\"line\"><a name=\"l01139\"></a><span class=\"lineno\"> 1139</span>&#160;                lastTimeSync = millis ();</div>\n<div class=\"line\"><a name=\"l01140\"></a><span class=\"lineno\"> 1140</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;Clock Request&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01141\"></a><span class=\"lineno\"> 1141</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\">clockRequest</a> ();</div>\n<div class=\"line\"><a name=\"l01142\"></a><span class=\"lineno\"> 1142</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01143\"></a><span class=\"lineno\"> 1143</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01144\"></a><span class=\"lineno\"> 1144</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01145\"></a><span class=\"lineno\"> 1145</span>&#160; </div>\n<div class=\"line\"><a name=\"l01146\"></a><span class=\"lineno\"> 1146</span>&#160;    <span class=\"comment\">// Check restart</span></div>\n<div class=\"line\"><a name=\"l01147\"></a><span class=\"lineno\"> 1147</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">shouldRestart</a>) {</div>\n<div class=\"line\"><a name=\"l01148\"></a><span class=\"lineno\"> 1148</span>&#160;        <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> restartSent = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01149\"></a><span class=\"lineno\"> 1149</span>&#160;        <span class=\"keywordflow\">if</span> (!restartSent) {</div>\n<div class=\"line\"><a name=\"l01150\"></a><span class=\"lineno\"> 1150</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Send restart&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01151\"></a><span class=\"lineno\"> 1151</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">sendRestart</a> ();</div>\n<div class=\"line\"><a name=\"l01152\"></a><span class=\"lineno\"> 1152</span>&#160;            restartSent = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01153\"></a><span class=\"lineno\"> 1153</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01154\"></a><span class=\"lineno\"> 1154</span>&#160;        <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> retartRequest = millis ();</div>\n<div class=\"line\"><a name=\"l01155\"></a><span class=\"lineno\"> 1155</span>&#160;        <span class=\"keywordflow\">if</span> (millis () - retartRequest &gt; 2500) {</div>\n<div class=\"line\"><a name=\"l01156\"></a><span class=\"lineno\"> 1156</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Restart&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01157\"></a><span class=\"lineno\"> 1157</span>&#160;            ESP.restart ();</div>\n<div class=\"line\"><a name=\"l01158\"></a><span class=\"lineno\"> 1158</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01159\"></a><span class=\"lineno\"> 1159</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01160\"></a><span class=\"lineno\"> 1160</span>&#160; </div>\n<div class=\"line\"><a name=\"l01161\"></a><span class=\"lineno\"> 1161</span>&#160;    <span class=\"comment\">// In case of comm errors search for gateway again</span></div>\n<div class=\"line\"><a name=\"l01162\"></a><span class=\"lineno\"> 1162</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9\">CHECK_COMM_ERRORS</a> &amp;&amp; (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">commErrors</a> &gt;= <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5\">COMM_ERRORS_BEFORE_SCAN</a>)) {</div>\n<div class=\"line\"><a name=\"l01163\"></a><span class=\"lineno\"> 1163</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">gatewaySearchStarted</a>) {</div>\n<div class=\"line\"><a name=\"l01164\"></a><span class=\"lineno\"> 1164</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">gatewaySearchStarted</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01165\"></a><span class=\"lineno\"> 1165</span>&#160; </div>\n<div class=\"line\"><a name=\"l01166\"></a><span class=\"lineno\"> 1166</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">searchForGateway</a> (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>, <span class=\"keyword\">true</span>)) {</div>\n<div class=\"line\"><a name=\"l01167\"></a><span class=\"lineno\"> 1167</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">commErrors</a> = 0;</div>\n<div class=\"line\"><a name=\"l01168\"></a><span class=\"lineno\"> 1168</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l01169\"></a><span class=\"lineno\"> 1169</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01170\"></a><span class=\"lineno\"> 1170</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01171\"></a><span class=\"lineno\"> 1171</span>&#160; </div>\n<div class=\"line\"><a name=\"l01172\"></a><span class=\"lineno\"> 1172</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01173\"></a><span class=\"lineno\"> 1173</span>&#160; </div>\n<div class=\"line\"><a name=\"l01174\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\"> 1174</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\">EnigmaIOTNodeClass::rx_cb</a> (uint8_t* mac_addr, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l01175\"></a><span class=\"lineno\"> 1175</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\">manageMessage</a> (mac_addr, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l01176\"></a><span class=\"lineno\"> 1176</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01177\"></a><span class=\"lineno\"> 1177</span>&#160; </div>\n<div class=\"line\"><a name=\"l01178\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\"> 1178</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\">EnigmaIOTNodeClass::tx_cb</a> (uint8_t* mac_addr, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l01179\"></a><span class=\"lineno\"> 1179</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\">getStatus</a> (mac_addr, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l01180\"></a><span class=\"lineno\"> 1180</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01181\"></a><span class=\"lineno\"> 1181</span>&#160; </div>\n<div class=\"line\"><a name=\"l01182\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\"> 1182</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">EnigmaIOTNodeClass::checkCRC</a> (<span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, uint32_t* crc) {</div>\n<div class=\"line\"><a name=\"l01183\"></a><span class=\"lineno\"> 1183</span>&#160;    uint32_t recvdCRC;</div>\n<div class=\"line\"><a name=\"l01184\"></a><span class=\"lineno\"> 1184</span>&#160; </div>\n<div class=\"line\"><a name=\"l01185\"></a><span class=\"lineno\"> 1185</span>&#160;    memcpy (&amp;recvdCRC, crc, <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l01186\"></a><span class=\"lineno\"> 1186</span>&#160;    <span class=\"comment\">//DEBUG_VERBOSE (&quot;Received CRC32: 0x%08X&quot;, *crc32);</span></div>\n<div class=\"line\"><a name=\"l01187\"></a><span class=\"lineno\"> 1187</span>&#160;    uint32_t _crc = <a class=\"code\" href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a> (buf, count);</div>\n<div class=\"line\"><a name=\"l01188\"></a><span class=\"lineno\"> 1188</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;CRC32 =  Calc: 0x%08X Recvd: 0x%08X Length: %d&quot;</span>, _crc, recvdCRC, count);</div>\n<div class=\"line\"><a name=\"l01189\"></a><span class=\"lineno\"> 1189</span>&#160;    <span class=\"keywordflow\">return</span> (_crc == recvdCRC);</div>\n<div class=\"line\"><a name=\"l01190\"></a><span class=\"lineno\"> 1190</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01191\"></a><span class=\"lineno\"> 1191</span>&#160; </div>\n<div class=\"line\"><a name=\"l01192\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\"> 1192</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\">EnigmaIOTNodeClass::clientHello</a> () {</div>\n<div class=\"line\"><a name=\"l01193\"></a><span class=\"lineno\"> 1193</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01194\"></a><span class=\"lineno\"> 1194</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01195\"></a><span class=\"lineno\"> 1195</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | DH Kmaster (32) | Random (30 bits) | Broadcast (1 bit) | Sleepy (1 bit) | Tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01196\"></a><span class=\"lineno\"> 1196</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01197\"></a><span class=\"lineno\"> 1197</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01198\"></a><span class=\"lineno\"> 1198</span>&#160; </div>\n<div class=\"line\"><a name=\"l01199\"></a><span class=\"lineno\"> 1199</span>&#160;    <span class=\"keyword\">struct </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01200\"></a><span class=\"lineno\"> 1200</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01201\"></a><span class=\"lineno\"> 1201</span>&#160;        uint8_t iv[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01202\"></a><span class=\"lineno\"> 1202</span>&#160;        uint8_t publicKey[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01203\"></a><span class=\"lineno\"> 1203</span>&#160;        uint32_t random;</div>\n<div class=\"line\"><a name=\"l01204\"></a><span class=\"lineno\"> 1204</span>&#160;        uint8_t tag[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01205\"></a><span class=\"lineno\"> 1205</span>&#160;    } clientHello_msg;</div>\n<div class=\"line\"><a name=\"l01206\"></a><span class=\"lineno\"> 1206</span>&#160; </div>\n<div class=\"line\"><a name=\"l01207\"></a><span class=\"lineno\"> 1207</span>&#160;<span class=\"preprocessor\">#define CHMSG_LEN sizeof(clientHello_msg)</span></div>\n<div class=\"line\"><a name=\"l01208\"></a><span class=\"lineno\"> 1208</span>&#160; </div>\n<div class=\"line\"><a name=\"l01209\"></a><span class=\"lineno\"> 1209</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">invalidateReason</a> = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a>; <span class=\"comment\">// reset any previous force disconnect</span></div>\n<div class=\"line\"><a name=\"l01210\"></a><span class=\"lineno\"> 1210</span>&#160; </div>\n<div class=\"line\"><a name=\"l01211\"></a><span class=\"lineno\"> 1211</span>&#160;    <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">getDH1</a> ();</div>\n<div class=\"line\"><a name=\"l01212\"></a><span class=\"lineno\"> 1212</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">setStatus</a> (<a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">INIT</a>);</div>\n<div class=\"line\"><a name=\"l01213\"></a><span class=\"lineno\"> 1213</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">nodeRegisterStatus</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">INIT</a>;</div>\n<div class=\"line\"><a name=\"l01214\"></a><span class=\"lineno\"> 1214</span>&#160;    <span class=\"comment\">/*uint8_t macAddress[ENIGMAIOT_ADDR_LEN];</span></div>\n<div class=\"line\"><a name=\"l01215\"></a><span class=\"lineno\"> 1215</span>&#160;<span class=\"comment\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l01216\"></a><span class=\"lineno\"> 1216</span>&#160;<span class=\"comment\">    if (wifi_get_macaddr (STATION_IF, macAddress)) {</span></div>\n<div class=\"line\"><a name=\"l01217\"></a><span class=\"lineno\"> 1217</span>&#160;<span class=\"comment\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l01218\"></a><span class=\"lineno\"> 1218</span>&#160;<span class=\"comment\">    if (esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK) {</span></div>\n<div class=\"line\"><a name=\"l01219\"></a><span class=\"lineno\"> 1219</span>&#160;<span class=\"comment\">#endif</span></div>\n<div class=\"line\"><a name=\"l01220\"></a><span class=\"lineno\"> 1220</span>&#160;<span class=\"comment\">        node.setMacAddress (macAddress);</span></div>\n<div class=\"line\"><a name=\"l01221\"></a><span class=\"lineno\"> 1221</span>&#160;<span class=\"comment\">    }*/</span></div>\n<div class=\"line\"><a name=\"l01222\"></a><span class=\"lineno\"> 1222</span>&#160; </div>\n<div class=\"line\"><a name=\"l01223\"></a><span class=\"lineno\"> 1223</span>&#160;    uint8_t* key = <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">getPubDHKey</a> ();</div>\n<div class=\"line\"><a name=\"l01224\"></a><span class=\"lineno\"> 1224</span>&#160; </div>\n<div class=\"line\"><a name=\"l01225\"></a><span class=\"lineno\"> 1225</span>&#160;    <span class=\"keywordflow\">if</span> (!key) {</div>\n<div class=\"line\"><a name=\"l01226\"></a><span class=\"lineno\"> 1226</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error calculating public ECDH key&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01227\"></a><span class=\"lineno\"> 1227</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01228\"></a><span class=\"lineno\"> 1228</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01229\"></a><span class=\"lineno\"> 1229</span>&#160; </div>\n<div class=\"line\"><a name=\"l01230\"></a><span class=\"lineno\"> 1230</span>&#160;    clientHello_msg.msgType = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\">CLIENT_HELLO</a>; <span class=\"comment\">// Client hello message</span></div>\n<div class=\"line\"><a name=\"l01231\"></a><span class=\"lineno\"> 1231</span>&#160; </div>\n<div class=\"line\"><a name=\"l01232\"></a><span class=\"lineno\"> 1232</span>&#160;    <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a> (clientHello_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01233\"></a><span class=\"lineno\"> 1233</span>&#160; </div>\n<div class=\"line\"><a name=\"l01234\"></a><span class=\"lineno\"> 1234</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;IV: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (clientHello_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01235\"></a><span class=\"lineno\"> 1235</span>&#160; </div>\n<div class=\"line\"><a name=\"l01236\"></a><span class=\"lineno\"> 1236</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>; i++) {</div>\n<div class=\"line\"><a name=\"l01237\"></a><span class=\"lineno\"> 1237</span>&#160;        clientHello_msg.publicKey[i] = key[i];</div>\n<div class=\"line\"><a name=\"l01238\"></a><span class=\"lineno\"> 1238</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01239\"></a><span class=\"lineno\"> 1239</span>&#160; </div>\n<div class=\"line\"><a name=\"l01240\"></a><span class=\"lineno\"> 1240</span>&#160;    uint32_t random;</div>\n<div class=\"line\"><a name=\"l01241\"></a><span class=\"lineno\"> 1241</span>&#160;    random = <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ();</div>\n<div class=\"line\"><a name=\"l01242\"></a><span class=\"lineno\"> 1242</span>&#160; </div>\n<div class=\"line\"><a name=\"l01243\"></a><span class=\"lineno\"> 1243</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> ()) {</div>\n<div class=\"line\"><a name=\"l01244\"></a><span class=\"lineno\"> 1244</span>&#160;        random = random | 0x00000001U; <span class=\"comment\">// Signal sleepy node</span></div>\n<div class=\"line\"><a name=\"l01245\"></a><span class=\"lineno\"> 1245</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Signal sleepy node&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01246\"></a><span class=\"lineno\"> 1246</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01247\"></a><span class=\"lineno\"> 1247</span>&#160;        random = random &amp; 0xFFFFFFFEU; <span class=\"comment\">// Signal always awake node</span></div>\n<div class=\"line\"><a name=\"l01248\"></a><span class=\"lineno\"> 1248</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Signal non sleepy node&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01249\"></a><span class=\"lineno\"> 1249</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01250\"></a><span class=\"lineno\"> 1250</span>&#160; </div>\n<div class=\"line\"><a name=\"l01251\"></a><span class=\"lineno\"> 1251</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">broadcastIsEnabled</a> ()) {</div>\n<div class=\"line\"><a name=\"l01252\"></a><span class=\"lineno\"> 1252</span>&#160;        random = random | 0x00000002U; <span class=\"comment\">// Signal broadcast mode enabled to request broadcast key</span></div>\n<div class=\"line\"><a name=\"l01253\"></a><span class=\"lineno\"> 1253</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">broadcastKeyRequested</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01254\"></a><span class=\"lineno\"> 1254</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Signal sleepy node&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01255\"></a><span class=\"lineno\"> 1255</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01256\"></a><span class=\"lineno\"> 1256</span>&#160;        random = random &amp; 0xFFFFFFFDU; <span class=\"comment\">// Signal broadcast disabled</span></div>\n<div class=\"line\"><a name=\"l01257\"></a><span class=\"lineno\"> 1257</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">broadcastKeyRequested</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01258\"></a><span class=\"lineno\"> 1258</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Signal non sleepy node&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01259\"></a><span class=\"lineno\"> 1259</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01260\"></a><span class=\"lineno\"> 1260</span>&#160; </div>\n<div class=\"line\"><a name=\"l01261\"></a><span class=\"lineno\"> 1261</span>&#160;    memcpy (&amp;(clientHello_msg.random), &amp;random, <a class=\"code\" href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">RANDOM_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01262\"></a><span class=\"lineno\"> 1262</span>&#160; </div>\n<div class=\"line\"><a name=\"l01263\"></a><span class=\"lineno\"> 1263</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Client Hello message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clientHello_msg, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01264\"></a><span class=\"lineno\"> 1264</span>&#160; </div>\n<div class=\"line\"><a name=\"l01265\"></a><span class=\"lineno\"> 1265</span>&#160;    uint8_t addDataLen = <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a> - <span class=\"keyword\">sizeof</span> (uint32_t) - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01266\"></a><span class=\"lineno\"> 1266</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01267\"></a><span class=\"lineno\"> 1267</span>&#160; </div>\n<div class=\"line\"><a name=\"l01268\"></a><span class=\"lineno\"> 1268</span>&#160;    memcpy (aad, (uint8_t*)&amp;clientHello_msg, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01269\"></a><span class=\"lineno\"> 1269</span>&#160; </div>\n<div class=\"line\"><a name=\"l01270\"></a><span class=\"lineno\"> 1270</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from NetworkKey</span></div>\n<div class=\"line\"><a name=\"l01271\"></a><span class=\"lineno\"> 1271</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a> + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01272\"></a><span class=\"lineno\"> 1272</span>&#160; </div>\n<div class=\"line\"><a name=\"l01273\"></a><span class=\"lineno\"> 1273</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a> (clientHello_msg.publicKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> + sizeof (uint32_t), <span class=\"comment\">// Encrypt only from public key</span></div>\n<div class=\"line\"><a name=\"l01274\"></a><span class=\"lineno\"> 1274</span>&#160;                                     clientHello_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01275\"></a><span class=\"lineno\"> 1275</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01276\"></a><span class=\"lineno\"> 1276</span>&#160;                                     aad, sizeof (aad), clientHello_msg.tag, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01277\"></a><span class=\"lineno\"> 1277</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during encryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01278\"></a><span class=\"lineno\"> 1278</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01279\"></a><span class=\"lineno\"> 1279</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01280\"></a><span class=\"lineno\"> 1280</span>&#160; </div>\n<div class=\"line\"><a name=\"l01281\"></a><span class=\"lineno\"> 1281</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Encrypted Client Hello message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clientHello_msg, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a>));</div>\n<div class=\"line\"><a name=\"l01282\"></a><span class=\"lineno\"> 1282</span>&#160; </div>\n<div class=\"line\"><a name=\"l01283\"></a><span class=\"lineno\"> 1283</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">setStatus</a> (<a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">WAIT_FOR_SERVER_HELLO</a>);</div>\n<div class=\"line\"><a name=\"l01284\"></a><span class=\"lineno\"> 1284</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">nodeRegisterStatus</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">WAIT_FOR_SERVER_HELLO</a>;</div>\n<div class=\"line\"><a name=\"l01285\"></a><span class=\"lineno\"> 1285</span>&#160; </div>\n<div class=\"line\"><a name=\"l01286\"></a><span class=\"lineno\"> 1286</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; CLIENT HELLO&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01287\"></a><span class=\"lineno\"> 1287</span>&#160; </div>\n<div class=\"line\"><a name=\"l01288\"></a><span class=\"lineno\"> 1288</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, (uint8_t*)&amp;clientHello_msg, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a>) == 0;</div>\n<div class=\"line\"><a name=\"l01289\"></a><span class=\"lineno\"> 1289</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01290\"></a><span class=\"lineno\"> 1290</span>&#160; </div>\n<div class=\"line\"><a name=\"l01291\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\"> 1291</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\">EnigmaIOTNodeClass::clockRequest</a> () {</div>\n<div class=\"line\"><a name=\"l01292\"></a><span class=\"lineno\"> 1292</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01293\"></a><span class=\"lineno\"> 1293</span>&#160;<span class=\"comment\">     * ---------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01294\"></a><span class=\"lineno\"> 1294</span>&#160;<span class=\"comment\">     *| msgType (1) | IV (12) | Counter (2) | T1 (8) | tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01295\"></a><span class=\"lineno\"> 1295</span>&#160;<span class=\"comment\">     * ---------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01296\"></a><span class=\"lineno\"> 1296</span>&#160;<span class=\"comment\">     */</span></div>\n<div class=\"line\"><a name=\"l01297\"></a><span class=\"lineno\"> 1297</span>&#160;    <span class=\"keyword\">struct  </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01298\"></a><span class=\"lineno\"> 1298</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01299\"></a><span class=\"lineno\"> 1299</span>&#160;        uint8_t iv[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01300\"></a><span class=\"lineno\"> 1300</span>&#160;        int16_t counter;</div>\n<div class=\"line\"><a name=\"l01301\"></a><span class=\"lineno\"> 1301</span>&#160;        int64_t t1;</div>\n<div class=\"line\"><a name=\"l01302\"></a><span class=\"lineno\"> 1302</span>&#160;        uint8_t tag[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01303\"></a><span class=\"lineno\"> 1303</span>&#160;    } clockRequest_msg;</div>\n<div class=\"line\"><a name=\"l01304\"></a><span class=\"lineno\"> 1304</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01305\"></a><span class=\"lineno\"> 1305</span>&#160; </div>\n<div class=\"line\"><a name=\"l01306\"></a><span class=\"lineno\"> 1306</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t CRMSG_LEN = <span class=\"keyword\">sizeof</span> (clockRequest_msg);</div>\n<div class=\"line\"><a name=\"l01307\"></a><span class=\"lineno\"> 1307</span>&#160; </div>\n<div class=\"line\"><a name=\"l01308\"></a><span class=\"lineno\"> 1308</span>&#160;    clockRequest_msg.msgType = <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\">CLOCK_REQUEST</a>;</div>\n<div class=\"line\"><a name=\"l01309\"></a><span class=\"lineno\"> 1309</span>&#160; </div>\n<div class=\"line\"><a name=\"l01310\"></a><span class=\"lineno\"> 1310</span>&#160;    <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a> (clockRequest_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01311\"></a><span class=\"lineno\"> 1311</span>&#160; </div>\n<div class=\"line\"><a name=\"l01312\"></a><span class=\"lineno\"> 1312</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;IV: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (clockRequest_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01313\"></a><span class=\"lineno\"> 1313</span>&#160; </div>\n<div class=\"line\"><a name=\"l01314\"></a><span class=\"lineno\"> 1314</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01315\"></a><span class=\"lineno\"> 1315</span>&#160;        counter = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">getLastControlCounter</a> () + 1;</div>\n<div class=\"line\"><a name=\"l01316\"></a><span class=\"lineno\"> 1316</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">setLastControlCounter</a> (counter);</div>\n<div class=\"line\"><a name=\"l01317\"></a><span class=\"lineno\"> 1317</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">lastControlCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l01318\"></a><span class=\"lineno\"> 1318</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01319\"></a><span class=\"lineno\"> 1319</span>&#160;        counter = (uint16_t)(<a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ());</div>\n<div class=\"line\"><a name=\"l01320\"></a><span class=\"lineno\"> 1320</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01321\"></a><span class=\"lineno\"> 1321</span>&#160; </div>\n<div class=\"line\"><a name=\"l01322\"></a><span class=\"lineno\"> 1322</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Control message #%d&quot;</span>, counter);</div>\n<div class=\"line\"><a name=\"l01323\"></a><span class=\"lineno\"> 1323</span>&#160; </div>\n<div class=\"line\"><a name=\"l01324\"></a><span class=\"lineno\"> 1324</span>&#160;    memcpy (&amp;(clockRequest_msg.counter), &amp;counter, sizeof (uint16_t));</div>\n<div class=\"line\"><a name=\"l01325\"></a><span class=\"lineno\"> 1325</span>&#160; </div>\n<div class=\"line\"><a name=\"l01326\"></a><span class=\"lineno\"> 1326</span>&#160;    uint64_t t1 = <a class=\"code\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a>.<a class=\"code\" href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">clock_us</a> ();</div>\n<div class=\"line\"><a name=\"l01327\"></a><span class=\"lineno\"> 1327</span>&#160; </div>\n<div class=\"line\"><a name=\"l01328\"></a><span class=\"lineno\"> 1328</span>&#160;    memcpy (&amp;(clockRequest_msg.t1), &amp;t1, sizeof (int64_t));</div>\n<div class=\"line\"><a name=\"l01329\"></a><span class=\"lineno\"> 1329</span>&#160; </div>\n<div class=\"line\"><a name=\"l01330\"></a><span class=\"lineno\"> 1330</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Clock Request message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clockRequest_msg, CRMSG_LEN - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01331\"></a><span class=\"lineno\"> 1331</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T1: %llu&quot;</span>, t1);</div>\n<div class=\"line\"><a name=\"l01332\"></a><span class=\"lineno\"> 1332</span>&#160; </div>\n<div class=\"line\"><a name=\"l01333\"></a><span class=\"lineno\"> 1333</span>&#160;    uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01334\"></a><span class=\"lineno\"> 1334</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01335\"></a><span class=\"lineno\"> 1335</span>&#160; </div>\n<div class=\"line\"><a name=\"l01336\"></a><span class=\"lineno\"> 1336</span>&#160;    memcpy (aad, (uint8_t*)&amp;clockRequest_msg, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01337\"></a><span class=\"lineno\"> 1337</span>&#160; </div>\n<div class=\"line\"><a name=\"l01338\"></a><span class=\"lineno\"> 1338</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from Node Key</span></div>\n<div class=\"line\"><a name=\"l01339\"></a><span class=\"lineno\"> 1339</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01340\"></a><span class=\"lineno\"> 1340</span>&#160; </div>\n<div class=\"line\"><a name=\"l01341\"></a><span class=\"lineno\"> 1341</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a> ((uint8_t*)&amp;(clockRequest_msg.counter), CRMSG_LEN - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a> - 1, <span class=\"comment\">// Encrypt only from counter</span></div>\n<div class=\"line\"><a name=\"l01342\"></a><span class=\"lineno\"> 1342</span>&#160;                                     clockRequest_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01343\"></a><span class=\"lineno\"> 1343</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01344\"></a><span class=\"lineno\"> 1344</span>&#160;                                     aad, sizeof (aad), clockRequest_msg.tag, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01345\"></a><span class=\"lineno\"> 1345</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during encryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01346\"></a><span class=\"lineno\"> 1346</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01347\"></a><span class=\"lineno\"> 1347</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01348\"></a><span class=\"lineno\"> 1348</span>&#160; </div>\n<div class=\"line\"><a name=\"l01349\"></a><span class=\"lineno\"> 1349</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Encrypted Clock Request message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clockRequest_msg, CRMSG_LEN));</div>\n<div class=\"line\"><a name=\"l01350\"></a><span class=\"lineno\"> 1350</span>&#160; </div>\n<div class=\"line\"><a name=\"l01351\"></a><span class=\"lineno\"> 1351</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; CLOCK REQUEST&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01352\"></a><span class=\"lineno\"> 1352</span>&#160; </div>\n<div class=\"line\"><a name=\"l01353\"></a><span class=\"lineno\"> 1353</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">setLastMessageTime</a> ();</div>\n<div class=\"line\"><a name=\"l01354\"></a><span class=\"lineno\"> 1354</span>&#160; </div>\n<div class=\"line\"><a name=\"l01355\"></a><span class=\"lineno\"> 1355</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">flashBlue</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01356\"></a><span class=\"lineno\"> 1356</span>&#160; </div>\n<div class=\"line\"><a name=\"l01357\"></a><span class=\"lineno\"> 1357</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a> &amp;&amp; !<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) { <span class=\"comment\">// RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot</span></div>\n<div class=\"line\"><a name=\"l01358\"></a><span class=\"lineno\"> 1358</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l01359\"></a><span class=\"lineno\"> 1359</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01360\"></a><span class=\"lineno\"> 1360</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01361\"></a><span class=\"lineno\"> 1361</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01362\"></a><span class=\"lineno\"> 1362</span>&#160; </div>\n<div class=\"line\"><a name=\"l01363\"></a><span class=\"lineno\"> 1363</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, (uint8_t*)&amp;clockRequest_msg, CRMSG_LEN) == 0;</div>\n<div class=\"line\"><a name=\"l01364\"></a><span class=\"lineno\"> 1364</span>&#160; </div>\n<div class=\"line\"><a name=\"l01365\"></a><span class=\"lineno\"> 1365</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01366\"></a><span class=\"lineno\"> 1366</span>&#160; </div>\n<div class=\"line\"><a name=\"l01367\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\"> 1367</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\">EnigmaIOTNodeClass::processClockResponse</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count) {</div>\n<div class=\"line\"><a name=\"l01368\"></a><span class=\"lineno\"> 1368</span>&#160;    <span class=\"keyword\">struct </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01369\"></a><span class=\"lineno\"> 1369</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01370\"></a><span class=\"lineno\"> 1370</span>&#160;        uint8_t iv[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01371\"></a><span class=\"lineno\"> 1371</span>&#160;        uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01372\"></a><span class=\"lineno\"> 1372</span>&#160;        int64_t t1;</div>\n<div class=\"line\"><a name=\"l01373\"></a><span class=\"lineno\"> 1373</span>&#160;        int64_t t2;</div>\n<div class=\"line\"><a name=\"l01374\"></a><span class=\"lineno\"> 1374</span>&#160;        int64_t t3;</div>\n<div class=\"line\"><a name=\"l01375\"></a><span class=\"lineno\"> 1375</span>&#160;        uint8_t tag[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01376\"></a><span class=\"lineno\"> 1376</span>&#160;    } clockResponse_msg;</div>\n<div class=\"line\"><a name=\"l01377\"></a><span class=\"lineno\"> 1377</span>&#160;    </div>\n<div class=\"line\"><a name=\"l01378\"></a><span class=\"lineno\"> 1378</span>&#160;    uint64_t t1, t2, t3, t4;</div>\n<div class=\"line\"><a name=\"l01379\"></a><span class=\"lineno\"> 1379</span>&#160; </div>\n<div class=\"line\"><a name=\"l01380\"></a><span class=\"lineno\"> 1380</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01381\"></a><span class=\"lineno\"> 1381</span>&#160; </div>\n<div class=\"line\"><a name=\"l01382\"></a><span class=\"lineno\"> 1382</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> CRSMSG_LEN = <span class=\"keyword\">sizeof</span> (clockResponse_msg);</div>\n<div class=\"line\"><a name=\"l01383\"></a><span class=\"lineno\"> 1383</span>&#160; </div>\n<div class=\"line\"><a name=\"l01384\"></a><span class=\"lineno\"> 1384</span>&#160;    memcpy (&amp;clockResponse_msg, buf, count);</div>\n<div class=\"line\"><a name=\"l01385\"></a><span class=\"lineno\"> 1385</span>&#160; </div>\n<div class=\"line\"><a name=\"l01386\"></a><span class=\"lineno\"> 1386</span>&#160;    uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01387\"></a><span class=\"lineno\"> 1387</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01388\"></a><span class=\"lineno\"> 1388</span>&#160; </div>\n<div class=\"line\"><a name=\"l01389\"></a><span class=\"lineno\"> 1389</span>&#160;    memcpy (aad, buf, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01390\"></a><span class=\"lineno\"> 1390</span>&#160; </div>\n<div class=\"line\"><a name=\"l01391\"></a><span class=\"lineno\"> 1391</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from Node Key</span></div>\n<div class=\"line\"><a name=\"l01392\"></a><span class=\"lineno\"> 1392</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01393\"></a><span class=\"lineno\"> 1393</span>&#160; </div>\n<div class=\"line\"><a name=\"l01394\"></a><span class=\"lineno\"> 1394</span>&#160;    <span class=\"comment\">//uint8_t packetLen = count - TAG_LENGTH;</span></div>\n<div class=\"line\"><a name=\"l01395\"></a><span class=\"lineno\"> 1395</span>&#160; </div>\n<div class=\"line\"><a name=\"l01396\"></a><span class=\"lineno\"> 1396</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> ((uint8_t*)&amp;(clockResponse_msg.counter), CRSMSG_LEN - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a> - 1, <span class=\"comment\">// Decrypt from counter, 18 bytes</span></div>\n<div class=\"line\"><a name=\"l01397\"></a><span class=\"lineno\"> 1397</span>&#160;                                     clockResponse_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01398\"></a><span class=\"lineno\"> 1398</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01399\"></a><span class=\"lineno\"> 1399</span>&#160;                                     aad, sizeof (aad), clockResponse_msg.tag, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01400\"></a><span class=\"lineno\"> 1400</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during decryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01401\"></a><span class=\"lineno\"> 1401</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01402\"></a><span class=\"lineno\"> 1402</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01403\"></a><span class=\"lineno\"> 1403</span>&#160; </div>\n<div class=\"line\"><a name=\"l01404\"></a><span class=\"lineno\"> 1404</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Decripted Clock Response message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clockResponse_msg, count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01405\"></a><span class=\"lineno\"> 1405</span>&#160; </div>\n<div class=\"line\"><a name=\"l01406\"></a><span class=\"lineno\"> 1406</span>&#160;    memcpy (&amp;counter, &amp;(clockResponse_msg.counter), sizeof (uint16_t));</div>\n<div class=\"line\"><a name=\"l01407\"></a><span class=\"lineno\"> 1407</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Downlink msg #%d&quot;</span>, counter);</div>\n<div class=\"line\"><a name=\"l01408\"></a><span class=\"lineno\"> 1408</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01409\"></a><span class=\"lineno\"> 1409</span>&#160;        <span class=\"keywordflow\">if</span> (counter &gt; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">getLastDownlinkMsgCounter</a> ()) {</div>\n<div class=\"line\"><a name=\"l01410\"></a><span class=\"lineno\"> 1410</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Accepted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01411\"></a><span class=\"lineno\"> 1411</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">setLastDownlinkMsgCounter</a> (counter);</div>\n<div class=\"line\"><a name=\"l01412\"></a><span class=\"lineno\"> 1412</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">lastDownlinkMsgCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l01413\"></a><span class=\"lineno\"> 1413</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01414\"></a><span class=\"lineno\"> 1414</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Downlink msg rejected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01415\"></a><span class=\"lineno\"> 1415</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01416\"></a><span class=\"lineno\"> 1416</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01417\"></a><span class=\"lineno\"> 1417</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01418\"></a><span class=\"lineno\"> 1418</span>&#160; </div>\n<div class=\"line\"><a name=\"l01419\"></a><span class=\"lineno\"> 1419</span>&#160;    t1 = clockResponse_msg.t1;</div>\n<div class=\"line\"><a name=\"l01420\"></a><span class=\"lineno\"> 1420</span>&#160;    t2 = clockResponse_msg.t2;</div>\n<div class=\"line\"><a name=\"l01421\"></a><span class=\"lineno\"> 1421</span>&#160;    t3 = clockResponse_msg.t3;</div>\n<div class=\"line\"><a name=\"l01422\"></a><span class=\"lineno\"> 1422</span>&#160;    t4 = <a class=\"code\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a>.<a class=\"code\" href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">clock_us</a> ();</div>\n<div class=\"line\"><a name=\"l01423\"></a><span class=\"lineno\"> 1423</span>&#160; </div>\n<div class=\"line\"><a name=\"l01424\"></a><span class=\"lineno\"> 1424</span>&#160;    <span class=\"keywordflow\">if</span> (count &lt; CRSMSG_LEN) {</div>\n<div class=\"line\"><a name=\"l01425\"></a><span class=\"lineno\"> 1425</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Message too short&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01426\"></a><span class=\"lineno\"> 1426</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01427\"></a><span class=\"lineno\"> 1427</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01428\"></a><span class=\"lineno\"> 1428</span>&#160; </div>\n<div class=\"line\"><a name=\"l01429\"></a><span class=\"lineno\"> 1429</span>&#160;    memcpy (&amp;clockResponse_msg, buf, count);</div>\n<div class=\"line\"><a name=\"l01430\"></a><span class=\"lineno\"> 1430</span>&#160; </div>\n<div class=\"line\"><a name=\"l01431\"></a><span class=\"lineno\"> 1431</span>&#160;    int64_t offset = <a class=\"code\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a>.<a class=\"code\" href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">adjustTime</a> (t1, t2, t3, t4);</div>\n<div class=\"line\"><a name=\"l01432\"></a><span class=\"lineno\"> 1432</span>&#160; </div>\n<div class=\"line\"><a name=\"l01433\"></a><span class=\"lineno\"> 1433</span>&#160;    <span class=\"keywordflow\">if</span> (offset &lt; MIN_SYNC_ACCURACY &amp;&amp; offset &gt; (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d\">MIN_SYNC_ACCURACY</a> * -1)) {</div>\n<div class=\"line\"><a name=\"l01434\"></a><span class=\"lineno\"> 1434</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">timeSyncPeriod</a> = <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c\">TIME_SYNC_PERIOD</a>;</div>\n<div class=\"line\"><a name=\"l01435\"></a><span class=\"lineno\"> 1435</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01436\"></a><span class=\"lineno\"> 1436</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">timeSyncPeriod</a> = <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">QUICK_SYNC_TIME</a>;</div>\n<div class=\"line\"><a name=\"l01437\"></a><span class=\"lineno\"> 1437</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01438\"></a><span class=\"lineno\"> 1438</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Clock Response message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;clockResponse_msg, CRSMSG_LEN - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01439\"></a><span class=\"lineno\"> 1439</span>&#160; </div>\n<div class=\"line\"><a name=\"l01440\"></a><span class=\"lineno\"> 1440</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T1: %llu&quot;</span>, t1);</div>\n<div class=\"line\"><a name=\"l01441\"></a><span class=\"lineno\"> 1441</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T2: %llu&quot;</span>, t2);</div>\n<div class=\"line\"><a name=\"l01442\"></a><span class=\"lineno\"> 1442</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T3: %llu&quot;</span>, t3);</div>\n<div class=\"line\"><a name=\"l01443\"></a><span class=\"lineno\"> 1443</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T4: %llu&quot;</span>, t4);</div>\n<div class=\"line\"><a name=\"l01444\"></a><span class=\"lineno\"> 1444</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Offest adjusted to %lld us, Roundtrip delay is %lld&quot;</span>, offset, <a class=\"code\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a>.<a class=\"code\" href=\"classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a\">getDelay</a> ());</div>\n<div class=\"line\"><a name=\"l01445\"></a><span class=\"lineno\"> 1445</span>&#160; </div>\n<div class=\"line\"><a name=\"l01446\"></a><span class=\"lineno\"> 1446</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a> &amp;&amp; !<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) { <span class=\"comment\">// RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot</span></div>\n<div class=\"line\"><a name=\"l01447\"></a><span class=\"lineno\"> 1447</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l01448\"></a><span class=\"lineno\"> 1448</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01449\"></a><span class=\"lineno\"> 1449</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01450\"></a><span class=\"lineno\"> 1450</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01451\"></a><span class=\"lineno\"> 1451</span>&#160; </div>\n<div class=\"line\"><a name=\"l01452\"></a><span class=\"lineno\"> 1452</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01453\"></a><span class=\"lineno\"> 1453</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01454\"></a><span class=\"lineno\"> 1454</span>&#160; </div>\n<div class=\"line\"><a name=\"l01455\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\"> 1455</a></span>&#160;int64_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">EnigmaIOTNodeClass::clock</a> () {</div>\n<div class=\"line\"><a name=\"l01456\"></a><span class=\"lineno\"> 1456</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a>.<a class=\"code\" href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">clock</a> ();</div>\n<div class=\"line\"><a name=\"l01457\"></a><span class=\"lineno\"> 1457</span>&#160; </div>\n<div class=\"line\"><a name=\"l01458\"></a><span class=\"lineno\"> 1458</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01459\"></a><span class=\"lineno\"> 1459</span>&#160; </div>\n<div class=\"line\"><a name=\"l01460\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\"> 1460</a></span>&#160;time_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">EnigmaIOTNodeClass::unixtime</a> () {</div>\n<div class=\"line\"><a name=\"l01461\"></a><span class=\"lineno\"> 1461</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a>.<a class=\"code\" href=\"classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5\">unixtime</a> ();</div>\n<div class=\"line\"><a name=\"l01462\"></a><span class=\"lineno\"> 1462</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01463\"></a><span class=\"lineno\"> 1463</span>&#160; </div>\n<div class=\"line\"><a name=\"l01464\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\"> 1464</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">EnigmaIOTNodeClass::hasClockSync</a> () {</div>\n<div class=\"line\"><a name=\"l01465\"></a><span class=\"lineno\"> 1465</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">getInitAsSleepy</a> ())</div>\n<div class=\"line\"><a name=\"l01466\"></a><span class=\"lineno\"> 1466</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a>.<a class=\"code\" href=\"classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615\">isTimeAdjusted</a> ();</div>\n<div class=\"line\"><a name=\"l01467\"></a><span class=\"lineno\"> 1467</span>&#160;    <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l01468\"></a><span class=\"lineno\"> 1468</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01469\"></a><span class=\"lineno\"> 1469</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01470\"></a><span class=\"lineno\"> 1470</span>&#160; </div>\n<div class=\"line\"><a name=\"l01471\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\"> 1471</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\">EnigmaIOTNodeClass::processServerHello</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count) {</div>\n<div class=\"line\"><a name=\"l01472\"></a><span class=\"lineno\"> 1472</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01473\"></a><span class=\"lineno\"> 1473</span>&#160;<span class=\"comment\">    * ------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01474\"></a><span class=\"lineno\"> 1474</span>&#160;<span class=\"comment\">    *| msgType (1) | random (12) | DH Kslave (32) | Tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01475\"></a><span class=\"lineno\"> 1475</span>&#160;<span class=\"comment\">    * ------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01476\"></a><span class=\"lineno\"> 1476</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01477\"></a><span class=\"lineno\"> 1477</span>&#160; </div>\n<div class=\"line\"><a name=\"l01478\"></a><span class=\"lineno\"> 1478</span>&#160;    <span class=\"keyword\">struct </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01479\"></a><span class=\"lineno\"> 1479</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01480\"></a><span class=\"lineno\"> 1480</span>&#160;        uint8_t iv[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01481\"></a><span class=\"lineno\"> 1481</span>&#160;        uint8_t publicKey[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01482\"></a><span class=\"lineno\"> 1482</span>&#160;        uint16_t nodeId;</div>\n<div class=\"line\"><a name=\"l01483\"></a><span class=\"lineno\"> 1483</span>&#160;        uint32_t random;</div>\n<div class=\"line\"><a name=\"l01484\"></a><span class=\"lineno\"> 1484</span>&#160;        uint8_t tag[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01485\"></a><span class=\"lineno\"> 1485</span>&#160;    } serverHello_msg;</div>\n<div class=\"line\"><a name=\"l01486\"></a><span class=\"lineno\"> 1486</span>&#160; </div>\n<div class=\"line\"><a name=\"l01487\"></a><span class=\"lineno\"> 1487</span>&#160;<span class=\"preprocessor\">#define SHMSG_LEN sizeof(serverHello_msg)</span></div>\n<div class=\"line\"><a name=\"l01488\"></a><span class=\"lineno\"> 1488</span>&#160; </div>\n<div class=\"line\"><a name=\"l01489\"></a><span class=\"lineno\"> 1489</span>&#160;    uint16_t nodeId;</div>\n<div class=\"line\"><a name=\"l01490\"></a><span class=\"lineno\"> 1490</span>&#160; </div>\n<div class=\"line\"><a name=\"l01491\"></a><span class=\"lineno\"> 1491</span>&#160;    <span class=\"keywordflow\">if</span> (count &lt; <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a>) {</div>\n<div class=\"line\"><a name=\"l01492\"></a><span class=\"lineno\"> 1492</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Message too short&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01493\"></a><span class=\"lineno\"> 1493</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01494\"></a><span class=\"lineno\"> 1494</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01495\"></a><span class=\"lineno\"> 1495</span>&#160; </div>\n<div class=\"line\"><a name=\"l01496\"></a><span class=\"lineno\"> 1496</span>&#160;    memcpy (&amp;serverHello_msg, buf, count);</div>\n<div class=\"line\"><a name=\"l01497\"></a><span class=\"lineno\"> 1497</span>&#160; </div>\n<div class=\"line\"><a name=\"l01498\"></a><span class=\"lineno\"> 1498</span>&#160;    uint8_t addDataLen = <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a> - <span class=\"keyword\">sizeof</span> (uint32_t) - <span class=\"keyword\">sizeof</span> (uint16_t) - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01499\"></a><span class=\"lineno\"> 1499</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01500\"></a><span class=\"lineno\"> 1500</span>&#160; </div>\n<div class=\"line\"><a name=\"l01501\"></a><span class=\"lineno\"> 1501</span>&#160;    memcpy (aad, (uint8_t*)&amp;serverHello_msg, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01502\"></a><span class=\"lineno\"> 1502</span>&#160; </div>\n<div class=\"line\"><a name=\"l01503\"></a><span class=\"lineno\"> 1503</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from NetworkKey</span></div>\n<div class=\"line\"><a name=\"l01504\"></a><span class=\"lineno\"> 1504</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a> + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01505\"></a><span class=\"lineno\"> 1505</span>&#160; </div>\n<div class=\"line\"><a name=\"l01506\"></a><span class=\"lineno\"> 1506</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> (serverHello_msg.publicKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> + sizeof (uint16_t) + <span class=\"keyword\">sizeof</span> (uint32_t),</div>\n<div class=\"line\"><a name=\"l01507\"></a><span class=\"lineno\"> 1507</span>&#160;                                     serverHello_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01508\"></a><span class=\"lineno\"> 1508</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01509\"></a><span class=\"lineno\"> 1509</span>&#160;                                     aad, sizeof (aad), serverHello_msg.tag, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01510\"></a><span class=\"lineno\"> 1510</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during decryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01511\"></a><span class=\"lineno\"> 1511</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01512\"></a><span class=\"lineno\"> 1512</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01513\"></a><span class=\"lineno\"> 1513</span>&#160; </div>\n<div class=\"line\"><a name=\"l01514\"></a><span class=\"lineno\"> 1514</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Decrypted Server Hello message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;serverHello_msg, <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01515\"></a><span class=\"lineno\"> 1515</span>&#160; </div>\n<div class=\"line\"><a name=\"l01516\"></a><span class=\"lineno\"> 1516</span>&#160;    <span class=\"keywordtype\">bool</span> cError = <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">getDH2</a> (serverHello_msg.publicKey);</div>\n<div class=\"line\"><a name=\"l01517\"></a><span class=\"lineno\"> 1517</span>&#160; </div>\n<div class=\"line\"><a name=\"l01518\"></a><span class=\"lineno\"> 1518</span>&#160;    <span class=\"keywordflow\">if</span> (!cError) {</div>\n<div class=\"line\"><a name=\"l01519\"></a><span class=\"lineno\"> 1519</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;DH2 error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01520\"></a><span class=\"lineno\"> 1520</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01521\"></a><span class=\"lineno\"> 1521</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01522\"></a><span class=\"lineno\"> 1522</span>&#160; </div>\n<div class=\"line\"><a name=\"l01523\"></a><span class=\"lineno\"> 1523</span>&#160;    memcpy (&amp;nodeId, &amp;serverHello_msg.nodeId, sizeof (uint16_t));</div>\n<div class=\"line\"><a name=\"l01524\"></a><span class=\"lineno\"> 1524</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">setNodeId</a> (nodeId);</div>\n<div class=\"line\"><a name=\"l01525\"></a><span class=\"lineno\"> 1525</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">nodeKeyValid</a> = nodeId;</div>\n<div class=\"line\"><a name=\"l01526\"></a><span class=\"lineno\"> 1526</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Node ID: %u&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ());</div>\n<div class=\"line\"><a name=\"l01527\"></a><span class=\"lineno\"> 1527</span>&#160; </div>\n<div class=\"line\"><a name=\"l01528\"></a><span class=\"lineno\"> 1528</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">setEncryptionKey</a> (<a class=\"code\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a> (serverHello_msg.publicKey, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01529\"></a><span class=\"lineno\"> 1529</span>&#160;    memcpy (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">nodeKey</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01530\"></a><span class=\"lineno\"> 1530</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Node key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01531\"></a><span class=\"lineno\"> 1531</span>&#160; </div>\n<div class=\"line\"><a name=\"l01532\"></a><span class=\"lineno\"> 1532</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01533\"></a><span class=\"lineno\"> 1533</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01534\"></a><span class=\"lineno\"> 1534</span>&#160; </div>\n<div class=\"line\"><a name=\"l01535\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\"> 1535</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType, <span class=\"keywordtype\">bool</span> encrypt, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadType) {</div>\n<div class=\"line\"><a name=\"l01536\"></a><span class=\"lineno\"> 1536</span>&#160;    <span class=\"keywordflow\">if</span> (!dataMsgType) {</div>\n<div class=\"line\"><a name=\"l01537\"></a><span class=\"lineno\"> 1537</span>&#160;        memcpy (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">dataMessageSent</a>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l01538\"></a><span class=\"lineno\"> 1538</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">dataMessageSentLength</a> = len;</div>\n<div class=\"line\"><a name=\"l01539\"></a><span class=\"lineno\"> 1539</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">dataMessageEncrypt</a> = encrypt;</div>\n<div class=\"line\"><a name=\"l01540\"></a><span class=\"lineno\"> 1540</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">dataMessageSendPending</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01541\"></a><span class=\"lineno\"> 1541</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">dataMessageSendEncoding</a> = payloadType;</div>\n<div class=\"line\"><a name=\"l01542\"></a><span class=\"lineno\"> 1542</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01543\"></a><span class=\"lineno\"> 1543</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">setLastMessageTime</a> (); <span class=\"comment\">// Mark message time to start RX window start</span></div>\n<div class=\"line\"><a name=\"l01544\"></a><span class=\"lineno\"> 1544</span>&#160; </div>\n<div class=\"line\"><a name=\"l01545\"></a><span class=\"lineno\"> 1545</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a> () == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a> &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">isKeyValid</a> ()) {</div>\n<div class=\"line\"><a name=\"l01546\"></a><span class=\"lineno\"> 1546</span>&#160;        <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l01547\"></a><span class=\"lineno\"> 1547</span>&#160;            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Control message sent: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l01548\"></a><span class=\"lineno\"> 1548</span>&#160;        } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l01549\"></a><span class=\"lineno\"> 1549</span>&#160;            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;HA discovery message sent: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l01550\"></a><span class=\"lineno\"> 1550</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01551\"></a><span class=\"lineno\"> 1551</span>&#160;            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;%s data sent: %s&quot;</span>, encrypt ? <span class=\"stringliteral\">&quot;Encrypted&quot;</span> : <span class=\"stringliteral\">&quot;Unencrypted&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l01552\"></a><span class=\"lineno\"> 1552</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01553\"></a><span class=\"lineno\"> 1553</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">flashBlue</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01554\"></a><span class=\"lineno\"> 1554</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">dataMessage</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, dataMsgType, encrypt, payloadType)) {</div>\n<div class=\"line\"><a name=\"l01555\"></a><span class=\"lineno\"> 1555</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">dataMessageSendPending</a> = <span class=\"keyword\">false</span>; <span class=\"comment\">// Data sent. This setting can still be overriden by invalidateCommand</span></div>\n<div class=\"line\"><a name=\"l01556\"></a><span class=\"lineno\"> 1556</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01557\"></a><span class=\"lineno\"> 1557</span>&#160;        } <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l01558\"></a><span class=\"lineno\"> 1558</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01559\"></a><span class=\"lineno\"> 1559</span>&#160; </div>\n<div class=\"line\"><a name=\"l01560\"></a><span class=\"lineno\"> 1560</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01561\"></a><span class=\"lineno\"> 1561</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01562\"></a><span class=\"lineno\"> 1562</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01563\"></a><span class=\"lineno\"> 1563</span>&#160; </div>\n<div class=\"line\"><a name=\"l01564\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\"> 1564</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a> () {</div>\n<div class=\"line\"><a name=\"l01565\"></a><span class=\"lineno\"> 1565</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> ()) {</div>\n<div class=\"line\"><a name=\"l01566\"></a><span class=\"lineno\"> 1566</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Sleep programmed for %lu ms&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> * 1000);</div>\n<div class=\"line\"><a name=\"l01567\"></a><span class=\"lineno\"> 1567</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a> = (uint64_t)<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a> * (uint64_t)1000000;</div>\n<div class=\"line\"><a name=\"l01568\"></a><span class=\"lineno\"> 1568</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">sleepRequested</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01569\"></a><span class=\"lineno\"> 1569</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01570\"></a><span class=\"lineno\"> 1570</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Node is non sleepy. Sleep rejected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01571\"></a><span class=\"lineno\"> 1571</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01572\"></a><span class=\"lineno\"> 1572</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01573\"></a><span class=\"lineno\"> 1573</span>&#160; </div>\n<div class=\"line\"><a name=\"l01574\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\"> 1574</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\">EnigmaIOTNodeClass::unencryptedDataMessage</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l01575\"></a><span class=\"lineno\"> 1575</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01576\"></a><span class=\"lineno\"> 1576</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01577\"></a><span class=\"lineno\"> 1577</span>&#160;<span class=\"comment\">    *| msgType (1) | NodeId (2) | Counter (2) | PayloadType (1) | Data (....) |</span></div>\n<div class=\"line\"><a name=\"l01578\"></a><span class=\"lineno\"> 1578</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01579\"></a><span class=\"lineno\"> 1579</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01580\"></a><span class=\"lineno\"> 1580</span>&#160; </div>\n<div class=\"line\"><a name=\"l01581\"></a><span class=\"lineno\"> 1581</span>&#160;    uint8_t buf[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01582\"></a><span class=\"lineno\"> 1582</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01583\"></a><span class=\"lineno\"> 1583</span>&#160;    uint16_t nodeId = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ();</div>\n<div class=\"line\"><a name=\"l01584\"></a><span class=\"lineno\"> 1584</span>&#160; </div>\n<div class=\"line\"><a name=\"l01585\"></a><span class=\"lineno\"> 1585</span>&#160;    uint8_t nodeId_idx = 1;</div>\n<div class=\"line\"><a name=\"l01586\"></a><span class=\"lineno\"> 1586</span>&#160;    uint8_t counter_idx = nodeId_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01587\"></a><span class=\"lineno\"> 1587</span>&#160;    uint8_t encoding_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01588\"></a><span class=\"lineno\"> 1588</span>&#160;    uint8_t data_idx = encoding_idx + <span class=\"keyword\">sizeof</span> (int8_t);</div>\n<div class=\"line\"><a name=\"l01589\"></a><span class=\"lineno\"> 1589</span>&#160; </div>\n<div class=\"line\"><a name=\"l01590\"></a><span class=\"lineno\"> 1590</span>&#160;    uint8_t packet_length = data_idx + len;</div>\n<div class=\"line\"><a name=\"l01591\"></a><span class=\"lineno\"> 1591</span>&#160; </div>\n<div class=\"line\"><a name=\"l01592\"></a><span class=\"lineno\"> 1592</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l01593\"></a><span class=\"lineno\"> 1593</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01594\"></a><span class=\"lineno\"> 1594</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01595\"></a><span class=\"lineno\"> 1595</span>&#160; </div>\n<div class=\"line\"><a name=\"l01596\"></a><span class=\"lineno\"> 1596</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType != <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l01597\"></a><span class=\"lineno\"> 1597</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>; <span class=\"comment\">// Unencrypted control data not implemented</span></div>\n<div class=\"line\"><a name=\"l01598\"></a><span class=\"lineno\"> 1598</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01599\"></a><span class=\"lineno\"> 1599</span>&#160;        buf[0] = (uint8_t)<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\">UNENCRYPTED_NODE_DATA</a>;</div>\n<div class=\"line\"><a name=\"l01600\"></a><span class=\"lineno\"> 1600</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01601\"></a><span class=\"lineno\"> 1601</span>&#160; </div>\n<div class=\"line\"><a name=\"l01602\"></a><span class=\"lineno\"> 1602</span>&#160;    memcpy (buf + nodeId_idx, &amp;nodeId, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01603\"></a><span class=\"lineno\"> 1603</span>&#160; </div>\n<div class=\"line\"><a name=\"l01604\"></a><span class=\"lineno\"> 1604</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01605\"></a><span class=\"lineno\"> 1605</span>&#160;        counter = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">getLastMessageCounter</a> () + 1;</div>\n<div class=\"line\"><a name=\"l01606\"></a><span class=\"lineno\"> 1606</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">setLastMessageCounter</a> (counter);</div>\n<div class=\"line\"><a name=\"l01607\"></a><span class=\"lineno\"> 1607</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">lastMessageCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l01608\"></a><span class=\"lineno\"> 1608</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01609\"></a><span class=\"lineno\"> 1609</span>&#160;        counter = (uint16_t)(<a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ());</div>\n<div class=\"line\"><a name=\"l01610\"></a><span class=\"lineno\"> 1610</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01611\"></a><span class=\"lineno\"> 1611</span>&#160;    memcpy (buf + counter_idx, &amp;counter, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01612\"></a><span class=\"lineno\"> 1612</span>&#160; </div>\n<div class=\"line\"><a name=\"l01613\"></a><span class=\"lineno\"> 1613</span>&#160;    buf[encoding_idx] = (uint8_t)payloadEncoding;</div>\n<div class=\"line\"><a name=\"l01614\"></a><span class=\"lineno\"> 1614</span>&#160; </div>\n<div class=\"line\"><a name=\"l01615\"></a><span class=\"lineno\"> 1615</span>&#160;    memcpy (buf + data_idx, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l01616\"></a><span class=\"lineno\"> 1616</span>&#160; </div>\n<div class=\"line\"><a name=\"l01617\"></a><span class=\"lineno\"> 1617</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; UNENCRYPTED DATA&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01618\"></a><span class=\"lineno\"> 1618</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Unencrypted data message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, packet_length));</div>\n<div class=\"line\"><a name=\"l01619\"></a><span class=\"lineno\"> 1619</span>&#160; </div>\n<div class=\"line\"><a name=\"l01620\"></a><span class=\"lineno\"> 1620</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= VERBOSE</span></div>\n<div class=\"line\"><a name=\"l01621\"></a><span class=\"lineno\"> 1621</span>&#160;    <span class=\"keywordtype\">char</span> macStr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l01622\"></a><span class=\"lineno\"> 1622</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Destination address: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, macStr));</div>\n<div class=\"line\"><a name=\"l01623\"></a><span class=\"lineno\"> 1623</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l01624\"></a><span class=\"lineno\"> 1624</span>&#160; </div>\n<div class=\"line\"><a name=\"l01625\"></a><span class=\"lineno\"> 1625</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a> &amp;&amp; !<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) { <span class=\"comment\">// RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot</span></div>\n<div class=\"line\"><a name=\"l01626\"></a><span class=\"lineno\"> 1626</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l01627\"></a><span class=\"lineno\"> 1627</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01628\"></a><span class=\"lineno\"> 1628</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01629\"></a><span class=\"lineno\"> 1629</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01630\"></a><span class=\"lineno\"> 1630</span>&#160; </div>\n<div class=\"line\"><a name=\"l01631\"></a><span class=\"lineno\"> 1631</span>&#160;    <span class=\"keywordflow\">return</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, buf, packet_length) == 0);</div>\n<div class=\"line\"><a name=\"l01632\"></a><span class=\"lineno\"> 1632</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01633\"></a><span class=\"lineno\"> 1633</span>&#160; </div>\n<div class=\"line\"><a name=\"l01634\"></a><span class=\"lineno\"> 1634</span>&#160; </div>\n<div class=\"line\"><a name=\"l01635\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\"> 1635</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">EnigmaIOTNodeClass::dataMessage</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType, <span class=\"keywordtype\">bool</span> encrypt, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l01636\"></a><span class=\"lineno\"> 1636</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01637\"></a><span class=\"lineno\"> 1637</span>&#160;<span class=\"comment\">    * ----------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01638\"></a><span class=\"lineno\"> 1638</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | length (2) | NodeId (2) | Counter (2) | Data (....) | tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01639\"></a><span class=\"lineno\"> 1639</span>&#160;<span class=\"comment\">    * ----------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01640\"></a><span class=\"lineno\"> 1640</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01641\"></a><span class=\"lineno\"> 1641</span>&#160; </div>\n<div class=\"line\"><a name=\"l01642\"></a><span class=\"lineno\"> 1642</span>&#160;    <span class=\"keywordflow\">if</span> (!encrypt) {</div>\n<div class=\"line\"><a name=\"l01643\"></a><span class=\"lineno\"> 1643</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\">unencryptedDataMessage</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, dataMsgType, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l01644\"></a><span class=\"lineno\"> 1644</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01645\"></a><span class=\"lineno\"> 1645</span>&#160; </div>\n<div class=\"line\"><a name=\"l01646\"></a><span class=\"lineno\"> 1646</span>&#160;    uint8_t buf[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01647\"></a><span class=\"lineno\"> 1647</span>&#160;    <span class=\"comment\">//uint8_t tag[TAG_LENGTH];</span></div>\n<div class=\"line\"><a name=\"l01648\"></a><span class=\"lineno\"> 1648</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01649\"></a><span class=\"lineno\"> 1649</span>&#160;    uint16_t nodeId = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ();</div>\n<div class=\"line\"><a name=\"l01650\"></a><span class=\"lineno\"> 1650</span>&#160; </div>\n<div class=\"line\"><a name=\"l01651\"></a><span class=\"lineno\"> 1651</span>&#160;    uint8_t iv_idx = 1;</div>\n<div class=\"line\"><a name=\"l01652\"></a><span class=\"lineno\"> 1652</span>&#160;    uint8_t length_idx = iv_idx + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01653\"></a><span class=\"lineno\"> 1653</span>&#160;    uint8_t nodeId_idx = length_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01654\"></a><span class=\"lineno\"> 1654</span>&#160;    uint8_t counter_idx = nodeId_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01655\"></a><span class=\"lineno\"> 1655</span>&#160;    uint8_t encoding_idx;</div>\n<div class=\"line\"><a name=\"l01656\"></a><span class=\"lineno\"> 1656</span>&#160;    uint8_t data_idx;</div>\n<div class=\"line\"><a name=\"l01657\"></a><span class=\"lineno\"> 1657</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType != <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l01658\"></a><span class=\"lineno\"> 1658</span>&#160;        encoding_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01659\"></a><span class=\"lineno\"> 1659</span>&#160;        data_idx = encoding_idx + <span class=\"keyword\">sizeof</span> (int8_t);</div>\n<div class=\"line\"><a name=\"l01660\"></a><span class=\"lineno\"> 1660</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01661\"></a><span class=\"lineno\"> 1661</span>&#160;        data_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01662\"></a><span class=\"lineno\"> 1662</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01663\"></a><span class=\"lineno\"> 1663</span>&#160;    uint8_t tag_idx = data_idx + len;</div>\n<div class=\"line\"><a name=\"l01664\"></a><span class=\"lineno\"> 1664</span>&#160; </div>\n<div class=\"line\"><a name=\"l01665\"></a><span class=\"lineno\"> 1665</span>&#160; </div>\n<div class=\"line\"><a name=\"l01666\"></a><span class=\"lineno\"> 1666</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l01667\"></a><span class=\"lineno\"> 1667</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01668\"></a><span class=\"lineno\"> 1668</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01669\"></a><span class=\"lineno\"> 1669</span>&#160; </div>\n<div class=\"line\"><a name=\"l01670\"></a><span class=\"lineno\"> 1670</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l01671\"></a><span class=\"lineno\"> 1671</span>&#160;        buf[0] = (uint8_t)<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\">CONTROL_DATA</a>;</div>\n<div class=\"line\"><a name=\"l01672\"></a><span class=\"lineno\"> 1672</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l01673\"></a><span class=\"lineno\"> 1673</span>&#160;        buf[0] = (uint8_t)<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a>;</div>\n<div class=\"line\"><a name=\"l01674\"></a><span class=\"lineno\"> 1674</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01675\"></a><span class=\"lineno\"> 1675</span>&#160;        buf[0] = (uint8_t)<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a>;</div>\n<div class=\"line\"><a name=\"l01676\"></a><span class=\"lineno\"> 1676</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01677\"></a><span class=\"lineno\"> 1677</span>&#160; </div>\n<div class=\"line\"><a name=\"l01678\"></a><span class=\"lineno\"> 1678</span>&#160;    <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a> (buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01679\"></a><span class=\"lineno\"> 1679</span>&#160; </div>\n<div class=\"line\"><a name=\"l01680\"></a><span class=\"lineno\"> 1680</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;IV: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01681\"></a><span class=\"lineno\"> 1681</span>&#160; </div>\n<div class=\"line\"><a name=\"l01682\"></a><span class=\"lineno\"> 1682</span>&#160;    memcpy (buf + nodeId_idx, &amp;nodeId, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01683\"></a><span class=\"lineno\"> 1683</span>&#160; </div>\n<div class=\"line\"><a name=\"l01684\"></a><span class=\"lineno\"> 1684</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType != <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>) { <span class=\"comment\">// Control messages and data messages use different counters</span></div>\n<div class=\"line\"><a name=\"l01685\"></a><span class=\"lineno\"> 1685</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01686\"></a><span class=\"lineno\"> 1686</span>&#160;            counter = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">getLastMessageCounter</a> () + 1;</div>\n<div class=\"line\"><a name=\"l01687\"></a><span class=\"lineno\"> 1687</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">setLastMessageCounter</a> (counter);</div>\n<div class=\"line\"><a name=\"l01688\"></a><span class=\"lineno\"> 1688</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">lastMessageCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l01689\"></a><span class=\"lineno\"> 1689</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01690\"></a><span class=\"lineno\"> 1690</span>&#160;            counter = (uint16_t)(<a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ());</div>\n<div class=\"line\"><a name=\"l01691\"></a><span class=\"lineno\"> 1691</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01692\"></a><span class=\"lineno\"> 1692</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01693\"></a><span class=\"lineno\"> 1693</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01694\"></a><span class=\"lineno\"> 1694</span>&#160;            counter = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">getLastControlCounter</a> () + 1;</div>\n<div class=\"line\"><a name=\"l01695\"></a><span class=\"lineno\"> 1695</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">setLastControlCounter</a> (counter);</div>\n<div class=\"line\"><a name=\"l01696\"></a><span class=\"lineno\"> 1696</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">lastControlCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l01697\"></a><span class=\"lineno\"> 1697</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01698\"></a><span class=\"lineno\"> 1698</span>&#160;            counter = (uint16_t)(<a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ());</div>\n<div class=\"line\"><a name=\"l01699\"></a><span class=\"lineno\"> 1699</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01700\"></a><span class=\"lineno\"> 1700</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01701\"></a><span class=\"lineno\"> 1701</span>&#160; </div>\n<div class=\"line\"><a name=\"l01702\"></a><span class=\"lineno\"> 1702</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType != <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l01703\"></a><span class=\"lineno\"> 1703</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Data message #%d&quot;</span>, counter);</div>\n<div class=\"line\"><a name=\"l01704\"></a><span class=\"lineno\"> 1704</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01705\"></a><span class=\"lineno\"> 1705</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Control message #%d&quot;</span>, counter);</div>\n<div class=\"line\"><a name=\"l01706\"></a><span class=\"lineno\"> 1706</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01707\"></a><span class=\"lineno\"> 1707</span>&#160; </div>\n<div class=\"line\"><a name=\"l01708\"></a><span class=\"lineno\"> 1708</span>&#160;    memcpy (buf + counter_idx, &amp;counter, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01709\"></a><span class=\"lineno\"> 1709</span>&#160; </div>\n<div class=\"line\"><a name=\"l01710\"></a><span class=\"lineno\"> 1710</span>&#160;    buf[encoding_idx] = payloadEncoding;</div>\n<div class=\"line\"><a name=\"l01711\"></a><span class=\"lineno\"> 1711</span>&#160; </div>\n<div class=\"line\"><a name=\"l01712\"></a><span class=\"lineno\"> 1712</span>&#160;    memcpy (buf + data_idx, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l01713\"></a><span class=\"lineno\"> 1713</span>&#160; </div>\n<div class=\"line\"><a name=\"l01714\"></a><span class=\"lineno\"> 1714</span>&#160;    uint16_t packet_length = tag_idx;</div>\n<div class=\"line\"><a name=\"l01715\"></a><span class=\"lineno\"> 1715</span>&#160; </div>\n<div class=\"line\"><a name=\"l01716\"></a><span class=\"lineno\"> 1716</span>&#160;    memcpy (buf + length_idx, &amp;packet_length, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01717\"></a><span class=\"lineno\"> 1717</span>&#160; </div>\n<div class=\"line\"><a name=\"l01718\"></a><span class=\"lineno\"> 1718</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, packet_length));</div>\n<div class=\"line\"><a name=\"l01719\"></a><span class=\"lineno\"> 1719</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Encoding: 0x%02X&quot;</span>, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l01720\"></a><span class=\"lineno\"> 1720</span>&#160; </div>\n<div class=\"line\"><a name=\"l01721\"></a><span class=\"lineno\"> 1721</span>&#160;    uint8_t* crypt_buf = buf + length_idx;</div>\n<div class=\"line\"><a name=\"l01722\"></a><span class=\"lineno\"> 1722</span>&#160; </div>\n<div class=\"line\"><a name=\"l01723\"></a><span class=\"lineno\"> 1723</span>&#160;    <span class=\"keywordtype\">size_t</span> cryptLen = packet_length - 1 - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01724\"></a><span class=\"lineno\"> 1724</span>&#160; </div>\n<div class=\"line\"><a name=\"l01725\"></a><span class=\"lineno\"> 1725</span>&#160;    uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01726\"></a><span class=\"lineno\"> 1726</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01727\"></a><span class=\"lineno\"> 1727</span>&#160; </div>\n<div class=\"line\"><a name=\"l01728\"></a><span class=\"lineno\"> 1728</span>&#160;    memcpy (aad, buf, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01729\"></a><span class=\"lineno\"> 1729</span>&#160; </div>\n<div class=\"line\"><a name=\"l01730\"></a><span class=\"lineno\"> 1730</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from Node Key</span></div>\n<div class=\"line\"><a name=\"l01731\"></a><span class=\"lineno\"> 1731</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01732\"></a><span class=\"lineno\"> 1732</span>&#160; </div>\n<div class=\"line\"><a name=\"l01733\"></a><span class=\"lineno\"> 1733</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a> (crypt_buf, cryptLen, <span class=\"comment\">// Encrypt from length</span></div>\n<div class=\"line\"><a name=\"l01734\"></a><span class=\"lineno\"> 1734</span>&#160;                                     buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01735\"></a><span class=\"lineno\"> 1735</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of node key</span></div>\n<div class=\"line\"><a name=\"l01736\"></a><span class=\"lineno\"> 1736</span>&#160;                                     aad, sizeof (aad), buf + tag_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01737\"></a><span class=\"lineno\"> 1737</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during encryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01738\"></a><span class=\"lineno\"> 1738</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01739\"></a><span class=\"lineno\"> 1739</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01740\"></a><span class=\"lineno\"> 1740</span>&#160; </div>\n<div class=\"line\"><a name=\"l01741\"></a><span class=\"lineno\"> 1741</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Encrypted data message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, packet_length + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01742\"></a><span class=\"lineno\"> 1742</span>&#160; </div>\n<div class=\"line\"><a name=\"l01743\"></a><span class=\"lineno\"> 1743</span>&#160;    <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l01744\"></a><span class=\"lineno\"> 1744</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; CONTROL MESSAGE&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01745\"></a><span class=\"lineno\"> 1745</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dataMsgType == <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>) {</div>\n<div class=\"line\"><a name=\"l01746\"></a><span class=\"lineno\"> 1746</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; HA DISCOVERY MESSAGE&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01747\"></a><span class=\"lineno\"> 1747</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01748\"></a><span class=\"lineno\"> 1748</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; -------&gt; DATA&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01749\"></a><span class=\"lineno\"> 1749</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01750\"></a><span class=\"lineno\"> 1750</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= VERBOSE</span></div>\n<div class=\"line\"><a name=\"l01751\"></a><span class=\"lineno\"> 1751</span>&#160;    <span class=\"keywordtype\">char</span> macStr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l01752\"></a><span class=\"lineno\"> 1752</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Destination address: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, macStr));</div>\n<div class=\"line\"><a name=\"l01753\"></a><span class=\"lineno\"> 1753</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l01754\"></a><span class=\"lineno\"> 1754</span>&#160; </div>\n<div class=\"line\"><a name=\"l01755\"></a><span class=\"lineno\"> 1755</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>) { <span class=\"comment\">// RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot</span></div>\n<div class=\"line\"><a name=\"l01756\"></a><span class=\"lineno\"> 1756</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l01757\"></a><span class=\"lineno\"> 1757</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01758\"></a><span class=\"lineno\"> 1758</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01759\"></a><span class=\"lineno\"> 1759</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01760\"></a><span class=\"lineno\"> 1760</span>&#160; </div>\n<div class=\"line\"><a name=\"l01761\"></a><span class=\"lineno\"> 1761</span>&#160;    <span class=\"keywordflow\">return</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, buf, packet_length + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>) == 0);</div>\n<div class=\"line\"><a name=\"l01762\"></a><span class=\"lineno\"> 1762</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01763\"></a><span class=\"lineno\"> 1763</span>&#160; </div>\n<div class=\"line\"><a name=\"l01764\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\"> 1764</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass::sendHADiscoveryMessage</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len) {</div>\n<div class=\"line\"><a name=\"l01765\"></a><span class=\"lineno\"> 1765</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> || !len) {</div>\n<div class=\"line\"><a name=\"l01766\"></a><span class=\"lineno\"> 1766</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Empty buffer&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01767\"></a><span class=\"lineno\"> 1767</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01768\"></a><span class=\"lineno\"> 1768</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01769\"></a><span class=\"lineno\"> 1769</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>, <span class=\"keyword\">true</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>);</div>\n<div class=\"line\"><a name=\"l01770\"></a><span class=\"lineno\"> 1770</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01771\"></a><span class=\"lineno\"> 1771</span>&#160; </div>\n<div class=\"line\"><a name=\"l01772\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\"> 1772</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\">EnigmaIOTNodeClass::processGetSleepTimeCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l01773\"></a><span class=\"lineno\"> 1773</span>&#160;    uint8_t buffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01774\"></a><span class=\"lineno\"> 1774</span>&#160;    uint8_t bufLength;</div>\n<div class=\"line\"><a name=\"l01775\"></a><span class=\"lineno\"> 1775</span>&#160; </div>\n<div class=\"line\"><a name=\"l01776\"></a><span class=\"lineno\"> 1776</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Get Sleep command received&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01777\"></a><span class=\"lineno\"> 1777</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;%s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l01778\"></a><span class=\"lineno\"> 1778</span>&#160; </div>\n<div class=\"line\"><a name=\"l01779\"></a><span class=\"lineno\"> 1779</span>&#160;    buffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">control_message_type::SLEEP_ANS</a>;</div>\n<div class=\"line\"><a name=\"l01780\"></a><span class=\"lineno\"> 1780</span>&#160; </div>\n<div class=\"line\"><a name=\"l01781\"></a><span class=\"lineno\"> 1781</span>&#160;    uint32_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a> = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">getSleepTime</a> ();</div>\n<div class=\"line\"><a name=\"l01782\"></a><span class=\"lineno\"> 1782</span>&#160;    memcpy (buffer + 1, &amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>));</div>\n<div class=\"line\"><a name=\"l01783\"></a><span class=\"lineno\"> 1783</span>&#160;    bufLength = 5;</div>\n<div class=\"line\"><a name=\"l01784\"></a><span class=\"lineno\"> 1784</span>&#160; </div>\n<div class=\"line\"><a name=\"l01785\"></a><span class=\"lineno\"> 1785</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (buffer, bufLength, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>)) {</div>\n<div class=\"line\"><a name=\"l01786\"></a><span class=\"lineno\"> 1786</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Sleep time is %d seconds&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>);</div>\n<div class=\"line\"><a name=\"l01787\"></a><span class=\"lineno\"> 1787</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, bufLength));</div>\n<div class=\"line\"><a name=\"l01788\"></a><span class=\"lineno\"> 1788</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01789\"></a><span class=\"lineno\"> 1789</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01790\"></a><span class=\"lineno\"> 1790</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending version response&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01791\"></a><span class=\"lineno\"> 1791</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01792\"></a><span class=\"lineno\"> 1792</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01793\"></a><span class=\"lineno\"> 1793</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01794\"></a><span class=\"lineno\"> 1794</span>&#160; </div>\n<div class=\"line\"><a name=\"l01795\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\"> 1795</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\">EnigmaIOTNodeClass::processGetNameCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l01796\"></a><span class=\"lineno\"> 1796</span>&#160;    uint8_t buffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01797\"></a><span class=\"lineno\"> 1797</span>&#160;    uint8_t bufLength;</div>\n<div class=\"line\"><a name=\"l01798\"></a><span class=\"lineno\"> 1798</span>&#160; </div>\n<div class=\"line\"><a name=\"l01799\"></a><span class=\"lineno\"> 1799</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Get Name command received&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01800\"></a><span class=\"lineno\"> 1800</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;%s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l01801\"></a><span class=\"lineno\"> 1801</span>&#160; </div>\n<div class=\"line\"><a name=\"l01802\"></a><span class=\"lineno\"> 1802</span>&#160;    buffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">control_message_type::NAME_ANS</a>;</div>\n<div class=\"line\"><a name=\"l01803\"></a><span class=\"lineno\"> 1803</span>&#160; </div>\n<div class=\"line\"><a name=\"l01804\"></a><span class=\"lineno\"> 1804</span>&#160;    uint8_t* nodeAddress = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">getMacAddress</a> ();</div>\n<div class=\"line\"><a name=\"l01805\"></a><span class=\"lineno\"> 1805</span>&#160; </div>\n<div class=\"line\"><a name=\"l01806\"></a><span class=\"lineno\"> 1806</span>&#160;    <span class=\"keywordtype\">char</span>* name = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>;</div>\n<div class=\"line\"><a name=\"l01807\"></a><span class=\"lineno\"> 1807</span>&#160;    <span class=\"keywordtype\">size_t</span> nameLen = 0;</div>\n<div class=\"line\"><a name=\"l01808\"></a><span class=\"lineno\"> 1808</span>&#160;    <span class=\"keywordflow\">if</span> (name) {</div>\n<div class=\"line\"><a name=\"l01809\"></a><span class=\"lineno\"> 1809</span>&#160;        nameLen = strlen (name);</div>\n<div class=\"line\"><a name=\"l01810\"></a><span class=\"lineno\"> 1810</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01811\"></a><span class=\"lineno\"> 1811</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Emprty name&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01812\"></a><span class=\"lineno\"> 1812</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01813\"></a><span class=\"lineno\"> 1813</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01814\"></a><span class=\"lineno\"> 1814</span>&#160; </div>\n<div class=\"line\"><a name=\"l01815\"></a><span class=\"lineno\"> 1815</span>&#160;    memcpy (buffer + 1, nodeAddress, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>);</div>\n<div class=\"line\"><a name=\"l01816\"></a><span class=\"lineno\"> 1816</span>&#160;    memcpy (buffer + 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>, name, nameLen);</div>\n<div class=\"line\"><a name=\"l01817\"></a><span class=\"lineno\"> 1817</span>&#160;    bufLength = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> + nameLen;</div>\n<div class=\"line\"><a name=\"l01818\"></a><span class=\"lineno\"> 1818</span>&#160; </div>\n<div class=\"line\"><a name=\"l01819\"></a><span class=\"lineno\"> 1819</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (buffer, bufLength, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>)) {</div>\n<div class=\"line\"><a name=\"l01820\"></a><span class=\"lineno\"> 1820</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node name is %s&quot;</span>, name ? name : <span class=\"stringliteral\">&quot;NULL name&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01821\"></a><span class=\"lineno\"> 1821</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, bufLength));</div>\n<div class=\"line\"><a name=\"l01822\"></a><span class=\"lineno\"> 1822</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01823\"></a><span class=\"lineno\"> 1823</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01824\"></a><span class=\"lineno\"> 1824</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending name response&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01825\"></a><span class=\"lineno\"> 1825</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01826\"></a><span class=\"lineno\"> 1826</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01827\"></a><span class=\"lineno\"> 1827</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01828\"></a><span class=\"lineno\"> 1828</span>&#160; </div>\n<div class=\"line\"><a name=\"l01829\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\"> 1829</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\">EnigmaIOTNodeClass::processSetNameResponse</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l01830\"></a><span class=\"lineno\"> 1830</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01831\"></a><span class=\"lineno\"> 1831</span>&#160;<span class=\"comment\">     * ---------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01832\"></a><span class=\"lineno\"> 1832</span>&#160;<span class=\"comment\">     *| msgType (1) | IV (12) | Result code (1) | tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01833\"></a><span class=\"lineno\"> 1833</span>&#160;<span class=\"comment\">     * ---------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01834\"></a><span class=\"lineno\"> 1834</span>&#160;<span class=\"comment\">     */</span></div>\n<div class=\"line\"><a name=\"l01835\"></a><span class=\"lineno\"> 1835</span>&#160;    <span class=\"keyword\">struct </span>__attribute__ ((packed, aligned (1))) {</div>\n<div class=\"line\"><a name=\"l01836\"></a><span class=\"lineno\"> 1836</span>&#160;        uint8_t msgType;</div>\n<div class=\"line\"><a name=\"l01837\"></a><span class=\"lineno\"> 1837</span>&#160;        uint8_t iv[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01838\"></a><span class=\"lineno\"> 1838</span>&#160;        uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01839\"></a><span class=\"lineno\"> 1839</span>&#160;        int8_t errorCode;</div>\n<div class=\"line\"><a name=\"l01840\"></a><span class=\"lineno\"> 1840</span>&#160;        uint8_t tag[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01841\"></a><span class=\"lineno\"> 1841</span>&#160;    } nodeNameSetResponse_msg;</div>\n<div class=\"line\"><a name=\"l01842\"></a><span class=\"lineno\"> 1842</span>&#160; </div>\n<div class=\"line\"><a name=\"l01843\"></a><span class=\"lineno\"> 1843</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01844\"></a><span class=\"lineno\"> 1844</span>&#160; </div>\n<div class=\"line\"><a name=\"l01845\"></a><span class=\"lineno\"> 1845</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> NNSRMSG_LEN = <span class=\"keyword\">sizeof</span> (nodeNameSetResponse_msg);</div>\n<div class=\"line\"><a name=\"l01846\"></a><span class=\"lineno\"> 1846</span>&#160; </div>\n<div class=\"line\"><a name=\"l01847\"></a><span class=\"lineno\"> 1847</span>&#160;    <span class=\"keywordflow\">if</span> (len &lt; NNSRMSG_LEN) {</div>\n<div class=\"line\"><a name=\"l01848\"></a><span class=\"lineno\"> 1848</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Message too short&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01849\"></a><span class=\"lineno\"> 1849</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01850\"></a><span class=\"lineno\"> 1850</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01851\"></a><span class=\"lineno\"> 1851</span>&#160;    memcpy (&amp;nodeNameSetResponse_msg, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l01852\"></a><span class=\"lineno\"> 1852</span>&#160; </div>\n<div class=\"line\"><a name=\"l01853\"></a><span class=\"lineno\"> 1853</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01854\"></a><span class=\"lineno\"> 1854</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01855\"></a><span class=\"lineno\"> 1855</span>&#160; </div>\n<div class=\"line\"><a name=\"l01856\"></a><span class=\"lineno\"> 1856</span>&#160;    memcpy (aad, (uint8_t*)&amp;nodeNameSetResponse_msg, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l01857\"></a><span class=\"lineno\"> 1857</span>&#160; </div>\n<div class=\"line\"><a name=\"l01858\"></a><span class=\"lineno\"> 1858</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from NetworkKey</span></div>\n<div class=\"line\"><a name=\"l01859\"></a><span class=\"lineno\"> 1859</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01860\"></a><span class=\"lineno\"> 1860</span>&#160; </div>\n<div class=\"line\"><a name=\"l01861\"></a><span class=\"lineno\"> 1861</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> ((uint8_t*)&amp;(nodeNameSetResponse_msg.errorCode), sizeof (uint8_t),</div>\n<div class=\"line\"><a name=\"l01862\"></a><span class=\"lineno\"> 1862</span>&#160;                                     nodeNameSetResponse_msg.iv, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l01863\"></a><span class=\"lineno\"> 1863</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l01864\"></a><span class=\"lineno\"> 1864</span>&#160;                                     aad, sizeof (aad), nodeNameSetResponse_msg.tag, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01865\"></a><span class=\"lineno\"> 1865</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during decryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01866\"></a><span class=\"lineno\"> 1866</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01867\"></a><span class=\"lineno\"> 1867</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01868\"></a><span class=\"lineno\"> 1868</span>&#160; </div>\n<div class=\"line\"><a name=\"l01869\"></a><span class=\"lineno\"> 1869</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Decrypted Node Name Set response message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)&amp;nodeNameSetResponse_msg, NNSRMSG_LEN - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01870\"></a><span class=\"lineno\"> 1870</span>&#160; </div>\n<div class=\"line\"><a name=\"l01871\"></a><span class=\"lineno\"> 1871</span>&#160;    memcpy (&amp;counter, &amp;(nodeNameSetResponse_msg.counter), sizeof (uint16_t));</div>\n<div class=\"line\"><a name=\"l01872\"></a><span class=\"lineno\"> 1872</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Downlink msg #%d&quot;</span>, counter);</div>\n<div class=\"line\"><a name=\"l01873\"></a><span class=\"lineno\"> 1873</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01874\"></a><span class=\"lineno\"> 1874</span>&#160;        <span class=\"keywordflow\">if</span> (counter &gt; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">getLastDownlinkMsgCounter</a> ()) {</div>\n<div class=\"line\"><a name=\"l01875\"></a><span class=\"lineno\"> 1875</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Accepted&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01876\"></a><span class=\"lineno\"> 1876</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">setLastDownlinkMsgCounter</a> (counter);</div>\n<div class=\"line\"><a name=\"l01877\"></a><span class=\"lineno\"> 1877</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">lastDownlinkMsgCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l01878\"></a><span class=\"lineno\"> 1878</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01879\"></a><span class=\"lineno\"> 1879</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Downlink msg rejected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01880\"></a><span class=\"lineno\"> 1880</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01881\"></a><span class=\"lineno\"> 1881</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01882\"></a><span class=\"lineno\"> 1882</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01883\"></a><span class=\"lineno\"> 1883</span>&#160; </div>\n<div class=\"line\"><a name=\"l01884\"></a><span class=\"lineno\"> 1884</span>&#160;    <span class=\"keywordflow\">if</span> (nodeNameSetResponse_msg.errorCode != <a class=\"code\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\">NAME_OK</a>) {</div>\n<div class=\"line\"><a name=\"l01885\"></a><span class=\"lineno\"> 1885</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Name error: %d&quot;</span>, nodeNameSetResponse_msg.errorCode);</div>\n<div class=\"line\"><a name=\"l01886\"></a><span class=\"lineno\"> 1886</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01887\"></a><span class=\"lineno\"> 1887</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Name set correctly&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01888\"></a><span class=\"lineno\"> 1888</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01889\"></a><span class=\"lineno\"> 1889</span>&#160; </div>\n<div class=\"line\"><a name=\"l01890\"></a><span class=\"lineno\"> 1890</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a> &amp;&amp; !<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) { <span class=\"comment\">// RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot</span></div>\n<div class=\"line\"><a name=\"l01891\"></a><span class=\"lineno\"> 1891</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l01892\"></a><span class=\"lineno\"> 1892</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01893\"></a><span class=\"lineno\"> 1893</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01894\"></a><span class=\"lineno\"> 1894</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01895\"></a><span class=\"lineno\"> 1895</span>&#160; </div>\n<div class=\"line\"><a name=\"l01896\"></a><span class=\"lineno\"> 1896</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01897\"></a><span class=\"lineno\"> 1897</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01898\"></a><span class=\"lineno\"> 1898</span>&#160; </div>\n<div class=\"line\"><a name=\"l01899\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\"> 1899</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\">EnigmaIOTNodeClass::processSetNameCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l01900\"></a><span class=\"lineno\"> 1900</span>&#160;    uint8_t buffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01901\"></a><span class=\"lineno\"> 1901</span>&#160;    uint8_t bufLength;</div>\n<div class=\"line\"><a name=\"l01902\"></a><span class=\"lineno\"> 1902</span>&#160; </div>\n<div class=\"line\"><a name=\"l01903\"></a><span class=\"lineno\"> 1903</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Set Name command received&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01904\"></a><span class=\"lineno\"> 1904</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;%s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l01905\"></a><span class=\"lineno\"> 1905</span>&#160; </div>\n<div class=\"line\"><a name=\"l01906\"></a><span class=\"lineno\"> 1906</span>&#160;    buffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">control_message_type::NAME_ANS</a>;</div>\n<div class=\"line\"><a name=\"l01907\"></a><span class=\"lineno\"> 1907</span>&#160; </div>\n<div class=\"line\"><a name=\"l01908\"></a><span class=\"lineno\"> 1908</span>&#160;    uint8_t* nodeAddress = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">getMacAddress</a> ();</div>\n<div class=\"line\"><a name=\"l01909\"></a><span class=\"lineno\"> 1909</span>&#160; </div>\n<div class=\"line\"><a name=\"l01910\"></a><span class=\"lineno\"> 1910</span>&#160;    memcpy (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 1, len - 1);</div>\n<div class=\"line\"><a name=\"l01911\"></a><span class=\"lineno\"> 1911</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">setNodeName</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>);</div>\n<div class=\"line\"><a name=\"l01912\"></a><span class=\"lineno\"> 1912</span>&#160; </div>\n<div class=\"line\"><a name=\"l01913\"></a><span class=\"lineno\"> 1913</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ();</div>\n<div class=\"line\"><a name=\"l01914\"></a><span class=\"lineno\"> 1914</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">saveFlashData</a> ();</div>\n<div class=\"line\"><a name=\"l01915\"></a><span class=\"lineno\"> 1915</span>&#160; </div>\n<div class=\"line\"><a name=\"l01916\"></a><span class=\"lineno\"> 1916</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">sendNodeNameSet</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>)) {</div>\n<div class=\"line\"><a name=\"l01917\"></a><span class=\"lineno\"> 1917</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending set node name %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>);</div>\n<div class=\"line\"><a name=\"l01918\"></a><span class=\"lineno\"> 1918</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01919\"></a><span class=\"lineno\"> 1919</span>&#160; </div>\n<div class=\"line\"><a name=\"l01920\"></a><span class=\"lineno\"> 1920</span>&#160;    <span class=\"keywordtype\">size_t</span> nameLen = strlen (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>);</div>\n<div class=\"line\"><a name=\"l01921\"></a><span class=\"lineno\"> 1921</span>&#160; </div>\n<div class=\"line\"><a name=\"l01922\"></a><span class=\"lineno\"> 1922</span>&#160;    memcpy (buffer + 1, nodeAddress, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>);</div>\n<div class=\"line\"><a name=\"l01923\"></a><span class=\"lineno\"> 1923</span>&#160;    memcpy (buffer + 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>, nameLen);</div>\n<div class=\"line\"><a name=\"l01924\"></a><span class=\"lineno\"> 1924</span>&#160;    bufLength = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> + nameLen;</div>\n<div class=\"line\"><a name=\"l01925\"></a><span class=\"lineno\"> 1925</span>&#160; </div>\n<div class=\"line\"><a name=\"l01926\"></a><span class=\"lineno\"> 1926</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (buffer, bufLength, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>)) {</div>\n<div class=\"line\"><a name=\"l01927\"></a><span class=\"lineno\"> 1927</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node name is %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>);</div>\n<div class=\"line\"><a name=\"l01928\"></a><span class=\"lineno\"> 1928</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, bufLength));</div>\n<div class=\"line\"><a name=\"l01929\"></a><span class=\"lineno\"> 1929</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l01930\"></a><span class=\"lineno\"> 1930</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01931\"></a><span class=\"lineno\"> 1931</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending name response&quot;</span>);</div>\n<div class=\"line\"><a name=\"l01932\"></a><span class=\"lineno\"> 1932</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01933\"></a><span class=\"lineno\"> 1933</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01934\"></a><span class=\"lineno\"> 1934</span>&#160;}</div>\n<div class=\"line\"><a name=\"l01935\"></a><span class=\"lineno\"> 1935</span>&#160; </div>\n<div class=\"line\"><a name=\"l01936\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\"> 1936</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">EnigmaIOTNodeClass::sendNodeNameSet</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name) {</div>\n<div class=\"line\"><a name=\"l01937\"></a><span class=\"lineno\"> 1937</span>&#160;    <span class=\"keywordflow\">if</span> (!name)</div>\n<div class=\"line\"><a name=\"l01938\"></a><span class=\"lineno\"> 1938</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01939\"></a><span class=\"lineno\"> 1939</span>&#160; </div>\n<div class=\"line\"><a name=\"l01940\"></a><span class=\"lineno\"> 1940</span>&#160;    <span class=\"keywordtype\">size_t</span> nameLength = strlen (name);</div>\n<div class=\"line\"><a name=\"l01941\"></a><span class=\"lineno\"> 1941</span>&#160; </div>\n<div class=\"line\"><a name=\"l01942\"></a><span class=\"lineno\"> 1942</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Setting node name to %s. Size: %d&quot;</span>, name, nameLength);</div>\n<div class=\"line\"><a name=\"l01943\"></a><span class=\"lineno\"> 1943</span>&#160; </div>\n<div class=\"line\"><a name=\"l01944\"></a><span class=\"lineno\"> 1944</span>&#160;    <span class=\"keywordflow\">if</span> (!nameLength || (nameLength &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l01945\"></a><span class=\"lineno\"> 1945</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l01946\"></a><span class=\"lineno\"> 1946</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01947\"></a><span class=\"lineno\"> 1947</span>&#160; </div>\n<div class=\"line\"><a name=\"l01948\"></a><span class=\"lineno\"> 1948</span>&#160;   <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l01949\"></a><span class=\"lineno\"> 1949</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01950\"></a><span class=\"lineno\"> 1950</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | NodeID (2) | Counter (2) | Node name (up to 32) | tag (16) |</span></div>\n<div class=\"line\"><a name=\"l01951\"></a><span class=\"lineno\"> 1951</span>&#160;<span class=\"comment\">    * ------------------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01952\"></a><span class=\"lineno\"> 1952</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l01953\"></a><span class=\"lineno\"> 1953</span>&#160; </div>\n<div class=\"line\"><a name=\"l01954\"></a><span class=\"lineno\"> 1954</span>&#160;    uint8_t buf[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l01955\"></a><span class=\"lineno\"> 1955</span>&#160;    <span class=\"comment\">//uint8_t tag[TAG_LENGTH];</span></div>\n<div class=\"line\"><a name=\"l01956\"></a><span class=\"lineno\"> 1956</span>&#160;    uint16_t nodeId = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ();</div>\n<div class=\"line\"><a name=\"l01957\"></a><span class=\"lineno\"> 1957</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l01958\"></a><span class=\"lineno\"> 1958</span>&#160; </div>\n<div class=\"line\"><a name=\"l01959\"></a><span class=\"lineno\"> 1959</span>&#160;    uint8_t iv_idx = 1;</div>\n<div class=\"line\"><a name=\"l01960\"></a><span class=\"lineno\"> 1960</span>&#160;    uint8_t nodeId_idx = iv_idx + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01961\"></a><span class=\"lineno\"> 1961</span>&#160;    uint8_t counter_idx = nodeId_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01962\"></a><span class=\"lineno\"> 1962</span>&#160;    uint8_t nodeName_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l01963\"></a><span class=\"lineno\"> 1963</span>&#160;    uint8_t tag_idx = nodeName_idx + nameLength;</div>\n<div class=\"line\"><a name=\"l01964\"></a><span class=\"lineno\"> 1964</span>&#160; </div>\n<div class=\"line\"><a name=\"l01965\"></a><span class=\"lineno\"> 1965</span>&#160;    <span class=\"keywordtype\">size_t</span> packet_length = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a> + <span class=\"keyword\">sizeof</span> (int16_t) + <span class=\"keyword\">sizeof</span> (int16_t) + nameLength;</div>\n<div class=\"line\"><a name=\"l01966\"></a><span class=\"lineno\"> 1966</span>&#160; </div>\n<div class=\"line\"><a name=\"l01967\"></a><span class=\"lineno\"> 1967</span>&#160; </div>\n<div class=\"line\"><a name=\"l01968\"></a><span class=\"lineno\"> 1968</span>&#160;    buf[0] = (uint8_t)<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\">NODE_NAME_SET</a>;</div>\n<div class=\"line\"><a name=\"l01969\"></a><span class=\"lineno\"> 1969</span>&#160; </div>\n<div class=\"line\"><a name=\"l01970\"></a><span class=\"lineno\"> 1970</span>&#160;    <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a> (buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l01971\"></a><span class=\"lineno\"> 1971</span>&#160; </div>\n<div class=\"line\"><a name=\"l01972\"></a><span class=\"lineno\"> 1972</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;IV: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l01973\"></a><span class=\"lineno\"> 1973</span>&#160; </div>\n<div class=\"line\"><a name=\"l01974\"></a><span class=\"lineno\"> 1974</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l01975\"></a><span class=\"lineno\"> 1975</span>&#160;        counter = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">getLastControlCounter</a> () + 1;</div>\n<div class=\"line\"><a name=\"l01976\"></a><span class=\"lineno\"> 1976</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">setLastControlCounter</a> (counter);</div>\n<div class=\"line\"><a name=\"l01977\"></a><span class=\"lineno\"> 1977</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">lastControlCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l01978\"></a><span class=\"lineno\"> 1978</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l01979\"></a><span class=\"lineno\"> 1979</span>&#160;        counter = (uint16_t)(<a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>.<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ());</div>\n<div class=\"line\"><a name=\"l01980\"></a><span class=\"lineno\"> 1980</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l01981\"></a><span class=\"lineno\"> 1981</span>&#160; </div>\n<div class=\"line\"><a name=\"l01982\"></a><span class=\"lineno\"> 1982</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Control message #%d&quot;</span>, counter);</div>\n<div class=\"line\"><a name=\"l01983\"></a><span class=\"lineno\"> 1983</span>&#160; </div>\n<div class=\"line\"><a name=\"l01984\"></a><span class=\"lineno\"> 1984</span>&#160;    memcpy (buf + counter_idx, &amp;counter, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01985\"></a><span class=\"lineno\"> 1985</span>&#160; </div>\n<div class=\"line\"><a name=\"l01986\"></a><span class=\"lineno\"> 1986</span>&#160;    memcpy (buf + nodeId_idx, &amp;nodeId, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l01987\"></a><span class=\"lineno\"> 1987</span>&#160; </div>\n<div class=\"line\"><a name=\"l01988\"></a><span class=\"lineno\"> 1988</span>&#160;    memcpy (buf + nodeName_idx, name, nameLength);</div>\n<div class=\"line\"><a name=\"l01989\"></a><span class=\"lineno\"> 1989</span>&#160; </div>\n<div class=\"line\"><a name=\"l01990\"></a><span class=\"lineno\"> 1990</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Set node name message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, packet_length));</div>\n<div class=\"line\"><a name=\"l01991\"></a><span class=\"lineno\"> 1991</span>&#160; </div>\n<div class=\"line\"><a name=\"l01992\"></a><span class=\"lineno\"> 1992</span>&#160;    uint8_t* crypt_buf = buf + nodeId_idx;</div>\n<div class=\"line\"><a name=\"l01993\"></a><span class=\"lineno\"> 1993</span>&#160; </div>\n<div class=\"line\"><a name=\"l01994\"></a><span class=\"lineno\"> 1994</span>&#160;    <span class=\"keywordtype\">size_t</span> cryptLen = packet_length - 1 - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01995\"></a><span class=\"lineno\"> 1995</span>&#160; </div>\n<div class=\"line\"><a name=\"l01996\"></a><span class=\"lineno\"> 1996</span>&#160;    uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l01997\"></a><span class=\"lineno\"> 1997</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l01998\"></a><span class=\"lineno\"> 1998</span>&#160; </div>\n<div class=\"line\"><a name=\"l01999\"></a><span class=\"lineno\"> 1999</span>&#160;    memcpy (aad, buf, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l02000\"></a><span class=\"lineno\"> 2000</span>&#160; </div>\n<div class=\"line\"><a name=\"l02001\"></a><span class=\"lineno\"> 2001</span>&#160;    <span class=\"comment\">// Copy 8 last bytes from Node Key</span></div>\n<div class=\"line\"><a name=\"l02002\"></a><span class=\"lineno\"> 2002</span>&#160;    memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l02003\"></a><span class=\"lineno\"> 2003</span>&#160; </div>\n<div class=\"line\"><a name=\"l02004\"></a><span class=\"lineno\"> 2004</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a> (crypt_buf, cryptLen, <span class=\"comment\">// Encrypt from length</span></div>\n<div class=\"line\"><a name=\"l02005\"></a><span class=\"lineno\"> 2005</span>&#160;                                     buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l02006\"></a><span class=\"lineno\"> 2006</span>&#160;                                     <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of node key</span></div>\n<div class=\"line\"><a name=\"l02007\"></a><span class=\"lineno\"> 2007</span>&#160;                                     aad, sizeof (aad), buf + tag_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l02008\"></a><span class=\"lineno\"> 2008</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during encryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02009\"></a><span class=\"lineno\"> 2009</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02010\"></a><span class=\"lineno\"> 2010</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02011\"></a><span class=\"lineno\"> 2011</span>&#160; </div>\n<div class=\"line\"><a name=\"l02012\"></a><span class=\"lineno\"> 2012</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Encrypted set node name message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, packet_length + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l02013\"></a><span class=\"lineno\"> 2013</span>&#160; </div>\n<div class=\"line\"><a name=\"l02014\"></a><span class=\"lineno\"> 2014</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= VERBOSE</span></div>\n<div class=\"line\"><a name=\"l02015\"></a><span class=\"lineno\"> 2015</span>&#160;    <span class=\"keywordtype\">char</span> macStr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l02016\"></a><span class=\"lineno\"> 2016</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Destination address: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, macStr));</div>\n<div class=\"line\"><a name=\"l02017\"></a><span class=\"lineno\"> 2017</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l02018\"></a><span class=\"lineno\"> 2018</span>&#160; </div>\n<div class=\"line\"><a name=\"l02019\"></a><span class=\"lineno\"> 2019</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">flashBlue</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02020\"></a><span class=\"lineno\"> 2020</span>&#160; </div>\n<div class=\"line\"><a name=\"l02021\"></a><span class=\"lineno\"> 2021</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;-------&gt; NODE NAME SEND&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02022\"></a><span class=\"lineno\"> 2022</span>&#160; </div>\n<div class=\"line\"><a name=\"l02023\"></a><span class=\"lineno\"> 2023</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a> &amp;&amp; !<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) { <span class=\"comment\">// RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot</span></div>\n<div class=\"line\"><a name=\"l02024\"></a><span class=\"lineno\"> 2024</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l02025\"></a><span class=\"lineno\"> 2025</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02026\"></a><span class=\"lineno\"> 2026</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02027\"></a><span class=\"lineno\"> 2027</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02028\"></a><span class=\"lineno\"> 2028</span>&#160; </div>\n<div class=\"line\"><a name=\"l02029\"></a><span class=\"lineno\"> 2029</span>&#160;    <span class=\"keywordflow\">return</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, buf, packet_length + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>) == 0);</div>\n<div class=\"line\"><a name=\"l02030\"></a><span class=\"lineno\"> 2030</span>&#160; </div>\n<div class=\"line\"><a name=\"l02031\"></a><span class=\"lineno\"> 2031</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02032\"></a><span class=\"lineno\"> 2032</span>&#160; </div>\n<div class=\"line\"><a name=\"l02033\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\"> 2033</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\">EnigmaIOTNodeClass::processSetIdentifyCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l02034\"></a><span class=\"lineno\"> 2034</span>&#160;    <span class=\"comment\">//uint8_t buffer[MAX_MESSAGE_LENGTH];</span></div>\n<div class=\"line\"><a name=\"l02035\"></a><span class=\"lineno\"> 2035</span>&#160;    <span class=\"comment\">//uint8_t bufLength;</span></div>\n<div class=\"line\"><a name=\"l02036\"></a><span class=\"lineno\"> 2036</span>&#160; </div>\n<div class=\"line\"><a name=\"l02037\"></a><span class=\"lineno\"> 2037</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Set Identify command received&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02038\"></a><span class=\"lineno\"> 2038</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;%s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l02039\"></a><span class=\"lineno\"> 2039</span>&#160; </div>\n<div class=\"line\"><a name=\"l02040\"></a><span class=\"lineno\"> 2040</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;IDENTIFY&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02041\"></a><span class=\"lineno\"> 2041</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">startIdentifying</a> (1000);</div>\n<div class=\"line\"><a name=\"l02042\"></a><span class=\"lineno\"> 2042</span>&#160; </div>\n<div class=\"line\"><a name=\"l02043\"></a><span class=\"lineno\"> 2043</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02044\"></a><span class=\"lineno\"> 2044</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02045\"></a><span class=\"lineno\"> 2045</span>&#160; </div>\n<div class=\"line\"><a name=\"l02046\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\"> 2046</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\">EnigmaIOTNodeClass::processGetRSSICommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l02047\"></a><span class=\"lineno\"> 2047</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">requestSearchGateway</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02048\"></a><span class=\"lineno\"> 2048</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">requestReportRSSI</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02049\"></a><span class=\"lineno\"> 2049</span>&#160; </div>\n<div class=\"line\"><a name=\"l02050\"></a><span class=\"lineno\"> 2050</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02051\"></a><span class=\"lineno\"> 2051</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02052\"></a><span class=\"lineno\"> 2052</span>&#160; </div>\n<div class=\"line\"><a name=\"l02053\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\"> 2053</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\">EnigmaIOTNodeClass::processSetRestartCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l02054\"></a><span class=\"lineno\"> 2054</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Restart due to command&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02055\"></a><span class=\"lineno\"> 2055</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">restart</a> (<a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\">RESTART_REQUESTED</a>);</div>\n<div class=\"line\"><a name=\"l02056\"></a><span class=\"lineno\"> 2056</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02057\"></a><span class=\"lineno\"> 2057</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02058\"></a><span class=\"lineno\"> 2058</span>&#160; </div>\n<div class=\"line\"><a name=\"l02059\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\"> 2059</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\">EnigmaIOTNodeClass::processSetResetConfigCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l02060\"></a><span class=\"lineno\"> 2060</span>&#160;    uint8_t buffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l02061\"></a><span class=\"lineno\"> 2061</span>&#160;    uint8_t bufLength;</div>\n<div class=\"line\"><a name=\"l02062\"></a><span class=\"lineno\"> 2062</span>&#160; </div>\n<div class=\"line\"><a name=\"l02063\"></a><span class=\"lineno\"> 2063</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Reset Config command received&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02064\"></a><span class=\"lineno\"> 2064</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;%s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l02065\"></a><span class=\"lineno\"> 2065</span>&#160; </div>\n<div class=\"line\"><a name=\"l02066\"></a><span class=\"lineno\"> 2066</span>&#160;    buffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\">control_message_type::RESET_ANS</a>;</div>\n<div class=\"line\"><a name=\"l02067\"></a><span class=\"lineno\"> 2067</span>&#160;    bufLength = 1;</div>\n<div class=\"line\"><a name=\"l02068\"></a><span class=\"lineno\"> 2068</span>&#160; </div>\n<div class=\"line\"><a name=\"l02069\"></a><span class=\"lineno\"> 2069</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">configCleared</a> = <span class=\"keyword\">true</span>; <span class=\"comment\">// Disable any possible saving to flash or RTC memory</span></div>\n<div class=\"line\"><a name=\"l02070\"></a><span class=\"lineno\"> 2070</span>&#160; </div>\n<div class=\"line\"><a name=\"l02071\"></a><span class=\"lineno\"> 2071</span>&#160;    <span class=\"keywordtype\">bool</span> result;</div>\n<div class=\"line\"><a name=\"l02072\"></a><span class=\"lineno\"> 2072</span>&#160; </div>\n<div class=\"line\"><a name=\"l02073\"></a><span class=\"lineno\"> 2073</span>&#160;    <span class=\"keywordflow\">if</span> ((result = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (buffer, bufLength, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>))) {</div>\n<div class=\"line\"><a name=\"l02074\"></a><span class=\"lineno\"> 2074</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Reset Config about to be executed&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>);</div>\n<div class=\"line\"><a name=\"l02075\"></a><span class=\"lineno\"> 2075</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, bufLength));</div>\n<div class=\"line\"><a name=\"l02076\"></a><span class=\"lineno\"> 2076</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02077\"></a><span class=\"lineno\"> 2077</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending Reset Config response&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02078\"></a><span class=\"lineno\"> 2078</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02079\"></a><span class=\"lineno\"> 2079</span>&#160; </div>\n<div class=\"line\"><a name=\"l02080\"></a><span class=\"lineno\"> 2080</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Send restart command before deleting config&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02081\"></a><span class=\"lineno\"> 2081</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">restartReason</a> = <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\">CONFIG_RESET</a>;</div>\n<div class=\"line\"><a name=\"l02082\"></a><span class=\"lineno\"> 2082</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">sendRestart</a> ();</div>\n<div class=\"line\"><a name=\"l02083\"></a><span class=\"lineno\"> 2083</span>&#160;    </div>\n<div class=\"line\"><a name=\"l02084\"></a><span class=\"lineno\"> 2084</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">enableTransmit</a> (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l02085\"></a><span class=\"lineno\"> 2085</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">clearRTC</a> ();</div>\n<div class=\"line\"><a name=\"l02086\"></a><span class=\"lineno\"> 2086</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">clearFlash</a> ();</div>\n<div class=\"line\"><a name=\"l02087\"></a><span class=\"lineno\"> 2087</span>&#160; </div>\n<div class=\"line\"><a name=\"l02088\"></a><span class=\"lineno\"> 2088</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">restart</a> (<a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\">CONFIG_RESET</a>);</div>\n<div class=\"line\"><a name=\"l02089\"></a><span class=\"lineno\"> 2089</span>&#160; </div>\n<div class=\"line\"><a name=\"l02090\"></a><span class=\"lineno\"> 2090</span>&#160;    <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l02091\"></a><span class=\"lineno\"> 2091</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02092\"></a><span class=\"lineno\"> 2092</span>&#160; </div>\n<div class=\"line\"><a name=\"l02093\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\"> 2093</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">EnigmaIOTNodeClass::clearRTC</a> () {</div>\n<div class=\"line\"><a name=\"l02094\"></a><span class=\"lineno\"> 2094</span>&#160;    uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[<span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>)];</div>\n<div class=\"line\"><a name=\"l02095\"></a><span class=\"lineno\"> 2095</span>&#160; </div>\n<div class=\"line\"><a name=\"l02096\"></a><span class=\"lineno\"> 2096</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">protectOTA</a> || <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) {</div>\n<div class=\"line\"><a name=\"l02097\"></a><span class=\"lineno\"> 2097</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Cannot write to RTC memory&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02098\"></a><span class=\"lineno\"> 2098</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l02099\"></a><span class=\"lineno\"> 2099</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02100\"></a><span class=\"lineno\"> 2100</span>&#160; </div>\n<div class=\"line\"><a name=\"l02101\"></a><span class=\"lineno\"> 2101</span>&#160;    memset (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, 0, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>));</div>\n<div class=\"line\"><a name=\"l02102\"></a><span class=\"lineno\"> 2102</span>&#160; </div>\n<div class=\"line\"><a name=\"l02103\"></a><span class=\"lineno\"> 2103</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l02104\"></a><span class=\"lineno\"> 2104</span>&#160;    ESP.rtcUserMemoryWrite (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">RTC_ADDRESS</a>, (uint32_t*)<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>));</div>\n<div class=\"line\"><a name=\"l02105\"></a><span class=\"lineno\"> 2105</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l02106\"></a><span class=\"lineno\"> 2106</span>&#160;    memset (&amp;rtcmem_data_storage, 0, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>));</div>\n<div class=\"line\"><a name=\"l02107\"></a><span class=\"lineno\"> 2107</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l02108\"></a><span class=\"lineno\"> 2108</span>&#160;    </div>\n<div class=\"line\"><a name=\"l02109\"></a><span class=\"lineno\"> 2109</span>&#160;<span class=\"preprocessor\">#if USE_FLASH_INSTEAD_RTC</span></div>\n<div class=\"line\"><a name=\"l02110\"></a><span class=\"lineno\"> 2110</span>&#160;    FILESYSTEM.begin ();</div>\n<div class=\"line\"><a name=\"l02111\"></a><span class=\"lineno\"> 2111</span>&#160;    FILESYSTEM.remove (RTC_DATA_FILE);</div>\n<div class=\"line\"><a name=\"l02112\"></a><span class=\"lineno\"> 2112</span>&#160;    FILESYSTEM.end ();</div>\n<div class=\"line\"><a name=\"l02113\"></a><span class=\"lineno\"> 2113</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l02114\"></a><span class=\"lineno\"> 2114</span>&#160; </div>\n<div class=\"line\"><a name=\"l02115\"></a><span class=\"lineno\"> 2115</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;RTC Cleared&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02116\"></a><span class=\"lineno\"> 2116</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02117\"></a><span class=\"lineno\"> 2117</span>&#160; </div>\n<div class=\"line\"><a name=\"l02118\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\"> 2118</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\">EnigmaIOTNodeClass::processSetSleepTimeCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l02119\"></a><span class=\"lineno\"> 2119</span>&#160;    uint8_t buffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l02120\"></a><span class=\"lineno\"> 2120</span>&#160;    uint8_t bufLength;</div>\n<div class=\"line\"><a name=\"l02121\"></a><span class=\"lineno\"> 2121</span>&#160; </div>\n<div class=\"line\"><a name=\"l02122\"></a><span class=\"lineno\"> 2122</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Set Sleep command received&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02123\"></a><span class=\"lineno\"> 2123</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;%s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l02124\"></a><span class=\"lineno\"> 2124</span>&#160;    <span class=\"keywordflow\">if</span> (!FILESYSTEM.begin ()) {</div>\n<div class=\"line\"><a name=\"l02125\"></a><span class=\"lineno\"> 2125</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error mounting flash&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02126\"></a><span class=\"lineno\"> 2126</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02127\"></a><span class=\"lineno\"> 2127</span>&#160;    <span class=\"keywordtype\">bool</span> result = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">loadFlashData</a> ();</div>\n<div class=\"line\"><a name=\"l02128\"></a><span class=\"lineno\"> 2128</span>&#160;    <span class=\"keywordflow\">if</span> (!result) {</div>\n<div class=\"line\"><a name=\"l02129\"></a><span class=\"lineno\"> 2129</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error loading configuration&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02130\"></a><span class=\"lineno\"> 2130</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02131\"></a><span class=\"lineno\"> 2131</span>&#160; </div>\n<div class=\"line\"><a name=\"l02132\"></a><span class=\"lineno\"> 2132</span>&#160;    buffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">control_message_type::SLEEP_ANS</a>;</div>\n<div class=\"line\"><a name=\"l02133\"></a><span class=\"lineno\"> 2133</span>&#160; </div>\n<div class=\"line\"><a name=\"l02134\"></a><span class=\"lineno\"> 2134</span>&#160;    uint32_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>;</div>\n<div class=\"line\"><a name=\"l02135\"></a><span class=\"lineno\"> 2135</span>&#160;    memcpy (&amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 1, <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l02136\"></a><span class=\"lineno\"> 2136</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Sleep time requested: %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>);</div>\n<div class=\"line\"><a name=\"l02137\"></a><span class=\"lineno\"> 2137</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">setSleepTime</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>);</div>\n<div class=\"line\"><a name=\"l02138\"></a><span class=\"lineno\"> 2138</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a> = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">getSleepTime</a> ();</div>\n<div class=\"line\"><a name=\"l02139\"></a><span class=\"lineno\"> 2139</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a> &gt; 0) {</div>\n<div class=\"line\"><a name=\"l02140\"></a><span class=\"lineno\"> 2140</span>&#160;        <span class=\"keywordflow\">if</span> (result) {</div>\n<div class=\"line\"><a name=\"l02141\"></a><span class=\"lineno\"> 2141</span>&#160;            <span class=\"keywordflow\">if</span> ((result = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">saveFlashData</a> ())) {</div>\n<div class=\"line\"><a name=\"l02142\"></a><span class=\"lineno\"> 2142</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;Saved config data after set sleep time command&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02143\"></a><span class=\"lineno\"> 2143</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02144\"></a><span class=\"lineno\"> 2144</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error saving data after set sleep time command&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02145\"></a><span class=\"lineno\"> 2145</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l02146\"></a><span class=\"lineno\"> 2146</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02147\"></a><span class=\"lineno\"> 2147</span>&#160;        FILESYSTEM.end ();</div>\n<div class=\"line\"><a name=\"l02148\"></a><span class=\"lineno\"> 2148</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02149\"></a><span class=\"lineno\"> 2149</span>&#160;    memcpy (buffer + 1, &amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>));</div>\n<div class=\"line\"><a name=\"l02150\"></a><span class=\"lineno\"> 2150</span>&#160;    bufLength = 5;</div>\n<div class=\"line\"><a name=\"l02151\"></a><span class=\"lineno\"> 2151</span>&#160; </div>\n<div class=\"line\"><a name=\"l02152\"></a><span class=\"lineno\"> 2152</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (buffer, bufLength, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>)) {</div>\n<div class=\"line\"><a name=\"l02153\"></a><span class=\"lineno\"> 2153</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Sleep time is %d seconds&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>);</div>\n<div class=\"line\"><a name=\"l02154\"></a><span class=\"lineno\"> 2154</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, bufLength));</div>\n<div class=\"line\"><a name=\"l02155\"></a><span class=\"lineno\"> 2155</span>&#160;        <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l02156\"></a><span class=\"lineno\"> 2156</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02157\"></a><span class=\"lineno\"> 2157</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending version response&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02158\"></a><span class=\"lineno\"> 2158</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02159\"></a><span class=\"lineno\"> 2159</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02160\"></a><span class=\"lineno\"> 2160</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02161\"></a><span class=\"lineno\"> 2161</span>&#160; </div>\n<div class=\"line\"><a name=\"l02162\"></a><span class=\"lineno\"> 2162</span>&#160; </div>\n<div class=\"line\"><a name=\"l02163\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\"> 2163</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\">EnigmaIOTNodeClass::processVersionCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l02164\"></a><span class=\"lineno\"> 2164</span>&#160;    uint8_t buffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l02165\"></a><span class=\"lineno\"> 2165</span>&#160;    uint8_t bufLength;</div>\n<div class=\"line\"><a name=\"l02166\"></a><span class=\"lineno\"> 2166</span>&#160; </div>\n<div class=\"line\"><a name=\"l02167\"></a><span class=\"lineno\"> 2167</span>&#160;    buffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">control_message_type::VERSION_ANS</a>;</div>\n<div class=\"line\"><a name=\"l02168\"></a><span class=\"lineno\"> 2168</span>&#160;    memcpy (buffer + 1, <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>, <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>));</div>\n<div class=\"line\"><a name=\"l02169\"></a><span class=\"lineno\"> 2169</span>&#160;    bufLength = <span class=\"keyword\">sizeof</span> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>) + 1;</div>\n<div class=\"line\"><a name=\"l02170\"></a><span class=\"lineno\"> 2170</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Version command received&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02171\"></a><span class=\"lineno\"> 2171</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (buffer, bufLength, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>)) {</div>\n<div class=\"line\"><a name=\"l02172\"></a><span class=\"lineno\"> 2172</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Version is %s&quot;</span>, <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>);</div>\n<div class=\"line\"><a name=\"l02173\"></a><span class=\"lineno\"> 2173</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, bufLength));</div>\n<div class=\"line\"><a name=\"l02174\"></a><span class=\"lineno\"> 2174</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02175\"></a><span class=\"lineno\"> 2175</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02176\"></a><span class=\"lineno\"> 2176</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending version response&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02177\"></a><span class=\"lineno\"> 2177</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02178\"></a><span class=\"lineno\"> 2178</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02179\"></a><span class=\"lineno\"> 2179</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02180\"></a><span class=\"lineno\"> 2180</span>&#160; </div>\n<div class=\"line\"><a name=\"l02181\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\"> 2181</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\">EnigmaIOTNodeClass::processOTACommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l02182\"></a><span class=\"lineno\"> 2182</span>&#160;    <span class=\"keyword\">const</span> uint8_t MAX_OTA_RESPONSE_LENGTH = 4;</div>\n<div class=\"line\"><a name=\"l02183\"></a><span class=\"lineno\"> 2183</span>&#160; </div>\n<div class=\"line\"><a name=\"l02184\"></a><span class=\"lineno\"> 2184</span>&#160;    uint8_t responseBuffer[MAX_OTA_RESPONSE_LENGTH];</div>\n<div class=\"line\"><a name=\"l02185\"></a><span class=\"lineno\"> 2185</span>&#160; </div>\n<div class=\"line\"><a name=\"l02186\"></a><span class=\"lineno\"> 2186</span>&#160;    <span class=\"comment\">//DEBUG_VERBOSE (&quot;Data: %s&quot;, printHexBuffer (data, len));</span></div>\n<div class=\"line\"><a name=\"l02187\"></a><span class=\"lineno\"> 2187</span>&#160;    uint16_t msgIdx;</div>\n<div class=\"line\"><a name=\"l02188\"></a><span class=\"lineno\"> 2188</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">char</span> md5buffer[33];</div>\n<div class=\"line\"><a name=\"l02189\"></a><span class=\"lineno\"> 2189</span>&#160;    <span class=\"keywordtype\">char</span> md5calc[32];</div>\n<div class=\"line\"><a name=\"l02190\"></a><span class=\"lineno\"> 2190</span>&#160;    <span class=\"keyword\">static</span> uint16_t numMsgs;</div>\n<div class=\"line\"><a name=\"l02191\"></a><span class=\"lineno\"> 2191</span>&#160;    <span class=\"keyword\">static</span> uint32_t otaSize;</div>\n<div class=\"line\"><a name=\"l02192\"></a><span class=\"lineno\"> 2192</span>&#160;    <span class=\"keyword\">static</span> uint16_t oldIdx;</div>\n<div class=\"line\"><a name=\"l02193\"></a><span class=\"lineno\"> 2193</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> otaRecoverRequested = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02194\"></a><span class=\"lineno\"> 2194</span>&#160;    <span class=\"keyword\">static</span> MD5Builder _md5;</div>\n<div class=\"line\"><a name=\"l02195\"></a><span class=\"lineno\"> 2195</span>&#160;    uint8_t* dataPtr = (uint8_t*)(<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 1);</div>\n<div class=\"line\"><a name=\"l02196\"></a><span class=\"lineno\"> 2196</span>&#160;    uint8_t dataLen = len - 1;</div>\n<div class=\"line\"><a name=\"l02197\"></a><span class=\"lineno\"> 2197</span>&#160; </div>\n<div class=\"line\"><a name=\"l02198\"></a><span class=\"lineno\"> 2198</span>&#160;    <span class=\"keywordflow\">if</span> (dataLen &lt; 2) {</div>\n<div class=\"line\"><a name=\"l02199\"></a><span class=\"lineno\"> 2199</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA message is too short: %u bytes&quot;</span>, dataLen + 1);</div>\n<div class=\"line\"><a name=\"l02200\"></a><span class=\"lineno\"> 2200</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02201\"></a><span class=\"lineno\"> 2201</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02202\"></a><span class=\"lineno\"> 2202</span>&#160; </div>\n<div class=\"line\"><a name=\"l02203\"></a><span class=\"lineno\"> 2203</span>&#160;    memcpy (&amp;msgIdx, dataPtr, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l02204\"></a><span class=\"lineno\"> 2204</span>&#160;    dataPtr += <span class=\"keyword\">sizeof</span> (uint16_t);</div>\n<div class=\"line\"><a name=\"l02205\"></a><span class=\"lineno\"> 2205</span>&#160;    dataLen -= <span class=\"keyword\">sizeof</span> (uint16_t);</div>\n<div class=\"line\"><a name=\"l02206\"></a><span class=\"lineno\"> 2206</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;OTA message #%u&quot;</span>, msgIdx);</div>\n<div class=\"line\"><a name=\"l02207\"></a><span class=\"lineno\"> 2207</span>&#160;    <span class=\"keywordflow\">if</span> (msgIdx &gt; 0 &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) {</div>\n<div class=\"line\"><a name=\"l02208\"></a><span class=\"lineno\"> 2208</span>&#160;        <span class=\"keywordflow\">if</span> (msgIdx != (oldIdx + 1)) {</div>\n<div class=\"line\"><a name=\"l02209\"></a><span class=\"lineno\"> 2209</span>&#160;            <span class=\"keywordflow\">if</span> (!otaRecoverRequested) {</div>\n<div class=\"line\"><a name=\"l02210\"></a><span class=\"lineno\"> 2210</span>&#160;                otaRecoverRequested = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02211\"></a><span class=\"lineno\"> 2211</span>&#160;                responseBuffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">control_message_type::OTA_ANS</a>;</div>\n<div class=\"line\"><a name=\"l02212\"></a><span class=\"lineno\"> 2212</span>&#160;                responseBuffer[1] = <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\">ota_status::OTA_OUT_OF_SEQUENCE</a>;</div>\n<div class=\"line\"><a name=\"l02213\"></a><span class=\"lineno\"> 2213</span>&#160;                memcpy (responseBuffer + 2, (uint8_t*)&amp;oldIdx, <span class=\"keyword\">sizeof</span> (oldIdx));</div>\n<div class=\"line\"><a name=\"l02214\"></a><span class=\"lineno\"> 2214</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (responseBuffer, 4, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>);</div>\n<div class=\"line\"><a name=\"l02215\"></a><span class=\"lineno\"> 2215</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;%u OTA messages missing before %u&quot;</span>, msgIdx - oldIdx - 1, msgIdx);</div>\n<div class=\"line\"><a name=\"l02216\"></a><span class=\"lineno\"> 2216</span>&#160;                <span class=\"comment\">//otaRunning = false;</span></div>\n<div class=\"line\"><a name=\"l02217\"></a><span class=\"lineno\"> 2217</span>&#160;                <span class=\"comment\">//otaError = true;</span></div>\n<div class=\"line\"><a name=\"l02218\"></a><span class=\"lineno\"> 2218</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l02219\"></a><span class=\"lineno\"> 2219</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02220\"></a><span class=\"lineno\"> 2220</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02221\"></a><span class=\"lineno\"> 2221</span>&#160;            oldIdx = msgIdx;</div>\n<div class=\"line\"><a name=\"l02222\"></a><span class=\"lineno\"> 2222</span>&#160;            otaRecoverRequested = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02223\"></a><span class=\"lineno\"> 2223</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02224\"></a><span class=\"lineno\"> 2224</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02225\"></a><span class=\"lineno\"> 2225</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">lastOTAmsg</a> = millis ();</div>\n<div class=\"line\"><a name=\"l02226\"></a><span class=\"lineno\"> 2226</span>&#160; </div>\n<div class=\"line\"><a name=\"l02227\"></a><span class=\"lineno\"> 2227</span>&#160;    <span class=\"keywordflow\">if</span> (msgIdx == 0) {</div>\n<div class=\"line\"><a name=\"l02228\"></a><span class=\"lineno\"> 2228</span>&#160;        <span class=\"keywordflow\">if</span> (dataLen &lt; 38) {</div>\n<div class=\"line\"><a name=\"l02229\"></a><span class=\"lineno\"> 2229</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA message #0 is too short: %u bytes&quot;</span>, dataLen + 3);</div>\n<div class=\"line\"><a name=\"l02230\"></a><span class=\"lineno\"> 2230</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02231\"></a><span class=\"lineno\"> 2231</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02232\"></a><span class=\"lineno\"> 2232</span>&#160;        memcpy (&amp;otaSize, dataPtr, <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l02233\"></a><span class=\"lineno\"> 2233</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;OTA size: %u bytes&quot;</span>, otaSize);</div>\n<div class=\"line\"><a name=\"l02234\"></a><span class=\"lineno\"> 2234</span>&#160;        dataPtr += <span class=\"keyword\">sizeof</span> (uint32_t);</div>\n<div class=\"line\"><a name=\"l02235\"></a><span class=\"lineno\"> 2235</span>&#160;        dataLen -= <span class=\"keyword\">sizeof</span> (uint32_t);</div>\n<div class=\"line\"><a name=\"l02236\"></a><span class=\"lineno\"> 2236</span>&#160;        memcpy (&amp;numMsgs, dataPtr, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l02237\"></a><span class=\"lineno\"> 2237</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Number of OTA messages: %u&quot;</span>, numMsgs);</div>\n<div class=\"line\"><a name=\"l02238\"></a><span class=\"lineno\"> 2238</span>&#160;        dataPtr += <span class=\"keyword\">sizeof</span> (uint16_t);</div>\n<div class=\"line\"><a name=\"l02239\"></a><span class=\"lineno\"> 2239</span>&#160;        dataLen -= <span class=\"keyword\">sizeof</span> (uint16_t);</div>\n<div class=\"line\"><a name=\"l02240\"></a><span class=\"lineno\"> 2240</span>&#160;        memcpy (md5buffer, dataPtr, 32);</div>\n<div class=\"line\"><a name=\"l02241\"></a><span class=\"lineno\"> 2241</span>&#160;        md5buffer[32] = <span class=\"charliteral\">&#39;\\0&#39;</span>;</div>\n<div class=\"line\"><a name=\"l02242\"></a><span class=\"lineno\"> 2242</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;MD5: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> ((uint8_t*)md5buffer, 32));</div>\n<div class=\"line\"><a name=\"l02243\"></a><span class=\"lineno\"> 2243</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02244\"></a><span class=\"lineno\"> 2244</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">otaError</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02245\"></a><span class=\"lineno\"> 2245</span>&#160;        _md5.begin ();</div>\n<div class=\"line\"><a name=\"l02246\"></a><span class=\"lineno\"> 2246</span>&#160;        responseBuffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">control_message_type::OTA_ANS</a>;</div>\n<div class=\"line\"><a name=\"l02247\"></a><span class=\"lineno\"> 2247</span>&#160;        responseBuffer[1] = <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\">ota_status::OTA_STARTED</a>;</div>\n<div class=\"line\"><a name=\"l02248\"></a><span class=\"lineno\"> 2248</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (responseBuffer, 2, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>)) {</div>\n<div class=\"line\"><a name=\"l02249\"></a><span class=\"lineno\"> 2249</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA STARTED&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02250\"></a><span class=\"lineno\"> 2250</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">restart</a> (<a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\">IRRELEVANT</a>, <span class=\"keyword\">false</span>); <span class=\"comment\">// Force unregistration after boot so that sleepy status is synchronized</span></div>\n<div class=\"line\"><a name=\"l02251\"></a><span class=\"lineno\"> 2251</span>&#160;                             <span class=\"comment\">// on Gateway</span></div>\n<div class=\"line\"><a name=\"l02252\"></a><span class=\"lineno\"> 2252</span>&#160;            <span class=\"keywordflow\">if</span> (!Update.begin (otaSize)) {</div>\n<div class=\"line\"><a name=\"l02253\"></a><span class=\"lineno\"> 2253</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error begginning OTA. OTA size: %u&quot;</span>, otaSize);</div>\n<div class=\"line\"><a name=\"l02254\"></a><span class=\"lineno\"> 2254</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02255\"></a><span class=\"lineno\"> 2255</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l02256\"></a><span class=\"lineno\"> 2256</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l02257\"></a><span class=\"lineno\"> 2257</span>&#160;            Update.runAsync (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l02258\"></a><span class=\"lineno\"> 2258</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l02259\"></a><span class=\"lineno\"> 2259</span>&#160;            <span class=\"keywordflow\">if</span> (!Update.setMD5 (md5buffer)) {</div>\n<div class=\"line\"><a name=\"l02260\"></a><span class=\"lineno\"> 2260</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting MD5&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02261\"></a><span class=\"lineno\"> 2261</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02262\"></a><span class=\"lineno\"> 2262</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l02263\"></a><span class=\"lineno\"> 2263</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02264\"></a><span class=\"lineno\"> 2264</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02265\"></a><span class=\"lineno\"> 2265</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) {</div>\n<div class=\"line\"><a name=\"l02266\"></a><span class=\"lineno\"> 2266</span>&#160;            <span class=\"keyword\">static</span> <span class=\"keywordtype\">size_t</span> totalBytes = 0;</div>\n<div class=\"line\"><a name=\"l02267\"></a><span class=\"lineno\"> 2267</span>&#160; </div>\n<div class=\"line\"><a name=\"l02268\"></a><span class=\"lineno\"> 2268</span>&#160;            _md5.add (dataPtr, dataLen);</div>\n<div class=\"line\"><a name=\"l02269\"></a><span class=\"lineno\"> 2269</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">enableTransmit</a> (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l02270\"></a><span class=\"lineno\"> 2270</span>&#160;            <span class=\"comment\">// Process OTA Update</span></div>\n<div class=\"line\"><a name=\"l02271\"></a><span class=\"lineno\"> 2271</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= INFO</span></div>\n<div class=\"line\"><a name=\"l02272\"></a><span class=\"lineno\"> 2272</span>&#160;            <span class=\"keywordtype\">size_t</span> numBytes = </div>\n<div class=\"line\"><a name=\"l02273\"></a><span class=\"lineno\"> 2273</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l02274\"></a><span class=\"lineno\"> 2274</span>&#160;                Update.write (dataPtr, dataLen);</div>\n<div class=\"line\"><a name=\"l02275\"></a><span class=\"lineno\"> 2275</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">enableTransmit</a> (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l02276\"></a><span class=\"lineno\"> 2276</span>&#160;            totalBytes += dataLen;</div>\n<div class=\"line\"><a name=\"l02277\"></a><span class=\"lineno\"> 2277</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;%u bytes written. Total %u&quot;</span>, numBytes, totalBytes);</div>\n<div class=\"line\"><a name=\"l02278\"></a><span class=\"lineno\"> 2278</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02279\"></a><span class=\"lineno\"> 2279</span>&#160;            <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">otaError</a>) {</div>\n<div class=\"line\"><a name=\"l02280\"></a><span class=\"lineno\"> 2280</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">otaError</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02281\"></a><span class=\"lineno\"> 2281</span>&#160;                responseBuffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">control_message_type::OTA_ANS</a>;</div>\n<div class=\"line\"><a name=\"l02282\"></a><span class=\"lineno\"> 2282</span>&#160;                responseBuffer[1] = <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\">ota_status::OTA_START_ERROR</a>;</div>\n<div class=\"line\"><a name=\"l02283\"></a><span class=\"lineno\"> 2283</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (responseBuffer, 2, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>);</div>\n<div class=\"line\"><a name=\"l02284\"></a><span class=\"lineno\"> 2284</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA error. Message 0 not received&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02285\"></a><span class=\"lineno\"> 2285</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l02286\"></a><span class=\"lineno\"> 2286</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02287\"></a><span class=\"lineno\"> 2287</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02288\"></a><span class=\"lineno\"> 2288</span>&#160; </div>\n<div class=\"line\"><a name=\"l02289\"></a><span class=\"lineno\"> 2289</span>&#160;    <span class=\"keywordflow\">if</span> (msgIdx == numMsgs &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) {</div>\n<div class=\"line\"><a name=\"l02290\"></a><span class=\"lineno\"> 2290</span>&#160;        StreamString otaErrorStr;</div>\n<div class=\"line\"><a name=\"l02291\"></a><span class=\"lineno\"> 2291</span>&#160; </div>\n<div class=\"line\"><a name=\"l02292\"></a><span class=\"lineno\"> 2292</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;OTA end&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02293\"></a><span class=\"lineno\"> 2293</span>&#160;        _md5.calculate ();</div>\n<div class=\"line\"><a name=\"l02294\"></a><span class=\"lineno\"> 2294</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;OTA MD5 %s&quot;</span>, _md5.toString ().c_str ());</div>\n<div class=\"line\"><a name=\"l02295\"></a><span class=\"lineno\"> 2295</span>&#160;        _md5.getChars (md5calc);</div>\n<div class=\"line\"><a name=\"l02296\"></a><span class=\"lineno\"> 2296</span>&#160;        <span class=\"keywordflow\">if</span> (!memcmp (md5calc, md5buffer, 32)) {</div>\n<div class=\"line\"><a name=\"l02297\"></a><span class=\"lineno\"> 2297</span>&#160;            responseBuffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">control_message_type::OTA_ANS</a>;</div>\n<div class=\"line\"><a name=\"l02298\"></a><span class=\"lineno\"> 2298</span>&#160;            responseBuffer[1] = <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\">ota_status::OTA_CHECK_OK</a>;</div>\n<div class=\"line\"><a name=\"l02299\"></a><span class=\"lineno\"> 2299</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (responseBuffer, 2, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>);</div>\n<div class=\"line\"><a name=\"l02300\"></a><span class=\"lineno\"> 2300</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA MD5 check OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02301\"></a><span class=\"lineno\"> 2301</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02302\"></a><span class=\"lineno\"> 2302</span>&#160;            responseBuffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">control_message_type::OTA_ANS</a>;</div>\n<div class=\"line\"><a name=\"l02303\"></a><span class=\"lineno\"> 2303</span>&#160;            responseBuffer[1] = <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">ota_status::OTA_CHECK_FAIL</a>;</div>\n<div class=\"line\"><a name=\"l02304\"></a><span class=\"lineno\"> 2304</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (responseBuffer, 2, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>);</div>\n<div class=\"line\"><a name=\"l02305\"></a><span class=\"lineno\"> 2305</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA MD5 check failed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02306\"></a><span class=\"lineno\"> 2306</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02307\"></a><span class=\"lineno\"> 2307</span>&#160;        Serial.print (<span class=\"charliteral\">&#39;.&#39;</span>);</div>\n<div class=\"line\"><a name=\"l02308\"></a><span class=\"lineno\"> 2308</span>&#160;        <span class=\"keywordflow\">while</span> (!Update.isFinished ()) {</div>\n<div class=\"line\"><a name=\"l02309\"></a><span class=\"lineno\"> 2309</span>&#160;            Serial.print (<span class=\"charliteral\">&#39;.&#39;</span>);</div>\n<div class=\"line\"><a name=\"l02310\"></a><span class=\"lineno\"> 2310</span>&#160;            delay (100);</div>\n<div class=\"line\"><a name=\"l02311\"></a><span class=\"lineno\"> 2311</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02312\"></a><span class=\"lineno\"> 2312</span>&#160;        Serial.println ();</div>\n<div class=\"line\"><a name=\"l02313\"></a><span class=\"lineno\"> 2313</span>&#160; </div>\n<div class=\"line\"><a name=\"l02314\"></a><span class=\"lineno\"> 2314</span>&#160;        <span class=\"keywordflow\">if</span> (Update.end ()) {</div>\n<div class=\"line\"><a name=\"l02315\"></a><span class=\"lineno\"> 2315</span>&#160;            responseBuffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">control_message_type::OTA_ANS</a>;</div>\n<div class=\"line\"><a name=\"l02316\"></a><span class=\"lineno\"> 2316</span>&#160;            responseBuffer[1] = <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\">ota_status::OTA_FINISHED</a>;</div>\n<div class=\"line\"><a name=\"l02317\"></a><span class=\"lineno\"> 2317</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (responseBuffer, 2, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>);</div>\n<div class=\"line\"><a name=\"l02318\"></a><span class=\"lineno\"> 2318</span>&#160;            <span class=\"comment\">//uint8_t otaErrorCode = Update.getError ();</span></div>\n<div class=\"line\"><a name=\"l02319\"></a><span class=\"lineno\"> 2319</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA Finished OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02320\"></a><span class=\"lineno\"> 2320</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA eror code: %d&quot;</span>, Update.getError ());</div>\n<div class=\"line\"><a name=\"l02321\"></a><span class=\"lineno\"> 2321</span>&#160;            <span class=\"comment\">//ESP.restart ();</span></div>\n<div class=\"line\"><a name=\"l02322\"></a><span class=\"lineno\"> 2322</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">protectOTA</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02323\"></a><span class=\"lineno\"> 2323</span>&#160;            <span class=\"comment\">//otaRunning = false;</span></div>\n<div class=\"line\"><a name=\"l02324\"></a><span class=\"lineno\"> 2324</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">shouldRestart</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02325\"></a><span class=\"lineno\"> 2325</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">restartReason</a> = <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\">RESTART_AFTER_OTA</a>;</div>\n<div class=\"line\"><a name=\"l02326\"></a><span class=\"lineno\"> 2326</span>&#160;            <span class=\"comment\">//clearRTC ();</span></div>\n<div class=\"line\"><a name=\"l02327\"></a><span class=\"lineno\"> 2327</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; <span class=\"comment\">// Restart does not happen inmediatelly, so code goes on</span></div>\n<div class=\"line\"><a name=\"l02328\"></a><span class=\"lineno\"> 2328</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02329\"></a><span class=\"lineno\"> 2329</span>&#160;            responseBuffer[0] = <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">control_message_type::OTA_ANS</a>;</div>\n<div class=\"line\"><a name=\"l02330\"></a><span class=\"lineno\"> 2330</span>&#160;            responseBuffer[1] = <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">ota_status::OTA_CHECK_FAIL</a>;</div>\n<div class=\"line\"><a name=\"l02331\"></a><span class=\"lineno\"> 2331</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (responseBuffer, 2, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>);</div>\n<div class=\"line\"><a name=\"l02332\"></a><span class=\"lineno\"> 2332</span>&#160;            <span class=\"comment\">//uint8_t otaErrorCode = Update.getError ();</span></div>\n<div class=\"line\"><a name=\"l02333\"></a><span class=\"lineno\"> 2333</span>&#160;            Update.printError (otaErrorStr);</div>\n<div class=\"line\"><a name=\"l02334\"></a><span class=\"lineno\"> 2334</span>&#160;            otaErrorStr.trim (); <span class=\"comment\">// remove line ending</span></div>\n<div class=\"line\"><a name=\"l02335\"></a><span class=\"lineno\"> 2335</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;OTA Failed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02336\"></a><span class=\"lineno\"> 2336</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;OTA eror code: %s&quot;</span>, otaErrorStr.c_str ());</div>\n<div class=\"line\"><a name=\"l02337\"></a><span class=\"lineno\"> 2337</span>&#160;            Serial.println (<span class=\"stringliteral\">&quot;OTA failed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02338\"></a><span class=\"lineno\"> 2338</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02339\"></a><span class=\"lineno\"> 2339</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">shouldRestart</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02340\"></a><span class=\"lineno\"> 2340</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">restartReason</a> = <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\">OTA_ERROR_RESTART</a>;</div>\n<div class=\"line\"><a name=\"l02341\"></a><span class=\"lineno\"> 2341</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02342\"></a><span class=\"lineno\"> 2342</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02343\"></a><span class=\"lineno\"> 2343</span>&#160;        delay (500);</div>\n<div class=\"line\"><a name=\"l02344\"></a><span class=\"lineno\"> 2344</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Restart after OTA&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02345\"></a><span class=\"lineno\"> 2345</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">restart</a> (<a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\">RESTART_AFTER_OTA</a>);</div>\n<div class=\"line\"><a name=\"l02346\"></a><span class=\"lineno\"> 2346</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02347\"></a><span class=\"lineno\"> 2347</span>&#160; </div>\n<div class=\"line\"><a name=\"l02348\"></a><span class=\"lineno\"> 2348</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02349\"></a><span class=\"lineno\"> 2349</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02350\"></a><span class=\"lineno\"> 2350</span>&#160; </div>\n<div class=\"line\"><a name=\"l02351\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\"> 2351</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">EnigmaIOTNodeClass::restart</a> (<a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a> reason, <span class=\"keywordtype\">bool</span> reboot) {</div>\n<div class=\"line\"><a name=\"l02352\"></a><span class=\"lineno\"> 2352</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">nodeRegisterStatus</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l02353\"></a><span class=\"lineno\"> 2353</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">nodeKeyValid</a> = <span class=\"keyword\">false</span>; <span class=\"comment\">// Force resync</span></div>\n<div class=\"line\"><a name=\"l02354\"></a><span class=\"lineno\"> 2354</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l02355\"></a><span class=\"lineno\"> 2355</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02356\"></a><span class=\"lineno\"> 2356</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02357\"></a><span class=\"lineno\"> 2357</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Reset configuration data in RTC memory&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02358\"></a><span class=\"lineno\"> 2358</span>&#160;    <span class=\"comment\">// if (reboot)</span></div>\n<div class=\"line\"><a name=\"l02359\"></a><span class=\"lineno\"> 2359</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">shouldRestart</a> = reboot;</div>\n<div class=\"line\"><a name=\"l02360\"></a><span class=\"lineno\"> 2360</span>&#160;    <span class=\"keywordflow\">if</span> (reason != <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\">IRRELEVANT</a>) {</div>\n<div class=\"line\"><a name=\"l02361\"></a><span class=\"lineno\"> 2361</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">restartReason</a> = reason;</div>\n<div class=\"line\"><a name=\"l02362\"></a><span class=\"lineno\"> 2362</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02363\"></a><span class=\"lineno\"> 2363</span>&#160;    <span class=\"comment\">//ESP.restart (); </span></div>\n<div class=\"line\"><a name=\"l02364\"></a><span class=\"lineno\"> 2364</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02365\"></a><span class=\"lineno\"> 2365</span>&#160; </div>\n<div class=\"line\"><a name=\"l02366\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\"> 2366</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\">EnigmaIOTNodeClass::processControlCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <span class=\"keywordtype\">bool</span> broadcast) {</div>\n<div class=\"line\"><a name=\"l02367\"></a><span class=\"lineno\"> 2367</span>&#160; </div>\n<div class=\"line\"><a name=\"l02368\"></a><span class=\"lineno\"> 2368</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len));</div>\n<div class=\"line\"><a name=\"l02369\"></a><span class=\"lineno\"> 2369</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;%s control command&quot;</span>, broadcast ? <span class=\"stringliteral\">&quot;Broadcast&quot;</span> : <span class=\"stringliteral\">&quot;Unicast&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02370\"></a><span class=\"lineno\"> 2370</span>&#160;    <span class=\"keywordflow\">switch</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0]) {</div>\n<div class=\"line\"><a name=\"l02371\"></a><span class=\"lineno\"> 2371</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">control_message_type::VERSION</a>:</div>\n<div class=\"line\"><a name=\"l02372\"></a><span class=\"lineno\"> 2372</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\">processVersionCommand</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l02373\"></a><span class=\"lineno\"> 2373</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">control_message_type::SLEEP_GET</a>:</div>\n<div class=\"line\"><a name=\"l02374\"></a><span class=\"lineno\"> 2374</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\">processGetSleepTimeCommand</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l02375\"></a><span class=\"lineno\"> 2375</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">control_message_type::SLEEP_SET</a>:</div>\n<div class=\"line\"><a name=\"l02376\"></a><span class=\"lineno\"> 2376</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\">processSetSleepTimeCommand</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l02377\"></a><span class=\"lineno\"> 2377</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">control_message_type::IDENTIFY</a>:</div>\n<div class=\"line\"><a name=\"l02378\"></a><span class=\"lineno\"> 2378</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\">processSetIdentifyCommand</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l02379\"></a><span class=\"lineno\"> 2379</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">control_message_type::RESET</a>:</div>\n<div class=\"line\"><a name=\"l02380\"></a><span class=\"lineno\"> 2380</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\">processSetResetConfigCommand</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l02381\"></a><span class=\"lineno\"> 2381</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">control_message_type::RSSI_GET</a>:</div>\n<div class=\"line\"><a name=\"l02382\"></a><span class=\"lineno\"> 2382</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\">processGetRSSICommand</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l02383\"></a><span class=\"lineno\"> 2383</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">control_message_type::NAME_GET</a>:</div>\n<div class=\"line\"><a name=\"l02384\"></a><span class=\"lineno\"> 2384</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\">processGetNameCommand</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l02385\"></a><span class=\"lineno\"> 2385</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">control_message_type::NAME_SET</a>:</div>\n<div class=\"line\"><a name=\"l02386\"></a><span class=\"lineno\"> 2386</span>&#160;        <span class=\"keywordflow\">if</span> (!broadcast) { <span class=\"comment\">// DO NOT PROCESS BROADCAST NAME SET </span></div>\n<div class=\"line\"><a name=\"l02387\"></a><span class=\"lineno\"> 2387</span>&#160;            <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\">processSetNameCommand</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l02388\"></a><span class=\"lineno\"> 2388</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02389\"></a><span class=\"lineno\"> 2389</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02390\"></a><span class=\"lineno\"> 2390</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">control_message_type::RESTART_NODE</a>:</div>\n<div class=\"line\"><a name=\"l02391\"></a><span class=\"lineno\"> 2391</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\">processSetRestartCommand</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l02392\"></a><span class=\"lineno\"> 2392</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">control_message_type::BRCAST_KEY</a>:</div>\n<div class=\"line\"><a name=\"l02393\"></a><span class=\"lineno\"> 2393</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">processBroadcastKeyMessage</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l02394\"></a><span class=\"lineno\"> 2394</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">control_message_type::OTA</a>:</div>\n<div class=\"line\"><a name=\"l02395\"></a><span class=\"lineno\"> 2395</span>&#160;        <span class=\"keywordflow\">if</span> (!broadcast) { <span class=\"comment\">// DO NOT PROCESS BROADCAST OTA MESSAGES</span></div>\n<div class=\"line\"><a name=\"l02396\"></a><span class=\"lineno\"> 2396</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\">processOTACommand</a> (mac, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len)) {</div>\n<div class=\"line\"><a name=\"l02397\"></a><span class=\"lineno\"> 2397</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02398\"></a><span class=\"lineno\"> 2398</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02399\"></a><span class=\"lineno\"> 2399</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error processing OTA&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02400\"></a><span class=\"lineno\"> 2400</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">restart</a> (<a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\">OTA_ERROR_RESTART</a>);</div>\n<div class=\"line\"><a name=\"l02401\"></a><span class=\"lineno\"> 2401</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l02402\"></a><span class=\"lineno\"> 2402</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02403\"></a><span class=\"lineno\"> 2403</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02404\"></a><span class=\"lineno\"> 2404</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02405\"></a><span class=\"lineno\"> 2405</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02406\"></a><span class=\"lineno\"> 2406</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02407\"></a><span class=\"lineno\"> 2407</span>&#160; </div>\n<div class=\"line\"><a name=\"l02408\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\"> 2408</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">EnigmaIOTNodeClass::processBroadcastKeyMessage</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count) {</div>\n<div class=\"line\"><a name=\"l02409\"></a><span class=\"lineno\"> 2409</span>&#160;    <span class=\"keywordflow\">if</span> (!buf || count != <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> + 1) {</div>\n<div class=\"line\"><a name=\"l02410\"></a><span class=\"lineno\"> 2410</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Invalid broadcast key message. Incorrect length %d&quot;</span>, count);</div>\n<div class=\"line\"><a name=\"l02411\"></a><span class=\"lineno\"> 2411</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02412\"></a><span class=\"lineno\"> 2412</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02413\"></a><span class=\"lineno\"> 2413</span>&#160; </div>\n<div class=\"line\"><a name=\"l02414\"></a><span class=\"lineno\"> 2414</span>&#160;    <span class=\"keywordtype\">int</span> broadcastKey_idx = 1;</div>\n<div class=\"line\"><a name=\"l02415\"></a><span class=\"lineno\"> 2415</span>&#160; </div>\n<div class=\"line\"><a name=\"l02416\"></a><span class=\"lineno\"> 2416</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Broadcast key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (&amp;buf[broadcastKey_idx], <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l02417\"></a><span class=\"lineno\"> 2417</span>&#160; </div>\n<div class=\"line\"><a name=\"l02418\"></a><span class=\"lineno\"> 2418</span>&#160;    memcpy (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e\">broadcastKey</a>, &amp;buf[broadcastKey_idx], <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l02419\"></a><span class=\"lineno\"> 2419</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">broadcastKeyRequested</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02420\"></a><span class=\"lineno\"> 2420</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67\">broadcastKeyValid</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02421\"></a><span class=\"lineno\"> 2421</span>&#160; </div>\n<div class=\"line\"><a name=\"l02422\"></a><span class=\"lineno\"> 2422</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02423\"></a><span class=\"lineno\"> 2423</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02424\"></a><span class=\"lineno\"> 2424</span>&#160; </div>\n<div class=\"line\"><a name=\"l02425\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\"> 2425</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">EnigmaIOTNodeClass::processDownstreamData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <span class=\"keywordtype\">bool</span> control) {</div>\n<div class=\"line\"><a name=\"l02426\"></a><span class=\"lineno\"> 2426</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l02427\"></a><span class=\"lineno\"> 2427</span>&#160;<span class=\"comment\">    * --------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l02428\"></a><span class=\"lineno\"> 2428</span>&#160;<span class=\"comment\">    *| msgType (1) | IV (12) | length (2) | Counter (2) | NodeId (2) | Data (....) | Tag (16) |</span></div>\n<div class=\"line\"><a name=\"l02429\"></a><span class=\"lineno\"> 2429</span>&#160;<span class=\"comment\">    * --------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l02430\"></a><span class=\"lineno\"> 2430</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l02431\"></a><span class=\"lineno\"> 2431</span>&#160; </div>\n<div class=\"line\"><a name=\"l02432\"></a><span class=\"lineno\"> 2432</span>&#160;    uint8_t iv_idx = 1;</div>\n<div class=\"line\"><a name=\"l02433\"></a><span class=\"lineno\"> 2433</span>&#160;    uint8_t length_idx = iv_idx + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l02434\"></a><span class=\"lineno\"> 2434</span>&#160;    uint8_t nodeId_idx = length_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l02435\"></a><span class=\"lineno\"> 2435</span>&#160;    uint8_t counter_idx = nodeId_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l02436\"></a><span class=\"lineno\"> 2436</span>&#160;    uint8_t encoding_idx;</div>\n<div class=\"line\"><a name=\"l02437\"></a><span class=\"lineno\"> 2437</span>&#160;    uint8_t data_idx;</div>\n<div class=\"line\"><a name=\"l02438\"></a><span class=\"lineno\"> 2438</span>&#160;    <span class=\"keywordflow\">if</span> (!control) {</div>\n<div class=\"line\"><a name=\"l02439\"></a><span class=\"lineno\"> 2439</span>&#160;        encoding_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l02440\"></a><span class=\"lineno\"> 2440</span>&#160;        data_idx = encoding_idx + <span class=\"keyword\">sizeof</span> (int8_t);</div>\n<div class=\"line\"><a name=\"l02441\"></a><span class=\"lineno\"> 2441</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02442\"></a><span class=\"lineno\"> 2442</span>&#160;        data_idx = counter_idx + <span class=\"keyword\">sizeof</span> (int16_t);</div>\n<div class=\"line\"><a name=\"l02443\"></a><span class=\"lineno\"> 2443</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02444\"></a><span class=\"lineno\"> 2444</span>&#160;    uint8_t tag_idx = count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l02445\"></a><span class=\"lineno\"> 2445</span>&#160; </div>\n<div class=\"line\"><a name=\"l02446\"></a><span class=\"lineno\"> 2446</span>&#160;    uint16_t counter;</div>\n<div class=\"line\"><a name=\"l02447\"></a><span class=\"lineno\"> 2447</span>&#160;    uint16_t nodeId;</div>\n<div class=\"line\"><a name=\"l02448\"></a><span class=\"lineno\"> 2448</span>&#160;    <span class=\"keywordtype\">bool</span> broadcast = (buf[0] &amp; 0x80);</div>\n<div class=\"line\"><a name=\"l02449\"></a><span class=\"lineno\"> 2449</span>&#160; </div>\n<div class=\"line\"><a name=\"l02450\"></a><span class=\"lineno\"> 2450</span>&#160;    <span class=\"comment\">//if (broadcast) {</span></div>\n<div class=\"line\"><a name=\"l02451\"></a><span class=\"lineno\"> 2451</span>&#160;    <span class=\"comment\">//  DEBUG_WARN (&quot;Broadcast message. Type: 0x%X&quot;, buf[0]);</span></div>\n<div class=\"line\"><a name=\"l02452\"></a><span class=\"lineno\"> 2452</span>&#160;    <span class=\"comment\">//} </span></div>\n<div class=\"line\"><a name=\"l02453\"></a><span class=\"lineno\"> 2453</span>&#160; </div>\n<div class=\"line\"><a name=\"l02454\"></a><span class=\"lineno\"> 2454</span>&#160;    <span class=\"keyword\">const</span> uint8_t addDataLen = 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l02455\"></a><span class=\"lineno\"> 2455</span>&#160;    uint8_t aad[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> + addDataLen];</div>\n<div class=\"line\"><a name=\"l02456\"></a><span class=\"lineno\"> 2456</span>&#160; </div>\n<div class=\"line\"><a name=\"l02457\"></a><span class=\"lineno\"> 2457</span>&#160;    memcpy (aad, buf, addDataLen); <span class=\"comment\">// Copy message upto iv</span></div>\n<div class=\"line\"><a name=\"l02458\"></a><span class=\"lineno\"> 2458</span>&#160; </div>\n<div class=\"line\"><a name=\"l02459\"></a><span class=\"lineno\"> 2459</span>&#160;    uint8_t packetLen = count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l02460\"></a><span class=\"lineno\"> 2460</span>&#160; </div>\n<div class=\"line\"><a name=\"l02461\"></a><span class=\"lineno\"> 2461</span>&#160;    <span class=\"keywordflow\">if</span> (broadcast) {</div>\n<div class=\"line\"><a name=\"l02462\"></a><span class=\"lineno\"> 2462</span>&#160;        memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e\">broadcastKey</a> + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);  <span class=\"comment\">// Copy 8 last bytes from Node Key</span></div>\n<div class=\"line\"><a name=\"l02463\"></a><span class=\"lineno\"> 2463</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> (buf + length_idx, packetLen - 1 - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>, <span class=\"comment\">// Decrypt from nodeId</span></div>\n<div class=\"line\"><a name=\"l02464\"></a><span class=\"lineno\"> 2464</span>&#160;                                         buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l02465\"></a><span class=\"lineno\"> 2465</span>&#160;                                         <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e\">broadcastKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l02466\"></a><span class=\"lineno\"> 2466</span>&#160;                                         aad, sizeof (aad), buf + tag_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l02467\"></a><span class=\"lineno\"> 2467</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during decryption of broadcast message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02468\"></a><span class=\"lineno\"> 2468</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02469\"></a><span class=\"lineno\"> 2469</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02470\"></a><span class=\"lineno\"> 2470</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02471\"></a><span class=\"lineno\"> 2471</span>&#160;        memcpy (aad + addDataLen, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> () + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>);  <span class=\"comment\">// Copy 8 last bytes from Node Key</span></div>\n<div class=\"line\"><a name=\"l02472\"></a><span class=\"lineno\"> 2472</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> (buf + length_idx, packetLen - 1 - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>, <span class=\"comment\">// Decrypt from nodeId</span></div>\n<div class=\"line\"><a name=\"l02473\"></a><span class=\"lineno\"> 2473</span>&#160;                                         buf + iv_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a>,</div>\n<div class=\"line\"><a name=\"l02474\"></a><span class=\"lineno\"> 2474</span>&#160;                                         <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a>, <span class=\"comment\">// Use first 24 bytes of network key</span></div>\n<div class=\"line\"><a name=\"l02475\"></a><span class=\"lineno\"> 2475</span>&#160;                                         aad, sizeof (aad), buf + tag_idx, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l02476\"></a><span class=\"lineno\"> 2476</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error during decryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02477\"></a><span class=\"lineno\"> 2477</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02478\"></a><span class=\"lineno\"> 2478</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02479\"></a><span class=\"lineno\"> 2479</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02480\"></a><span class=\"lineno\"> 2480</span>&#160; </div>\n<div class=\"line\"><a name=\"l02481\"></a><span class=\"lineno\"> 2481</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Decripted downstream message: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buf, count - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l02482\"></a><span class=\"lineno\"> 2482</span>&#160; </div>\n<div class=\"line\"><a name=\"l02483\"></a><span class=\"lineno\"> 2483</span>&#160;    memcpy (&amp;nodeId, &amp;(buf[nodeId_idx]), <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l02484\"></a><span class=\"lineno\"> 2484</span>&#160; </div>\n<div class=\"line\"><a name=\"l02485\"></a><span class=\"lineno\"> 2485</span>&#160;    memcpy (&amp;counter, &amp;(buf[counter_idx]), <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l02486\"></a><span class=\"lineno\"> 2486</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Downlink msg #%d&quot;</span>, counter);</div>\n<div class=\"line\"><a name=\"l02487\"></a><span class=\"lineno\"> 2487</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>) {</div>\n<div class=\"line\"><a name=\"l02488\"></a><span class=\"lineno\"> 2488</span>&#160;        <span class=\"keywordflow\">if</span> (broadcast) {</div>\n<div class=\"line\"><a name=\"l02489\"></a><span class=\"lineno\"> 2489</span>&#160;            <span class=\"keywordflow\">if</span> (counter &gt; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">lastBroadcastMsgCounter</a>) {</div>\n<div class=\"line\"><a name=\"l02490\"></a><span class=\"lineno\"> 2490</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Accepted. Counter was %u&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">lastBroadcastMsgCounter</a>);</div>\n<div class=\"line\"><a name=\"l02491\"></a><span class=\"lineno\"> 2491</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">lastBroadcastMsgCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l02492\"></a><span class=\"lineno\"> 2492</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l02493\"></a><span class=\"lineno\"> 2493</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02494\"></a><span class=\"lineno\"> 2494</span>&#160;            <span class=\"keywordflow\">if</span> (counter &gt; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">getLastDownlinkMsgCounter</a> ()) {</div>\n<div class=\"line\"><a name=\"l02495\"></a><span class=\"lineno\"> 2495</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Accepted. Counter was %u&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">getLastDownlinkMsgCounter</a> ());</div>\n<div class=\"line\"><a name=\"l02496\"></a><span class=\"lineno\"> 2496</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">setLastDownlinkMsgCounter</a> (counter);</div>\n<div class=\"line\"><a name=\"l02497\"></a><span class=\"lineno\"> 2497</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">lastDownlinkMsgCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l02498\"></a><span class=\"lineno\"> 2498</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02499\"></a><span class=\"lineno\"> 2499</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Downlink msg rejected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02500\"></a><span class=\"lineno\"> 2500</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02501\"></a><span class=\"lineno\"> 2501</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l02502\"></a><span class=\"lineno\"> 2502</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02503\"></a><span class=\"lineno\"> 2503</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02504\"></a><span class=\"lineno\"> 2504</span>&#160; </div>\n<div class=\"line\"><a name=\"l02505\"></a><span class=\"lineno\"> 2505</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a> &amp;&amp; !<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>) { <span class=\"comment\">// RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot</span></div>\n<div class=\"line\"><a name=\"l02506\"></a><span class=\"lineno\"> 2506</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l02507\"></a><span class=\"lineno\"> 2507</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02508\"></a><span class=\"lineno\"> 2508</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02509\"></a><span class=\"lineno\"> 2509</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02510\"></a><span class=\"lineno\"> 2510</span>&#160; </div>\n<div class=\"line\"><a name=\"l02511\"></a><span class=\"lineno\"> 2511</span>&#160;    <span class=\"keywordflow\">if</span> (control) {</div>\n<div class=\"line\"><a name=\"l02512\"></a><span class=\"lineno\"> 2512</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Control command&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02513\"></a><span class=\"lineno\"> 2513</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (&amp;buf[data_idx], tag_idx - data_idx));</div>\n<div class=\"line\"><a name=\"l02514\"></a><span class=\"lineno\"> 2514</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\">processControlCommand</a> (mac, &amp;buf[data_idx], tag_idx - data_idx, broadcast);</div>\n<div class=\"line\"><a name=\"l02515\"></a><span class=\"lineno\"> 2515</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02516\"></a><span class=\"lineno\"> 2516</span>&#160; </div>\n<div class=\"line\"><a name=\"l02517\"></a><span class=\"lineno\"> 2517</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Sending data notification. Payload length: %d&quot;</span>, tag_idx - data_idx);</div>\n<div class=\"line\"><a name=\"l02518\"></a><span class=\"lineno\"> 2518</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">notifyData</a>) {</div>\n<div class=\"line\"><a name=\"l02519\"></a><span class=\"lineno\"> 2519</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">notifyData</a> (mac, &amp;buf[data_idx], tag_idx - data_idx, (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>)(buf[0]), (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>)(buf[encoding_idx]));</div>\n<div class=\"line\"><a name=\"l02520\"></a><span class=\"lineno\"> 2520</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02521\"></a><span class=\"lineno\"> 2521</span>&#160; </div>\n<div class=\"line\"><a name=\"l02522\"></a><span class=\"lineno\"> 2522</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02523\"></a><span class=\"lineno\"> 2523</span>&#160; </div>\n<div class=\"line\"><a name=\"l02524\"></a><span class=\"lineno\"> 2524</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02525\"></a><span class=\"lineno\"> 2525</span>&#160; </div>\n<div class=\"line\"><a name=\"l02526\"></a><span class=\"lineno\"> 2526</span>&#160; </div>\n<div class=\"line\"><a name=\"l02527\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\"> 2527</a></span>&#160;<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\">EnigmaIOTNodeClass::processInvalidateKey</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count) {</div>\n<div class=\"line\"><a name=\"l02528\"></a><span class=\"lineno\"> 2528</span>&#160; </div>\n<div class=\"line\"><a name=\"l02529\"></a><span class=\"lineno\"> 2529</span>&#160;    <span class=\"comment\">// TODO: Encrypt using network key, adding some random data.This is to avoid DoS attack.</span></div>\n<div class=\"line\"><a name=\"l02530\"></a><span class=\"lineno\"> 2530</span>&#160;    <span class=\"comment\">// I have to investigate if this may really work.</span></div>\n<div class=\"line\"><a name=\"l02531\"></a><span class=\"lineno\"> 2531</span>&#160;    <span class=\"comment\">// Other options: </span></div>\n<div class=\"line\"><a name=\"l02532\"></a><span class=\"lineno\"> 2532</span>&#160;    <span class=\"comment\">//    - mark message using timestamp. May not work with gateways not connected to Internet.</span></div>\n<div class=\"line\"><a name=\"l02533\"></a><span class=\"lineno\"> 2533</span>&#160;    <span class=\"comment\">//    - Adding a number calculated from node message (a byte should be sufficient).</span></div>\n<div class=\"line\"><a name=\"l02534\"></a><span class=\"lineno\"> 2534</span>&#160;    <span class=\"comment\">//           For instance nth byte + 3. Most probable candidate</span></div>\n<div class=\"line\"><a name=\"l02535\"></a><span class=\"lineno\"> 2535</span>&#160; </div>\n<div class=\"line\"><a name=\"l02536\"></a><span class=\"lineno\"> 2536</span>&#160;<span class=\"preprocessor\">#define IKMSG_LEN 2</span></div>\n<div class=\"line\"><a name=\"l02537\"></a><span class=\"lineno\"> 2537</span>&#160;    <span class=\"keywordflow\">if</span> (buf &amp;&amp; count &lt; <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">IKMSG_LEN</a>) {</div>\n<div class=\"line\"><a name=\"l02538\"></a><span class=\"lineno\"> 2538</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a>;</div>\n<div class=\"line\"><a name=\"l02539\"></a><span class=\"lineno\"> 2539</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02540\"></a><span class=\"lineno\"> 2540</span>&#160; </div>\n<div class=\"line\"><a name=\"l02541\"></a><span class=\"lineno\"> 2541</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Invalidate key request. Reason: %u&quot;</span>, buf[1]);</div>\n<div class=\"line\"><a name=\"l02542\"></a><span class=\"lineno\"> 2542</span>&#160;    uint8_t reason = buf[1];</div>\n<div class=\"line\"><a name=\"l02543\"></a><span class=\"lineno\"> 2543</span>&#160;    <span class=\"keywordflow\">if</span> (reason &lt; <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a>) {</div>\n<div class=\"line\"><a name=\"l02544\"></a><span class=\"lineno\"> 2544</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">dataMessageSentLength</a> &gt; 0)</div>\n<div class=\"line\"><a name=\"l02545\"></a><span class=\"lineno\"> 2545</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">dataMessageSendPending</a> = <span class=\"keyword\">true</span>; <span class=\"comment\">// Start last data retransmission</span></div>\n<div class=\"line\"><a name=\"l02546\"></a><span class=\"lineno\"> 2546</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02547\"></a><span class=\"lineno\"> 2547</span>&#160; </div>\n<div class=\"line\"><a name=\"l02548\"></a><span class=\"lineno\"> 2548</span>&#160;    <span class=\"keywordflow\">return</span> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>)reason;</div>\n<div class=\"line\"><a name=\"l02549\"></a><span class=\"lineno\"> 2549</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02550\"></a><span class=\"lineno\"> 2550</span>&#160; </div>\n<div class=\"line\"><a name=\"l02551\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\"> 2551</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\">EnigmaIOTNodeClass::manageMessage</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, uint8_t count) {</div>\n<div class=\"line\"><a name=\"l02552\"></a><span class=\"lineno\"> 2552</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Reveived message. Origin MAC: %02X:%02X:%02X:%02X:%02X:%02X&quot;</span>, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);</div>\n<div class=\"line\"><a name=\"l02553\"></a><span class=\"lineno\"> 2553</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Received data: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(buf), count));</div>\n<div class=\"line\"><a name=\"l02554\"></a><span class=\"lineno\"> 2554</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">flashBlue</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02555\"></a><span class=\"lineno\"> 2555</span>&#160; </div>\n<div class=\"line\"><a name=\"l02556\"></a><span class=\"lineno\"> 2556</span>&#160;    <span class=\"keywordflow\">if</span> (count &lt;= 1) {</div>\n<div class=\"line\"><a name=\"l02557\"></a><span class=\"lineno\"> 2557</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Empty message received&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02558\"></a><span class=\"lineno\"> 2558</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l02559\"></a><span class=\"lineno\"> 2559</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02560\"></a><span class=\"lineno\"> 2560</span>&#160; </div>\n<div class=\"line\"><a name=\"l02561\"></a><span class=\"lineno\"> 2561</span>&#160;    <span class=\"comment\">// All downlink messages should come from gateway</span></div>\n<div class=\"line\"><a name=\"l02562\"></a><span class=\"lineno\"> 2562</span>&#160;    <span class=\"keywordflow\">if</span> (memcmp (mac, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>-&gt;<a class=\"code\" href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">getAddressLength</a> ()) != 0) {</div>\n<div class=\"line\"><a name=\"l02563\"></a><span class=\"lineno\"> 2563</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Message doesn&#39;t come from gateway&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02564\"></a><span class=\"lineno\"> 2564</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l02565\"></a><span class=\"lineno\"> 2565</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02566\"></a><span class=\"lineno\"> 2566</span>&#160; </div>\n<div class=\"line\"><a name=\"l02567\"></a><span class=\"lineno\"> 2567</span>&#160;    <span class=\"keywordflow\">switch</span> (buf[0]) {</div>\n<div class=\"line\"><a name=\"l02568\"></a><span class=\"lineno\"> 2568</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\">SERVER_HELLO</a>:</div>\n<div class=\"line\"><a name=\"l02569\"></a><span class=\"lineno\"> 2569</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- SERVER HELLO&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02570\"></a><span class=\"lineno\"> 2570</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a> () == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">WAIT_FOR_SERVER_HELLO</a>) {</div>\n<div class=\"line\"><a name=\"l02571\"></a><span class=\"lineno\"> 2571</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\">processServerHello</a> (mac, buf, count)) {</div>\n<div class=\"line\"><a name=\"l02572\"></a><span class=\"lineno\"> 2572</span>&#160;                <span class=\"comment\">// mark node as registered</span></div>\n<div class=\"line\"><a name=\"l02573\"></a><span class=\"lineno\"> 2573</span>&#160;                <span class=\"comment\">//stopFlash (); // Do not flash during setup for less battery drain</span></div>\n<div class=\"line\"><a name=\"l02574\"></a><span class=\"lineno\"> 2574</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">setKeyValid</a> (<span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l02575\"></a><span class=\"lineno\"> 2575</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">nodeKeyValid</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02576\"></a><span class=\"lineno\"> 2576</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">setKeyValidFrom</a> (millis ());</div>\n<div class=\"line\"><a name=\"l02577\"></a><span class=\"lineno\"> 2577</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">setLastMessageCounter</a> (0);</div>\n<div class=\"line\"><a name=\"l02578\"></a><span class=\"lineno\"> 2578</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">setStatus</a> (<a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>);</div>\n<div class=\"line\"><a name=\"l02579\"></a><span class=\"lineno\"> 2579</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">nodeRegisterStatus</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l02580\"></a><span class=\"lineno\"> 2580</span>&#160; </div>\n<div class=\"line\"><a name=\"l02581\"></a><span class=\"lineno\"> 2581</span>&#160;                <span class=\"comment\">// save context to RTC memory</span></div>\n<div class=\"line\"><a name=\"l02582\"></a><span class=\"lineno\"> 2582</span>&#160;                memcpy (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">nodeKey</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l02583\"></a><span class=\"lineno\"> 2583</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">lastMessageCounter</a> = 0;</div>\n<div class=\"line\"><a name=\"l02584\"></a><span class=\"lineno\"> 2584</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">lastDownlinkMsgCounter</a> = 0;</div>\n<div class=\"line\"><a name=\"l02585\"></a><span class=\"lineno\"> 2585</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">lastControlCounter</a> = 0;</div>\n<div class=\"line\"><a name=\"l02586\"></a><span class=\"lineno\"> 2586</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">nodeId</a> = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ();</div>\n<div class=\"line\"><a name=\"l02587\"></a><span class=\"lineno\"> 2587</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Reset counters&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02588\"></a><span class=\"lineno\"> 2588</span>&#160;                <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l02589\"></a><span class=\"lineno\"> 2589</span>&#160;                    DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02590\"></a><span class=\"lineno\"> 2590</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l02591\"></a><span class=\"lineno\"> 2591</span>&#160; </div>\n<div class=\"line\"><a name=\"l02592\"></a><span class=\"lineno\"> 2592</span>&#160;                <span class=\"comment\">// request clock sync if non sleepy</span></div>\n<div class=\"line\"><a name=\"l02593\"></a><span class=\"lineno\"> 2593</span>&#160;                <span class=\"comment\">//if (!node.getSleepy () &amp;&amp; node.isRegistered ())</span></div>\n<div class=\"line\"><a name=\"l02594\"></a><span class=\"lineno\"> 2594</span>&#160;                <span class=\"comment\">//  clockRequest ();</span></div>\n<div class=\"line\"><a name=\"l02595\"></a><span class=\"lineno\"> 2595</span>&#160; </div>\n<div class=\"line\"><a name=\"l02596\"></a><span class=\"lineno\"> 2596</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= INFO</span></div>\n<div class=\"line\"><a name=\"l02597\"></a><span class=\"lineno\"> 2597</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">printToSerial</a> (&amp;<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7\">DEBUG_ESP_PORT</a>);</div>\n<div class=\"line\"><a name=\"l02598\"></a><span class=\"lineno\"> 2598</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l02599\"></a><span class=\"lineno\"> 2599</span>&#160;                <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">sendNodeNameSet</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a>)) {</div>\n<div class=\"line\"><a name=\"l02600\"></a><span class=\"lineno\"> 2600</span>&#160;                    DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending set node name %s&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a> ? <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a> : <span class=\"stringliteral\">&quot;NULL name&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02601\"></a><span class=\"lineno\"> 2601</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l02602\"></a><span class=\"lineno\"> 2602</span>&#160; </div>\n<div class=\"line\"><a name=\"l02603\"></a><span class=\"lineno\"> 2603</span>&#160;                <span class=\"comment\">// send notification to user code</span></div>\n<div class=\"line\"><a name=\"l02604\"></a><span class=\"lineno\"> 2604</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">notifyConnection</a>) {</div>\n<div class=\"line\"><a name=\"l02605\"></a><span class=\"lineno\"> 2605</span>&#160;                    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">notifyConnection</a> ();</div>\n<div class=\"line\"><a name=\"l02606\"></a><span class=\"lineno\"> 2606</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l02607\"></a><span class=\"lineno\"> 2607</span>&#160;                <span class=\"comment\">// Resend last message in case of it is still pending to be sent.</span></div>\n<div class=\"line\"><a name=\"l02608\"></a><span class=\"lineno\"> 2608</span>&#160;                <span class=\"comment\">// If key expired it was successfully sent before so retransmission is not needed </span></div>\n<div class=\"line\"><a name=\"l02609\"></a><span class=\"lineno\"> 2609</span>&#160;                <span class=\"keywordflow\">if</span> (invalidateReason &lt; KEY_EXPIRED &amp;&amp; dataMessageSentLength &gt; 0) {</div>\n<div class=\"line\"><a name=\"l02610\"></a><span class=\"lineno\"> 2610</span>&#160;                    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a> () == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a> &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">isKeyValid</a> ()) {</div>\n<div class=\"line\"><a name=\"l02611\"></a><span class=\"lineno\"> 2611</span>&#160;                        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">dataMessageSendPending</a> &amp;&amp; <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">dataMessageSentLength</a> &gt; 0) {</div>\n<div class=\"line\"><a name=\"l02612\"></a><span class=\"lineno\"> 2612</span>&#160;                            DEBUG_INFO (<span class=\"stringliteral\">&quot;Data pending to be sent. Length: %u&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">dataMessageSentLength</a>);</div>\n<div class=\"line\"><a name=\"l02613\"></a><span class=\"lineno\"> 2613</span>&#160;                            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Data sent: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">dataMessageSent</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">dataMessageSentLength</a>));</div>\n<div class=\"line\"><a name=\"l02614\"></a><span class=\"lineno\"> 2614</span>&#160;                            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">dataMessage</a> ((uint8_t*)<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">dataMessageSent</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">dataMessageSentLength</a>, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">dataMessageEncrypt</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">dataMessageSendEncoding</a>);</div>\n<div class=\"line\"><a name=\"l02615\"></a><span class=\"lineno\"> 2615</span>&#160;                            <span class=\"comment\">//dataMessageSentLength = 0;</span></div>\n<div class=\"line\"><a name=\"l02616\"></a><span class=\"lineno\"> 2616</span>&#160;                            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">dataMessageSendPending</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02617\"></a><span class=\"lineno\"> 2617</span>&#160; </div>\n<div class=\"line\"><a name=\"l02618\"></a><span class=\"lineno\"> 2618</span>&#160;                            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">flashBlue</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02619\"></a><span class=\"lineno\"> 2619</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l02620\"></a><span class=\"lineno\"> 2620</span>&#160;                    }</div>\n<div class=\"line\"><a name=\"l02621\"></a><span class=\"lineno\"> 2621</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l02622\"></a><span class=\"lineno\"> 2622</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">cycleStartedTime</a> = millis ();</div>\n<div class=\"line\"><a name=\"l02623\"></a><span class=\"lineno\"> 2623</span>&#160; </div>\n<div class=\"line\"><a name=\"l02624\"></a><span class=\"lineno\"> 2624</span>&#160; </div>\n<div class=\"line\"><a name=\"l02625\"></a><span class=\"lineno\"> 2625</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02626\"></a><span class=\"lineno\"> 2626</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l02627\"></a><span class=\"lineno\"> 2627</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l02628\"></a><span class=\"lineno\"> 2628</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02629\"></a><span class=\"lineno\"> 2629</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l02630\"></a><span class=\"lineno\"> 2630</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02631\"></a><span class=\"lineno\"> 2631</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02632\"></a><span class=\"lineno\"> 2632</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\">INVALIDATE_KEY</a>:</div>\n<div class=\"line\"><a name=\"l02633\"></a><span class=\"lineno\"> 2633</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- INVALIDATE KEY&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02634\"></a><span class=\"lineno\"> 2634</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">invalidateReason</a> = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\">processInvalidateKey</a> (mac, buf, count);</div>\n<div class=\"line\"><a name=\"l02635\"></a><span class=\"lineno\"> 2635</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">requestSearchGateway</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l02636\"></a><span class=\"lineno\"> 2636</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l02637\"></a><span class=\"lineno\"> 2637</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">lastMessageCounter</a> = 0;</div>\n<div class=\"line\"><a name=\"l02638\"></a><span class=\"lineno\"> 2638</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">lastControlCounter</a> = 0;</div>\n<div class=\"line\"><a name=\"l02639\"></a><span class=\"lineno\"> 2639</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">lastDownlinkMsgCounter</a> = 0;</div>\n<div class=\"line\"><a name=\"l02640\"></a><span class=\"lineno\"> 2640</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">lastBroadcastMsgCounter</a> = 0;</div>\n<div class=\"line\"><a name=\"l02641\"></a><span class=\"lineno\"> 2641</span>&#160;        <a class=\"code\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a>.<a class=\"code\" href=\"classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l02642\"></a><span class=\"lineno\"> 2642</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">timeSyncPeriod</a> = <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">QUICK_SYNC_TIME</a>;</div>\n<div class=\"line\"><a name=\"l02643\"></a><span class=\"lineno\"> 2643</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">notifyDisconnection</a>) {</div>\n<div class=\"line\"><a name=\"l02644\"></a><span class=\"lineno\"> 2644</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">notifyDisconnection</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">invalidateReason</a>);</div>\n<div class=\"line\"><a name=\"l02645\"></a><span class=\"lineno\"> 2645</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02646\"></a><span class=\"lineno\"> 2646</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02647\"></a><span class=\"lineno\"> 2647</span>&#160; </div>\n<div class=\"line\"><a name=\"l02648\"></a><span class=\"lineno\"> 2648</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\">DOWNSTREAM_BRCAST_DATA_SET</a>:</div>\n<div class=\"line\"><a name=\"l02649\"></a><span class=\"lineno\"> 2649</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">broadcastIsEnabled</a> ()) {</div>\n<div class=\"line\"><a name=\"l02650\"></a><span class=\"lineno\"> 2650</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02651\"></a><span class=\"lineno\"> 2651</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02652\"></a><span class=\"lineno\"> 2652</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a>:</div>\n<div class=\"line\"><a name=\"l02653\"></a><span class=\"lineno\"> 2653</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- DOWNSTREAM DATA SET&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02654\"></a><span class=\"lineno\"> 2654</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">processDownstreamData</a> (mac, buf, count)) {</div>\n<div class=\"line\"><a name=\"l02655\"></a><span class=\"lineno\"> 2655</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Downstream Data set OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02656\"></a><span class=\"lineno\"> 2656</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02657\"></a><span class=\"lineno\"> 2657</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02658\"></a><span class=\"lineno\"> 2658</span>&#160; </div>\n<div class=\"line\"><a name=\"l02659\"></a><span class=\"lineno\"> 2659</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\">DOWNSTREAM_BRCAST_DATA_GET</a>:</div>\n<div class=\"line\"><a name=\"l02660\"></a><span class=\"lineno\"> 2660</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">broadcastIsEnabled</a> ()) {</div>\n<div class=\"line\"><a name=\"l02661\"></a><span class=\"lineno\"> 2661</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02662\"></a><span class=\"lineno\"> 2662</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02663\"></a><span class=\"lineno\"> 2663</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a>:</div>\n<div class=\"line\"><a name=\"l02664\"></a><span class=\"lineno\"> 2664</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- DOWNSTREAM DATA GET&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02665\"></a><span class=\"lineno\"> 2665</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">processDownstreamData</a> (mac, buf, count)) {</div>\n<div class=\"line\"><a name=\"l02666\"></a><span class=\"lineno\"> 2666</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Downstream Data set OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02667\"></a><span class=\"lineno\"> 2667</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02668\"></a><span class=\"lineno\"> 2668</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02669\"></a><span class=\"lineno\"> 2669</span>&#160; </div>\n<div class=\"line\"><a name=\"l02670\"></a><span class=\"lineno\"> 2670</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\">DOWNSTREAM_BRCAST_CTRL_DATA</a>:</div>\n<div class=\"line\"><a name=\"l02671\"></a><span class=\"lineno\"> 2671</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">broadcastIsEnabled</a> ()) {</div>\n<div class=\"line\"><a name=\"l02672\"></a><span class=\"lineno\"> 2672</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02673\"></a><span class=\"lineno\"> 2673</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02674\"></a><span class=\"lineno\"> 2674</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\">DOWNSTREAM_CTRL_DATA</a>:</div>\n<div class=\"line\"><a name=\"l02675\"></a><span class=\"lineno\"> 2675</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- DOWNSTREAM CONTROL DATA&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02676\"></a><span class=\"lineno\"> 2676</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">processDownstreamData</a> (mac, buf, count, <span class=\"keyword\">true</span>)) {</div>\n<div class=\"line\"><a name=\"l02677\"></a><span class=\"lineno\"> 2677</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Downstream Data OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02678\"></a><span class=\"lineno\"> 2678</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02679\"></a><span class=\"lineno\"> 2679</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02680\"></a><span class=\"lineno\"> 2680</span>&#160; </div>\n<div class=\"line\"><a name=\"l02681\"></a><span class=\"lineno\"> 2681</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\">CLOCK_RESPONSE</a>:</div>\n<div class=\"line\"><a name=\"l02682\"></a><span class=\"lineno\"> 2682</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- CLOCK RESPONSE&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02683\"></a><span class=\"lineno\"> 2683</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">clockSyncEnabled</a>) {</div>\n<div class=\"line\"><a name=\"l02684\"></a><span class=\"lineno\"> 2684</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\">processClockResponse</a> (mac, buf, count)) {</div>\n<div class=\"line\"><a name=\"l02685\"></a><span class=\"lineno\"> 2685</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Clock Response OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02686\"></a><span class=\"lineno\"> 2686</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l02687\"></a><span class=\"lineno\"> 2687</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02688\"></a><span class=\"lineno\"> 2688</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02689\"></a><span class=\"lineno\"> 2689</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\">NODE_NAME_RESULT</a>:</div>\n<div class=\"line\"><a name=\"l02690\"></a><span class=\"lineno\"> 2690</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- SET NODE NAME RESULT&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02691\"></a><span class=\"lineno\"> 2691</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\">processSetNameResponse</a> (mac, buf, count)) {</div>\n<div class=\"line\"><a name=\"l02692\"></a><span class=\"lineno\"> 2692</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Set Node Name OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02693\"></a><span class=\"lineno\"> 2693</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02694\"></a><span class=\"lineno\"> 2694</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02695\"></a><span class=\"lineno\"> 2695</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\">BROADCAST_KEY_RESPONSE</a>:</div>\n<div class=\"line\"><a name=\"l02696\"></a><span class=\"lineno\"> 2696</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot; &lt;------- BROADCAST KEY MESSAGE&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02697\"></a><span class=\"lineno\"> 2697</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">processBroadcastKeyMessage</a> (mac, buf, count)) {</div>\n<div class=\"line\"><a name=\"l02698\"></a><span class=\"lineno\"> 2698</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Broadcast Key OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02699\"></a><span class=\"lineno\"> 2699</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02700\"></a><span class=\"lineno\"> 2700</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l02701\"></a><span class=\"lineno\"> 2701</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02702\"></a><span class=\"lineno\"> 2702</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02703\"></a><span class=\"lineno\"> 2703</span>&#160; </div>\n<div class=\"line\"><a name=\"l02704\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\"> 2704</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\">EnigmaIOTNodeClass::getStatus</a> (uint8_t* mac_addr, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l02705\"></a><span class=\"lineno\"> 2705</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">gatewaySearchStarted</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l02706\"></a><span class=\"lineno\"> 2706</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> == 0) {</div>\n<div class=\"line\"><a name=\"l02707\"></a><span class=\"lineno\"> 2707</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;SENDStatus OK&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02708\"></a><span class=\"lineno\"> 2708</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">commErrors</a> = 0;</div>\n<div class=\"line\"><a name=\"l02709\"></a><span class=\"lineno\"> 2709</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l02710\"></a><span class=\"lineno\"> 2710</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">commErrors</a>++;</div>\n<div class=\"line\"><a name=\"l02711\"></a><span class=\"lineno\"> 2711</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()) {</div>\n<div class=\"line\"><a name=\"l02712\"></a><span class=\"lineno\"> 2712</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving data on RTC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l02713\"></a><span class=\"lineno\"> 2713</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02714\"></a><span class=\"lineno\"> 2714</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;SENDStatus ERROR %d. Comm errors %u&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>, <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">commErrors</a>);</div>\n<div class=\"line\"><a name=\"l02715\"></a><span class=\"lineno\"> 2715</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l02716\"></a><span class=\"lineno\"> 2716</span>&#160;}</div>\n<div class=\"line\"><a name=\"l02717\"></a><span class=\"lineno\"> 2717</span>&#160; </div>\n<div class=\"line\"><a name=\"l02718\"></a><span class=\"lineno\"> 2718</span>&#160; </div>\n<div class=\"line\"><a name=\"l02719\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#aad0a67af9b0ad60557652e3170f8a2af\"> 2719</a></span>&#160;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>;</div>\n<div class=\"line\"><a name=\"l02720\"></a><span class=\"lineno\"> 2720</span>&#160; </div>\n<div class=\"line\"><a name=\"l02721\"></a><span class=\"lineno\"> 2721</span>&#160;<span class=\"comment\">//#endif</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\">OTA_CHECK_OK</a></div><div class=\"ttdeci\">@ OTA_CHECK_OK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00079\">NodeList.h:79</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a0db88323996d12342a9c60143d90c51f\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">Comms_halClass::onDataRcvd</a></div><div class=\"ttdeci\">virtual void onDataRcvd(comms_hal_rcvd_data dataRcvd)=0</div><div class=\"ttdoc\">Attach a callback function to be run on every received message.</div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\">OTA_ERROR_RESTART</a></div><div class=\"ttdeci\">@ OTA_ERROR_RESTART</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00043\">NodeList.h:43</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a238294f8ca6888e5e6000592e0955888\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">EnigmaIOTNodeClass::otaRunning</a></div><div class=\"ttdeci\">bool otaRunning</div><div class=\"ttdoc\">True if OTA update has started.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00154\">EnigmaIOTNode.h:154</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a55883c161c22f5182fc40f97a84a5da6\"><div class=\"ttname\"><a href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a></div><div class=\"ttdeci\">static bool decryptBuffer(const uint8_t *data, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</div><div class=\"ttdoc\">Decrypts a buffer using a shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00052\">cryptModule.cpp:52</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\">CLOCK_RESPONSE</a></div><div class=\"ttdeci\">@ CLOCK_RESPONSE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00051\">EnigmaIOTGateway.h:51</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2984b66fdb8a831c9c7cbf775afc82b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">EnigmaIOTNodeClass::notifyWiFiManagerExit</a></div><div class=\"ttdeci\">onWiFiManagerExit_t notifyWiFiManagerExit</div><div class=\"ttdoc\">Function called when configuration portal exits.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00170\">EnigmaIOTNode.h:170</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a68eac7f22f879dbe7bb1dec0615c5ce9\"><div class=\"ttname\"><a href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">Node::setLastDownlinkMsgCounter</a></div><div class=\"ttdeci\">void setLastDownlinkMsgCounter(uint16_t counter)</div><div class=\"ttdoc\">Sets counter for last downlink message from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00258\">NodeList.h:258</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a70fa9cce1a3080b3e946783a791363d6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">EnigmaIOTNodeClass::otaError</a></div><div class=\"ttdeci\">bool otaError</div><div class=\"ttdoc\">True if OTA update has failed. This normally produces a restart.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00155\">EnigmaIOTNode.h:155</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_aefc84d57eee3eceeadc3611866925804\"><div class=\"ttname\"><a href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">CryptModule::getPubDHKey</a></div><div class=\"ttdeci\">uint8_t * getPubDHKey()</div><div class=\"ttdoc\">Gets own public key used on Diffie Hellman algorithm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00136\">cryptModule.h:136</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a5c188f7db5bdde5837a02e4095c3b549\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">EnigmaIOTNodeClass::notifyData</a></div><div class=\"ttdeci\">onNodeDataRx_t notifyData</div><div class=\"ttdoc\">Callback that will be called on every message reception.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00141\">EnigmaIOTNode.h:141</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">VERSION_ANS</a></div><div class=\"ttdeci\">@ VERSION_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00053\">NodeList.h:53</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">IDENTIFY</a></div><div class=\"ttdeci\">@ IDENTIFY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00057\">NodeList.h:57</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_aeb4681294ade5149d1db83df99744f6e\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e\">OTA_TIMEOUT_TIME</a></div><div class=\"ttdeci\">static const uint32_t OTA_TIMEOUT_TIME</div><div class=\"ttdoc\">Timeout between OTA messages. In milliseconds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00046\">EnigmaIoTconfigAdvanced.h:46</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ab35d557fff42f0a565ee2cae63d86140\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">EnigmaIOTNodeClass::unixtime</a></div><div class=\"ttdeci\">time_t unixtime()</div><div class=\"ttdoc\">Gets current time in seconds from 1970, if time is synchronized.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01460\">EnigmaIOTNode.cpp:1460</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a7068191735c2fb154c857fc80660adc0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">EnigmaIOTNodeClass::protectOTA</a></div><div class=\"ttdeci\">bool protectOTA</div><div class=\"ttdoc\">True if OTA update was launched. OTA flag is stored on RTC so this disables writting.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00156\">EnigmaIOTNode.h:156</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae7d5f900dd1290910a30692175dc8e23\"><div class=\"ttname\"><a href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">Node::setLastMessageTime</a></div><div class=\"ttdeci\">void setLastMessageTime()</div><div class=\"ttdoc\">Sets current moment as last node message time.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00210\">NodeList.h:210</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_ab043ae3361d34921f36d7d0189c058d1\"><div class=\"ttname\"><a href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">CryptModule::getDH1</a></div><div class=\"ttdeci\">void getDH1()</div><div class=\"ttdoc\">Starts first stage of Diffie Hellman key agreement algorithm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00141\">cryptModule.cpp:141</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">SLEEP_SET</a></div><div class=\"ttdeci\">@ SLEEP_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00055\">NodeList.h:55</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a51e4759aa03af09b8a614efa1b6b5cb2\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">rtcmem_data_t::nodeKey</a></div><div class=\"ttdeci\">uint8_t nodeKey[KEY_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00091\">EnigmaIOTNode.h:91</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">RESTART_NODE</a></div><div class=\"ttdeci\">@ RESTART_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00065\">NodeList.h:65</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_af9e7c0a7f49a26a8ad8cbba8ad4a8481\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">rtcmem_data_t::nodeId</a></div><div class=\"ttdeci\">uint16_t nodeId</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00092\">EnigmaIOTNode.h:92</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a1c015860a4a1650d3e2653212d13179e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">EnigmaIOTNodeClass::hasClockSync</a></div><div class=\"ttdeci\">bool hasClockSync()</div><div class=\"ttdoc\">Checks if internal clock is synchronized to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01464\">EnigmaIOTNode.cpp:1464</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a2abc91bcf729ee1eb44985df9d3086a9\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">rtcmem_data_t::commErrors</a></div><div class=\"ttdeci\">uint8_t commErrors</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00101\">EnigmaIOTNode.h:101</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a2e80e7a8216a26293d66f1e35829df71\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a></div><div class=\"ttdeci\">const uint8_t TAG_LENGTH</div><div class=\"ttdoc\">Authentication tag length. For Poly1305 it is always 16.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00072\">EnigmaIoTconfigAdvanced.h:72</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_aa0f566187583d3b10a7feb1a160897fd\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">rtcmem_data_t::networkKey</a></div><div class=\"ttdeci\">uint8_t networkKey[KEY_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00096\">EnigmaIOTNode.h:96</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a393acd5ba5c49031b3c827f7cbce37fa\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">Comms_halClass::onDataSent</a></div><div class=\"ttdeci\">virtual void onDataSent(comms_hal_sent_data dataRcvd)=0</div><div class=\"ttdoc\">Attach a callback function to be run after sending a message to receive its status.</div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_abd99b41fe33ab80d442f95bb7fc5419e\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e\">rtcmem_data_t::broadcastKey</a></div><div class=\"ttdeci\">uint8_t broadcastKey[KEY_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00104\">EnigmaIOTNode.h:104</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\">NODE_NAME_SET</a></div><div class=\"ttdeci\">@ NODE_NAME_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00052\">EnigmaIOTGateway.h:52</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a31c7b1dce5c26d81ead2cabf5395d935\"><div class=\"ttname\"><a href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">Node::setNodeName</a></div><div class=\"ttdeci\">void setNodeName(const char *name)</div><div class=\"ttdoc\">Sets Node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00164\">NodeList.h:164</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a0ba442d3c51787bb5b9f1a8be7107517\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">rtcmem_data_t::gateway</a></div><div class=\"ttdeci\">uint8_t gateway[ENIGMAIOT_ADDR_LEN]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00094\">EnigmaIOTNode.h:94</a></div></div>\n<div class=\"ttc\" id=\"atimeManager_8h_html\"><div class=\"ttname\"><a href=\"timeManager_8h.html\">timeManager.h</a></div><div class=\"ttdoc\">Clock synchronisation calculations.</div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a52790ace85f8a18dcbd7fceb5ab49af0\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">TimeManagerClass::clock_us</a></div><div class=\"ttdeci\">int64_t clock_us()</div><div class=\"ttdoc\">Gets local clock.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00023\">timeManager.cpp:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a27132ec0215933e4201ee048b43916a5\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5\">IDENTIFY_TIMEOUT</a></div><div class=\"ttdeci\">static const time_t IDENTIFY_TIMEOUT</div><div class=\"ttdoc\">How long LED will be flashing during identification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00042\">EnigmaIoTconfig.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a1ddc7fce5233d3959cfb52dd3c7f605c\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\">EnigmaIOTNodeClass::clientHello</a></div><div class=\"ttdeci\">bool clientHello()</div><div class=\"ttdoc\">Build a ClientHello messange and send it to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01192\">EnigmaIOTNode.cpp:1192</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_a2bd3dd6873079bda9c22994760e817dc\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">CHMSG_LEN</a></div><div class=\"ttdeci\">#define CHMSG_LEN</div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a7590c6b11a260ca766a2ad46f2b0cf27\"><div class=\"ttname\"><a href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">Node::setStatus</a></div><div class=\"ttdeci\">void setStatus(status_t status)</div><div class=\"ttdoc\">Sets status for finite state machine that represents node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00308\">NodeList.h:308</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a1b7f86efd799761dead77fcccf036d1d\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">Comms_halClass::begin</a></div><div class=\"ttdeci\">virtual void begin(uint8_t *gateway, uint8_t channel, peerType_t peerType=COMM_NODE)=0</div><div class=\"ttdoc\">Setup communication environment and establish the connection from node to gateway.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ad7a98adabe272649c3c65efd1c2cfe45\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">EnigmaIOTNodeClass::searchForGateway</a></div><div class=\"ttdeci\">bool searchForGateway(rtcmem_data_t *data, bool shouldStoreData=false)</div><div class=\"ttdoc\">Starts searching for a gateway that it using configured Network Name as WiFi AP. Stores this info for...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00860\">EnigmaIOTNode.cpp:860</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a025eed5564c31f411fc6950a5ecd4c40\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NODE_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00025\">EnigmaIoTconfigAdvanced.h:25</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_ad22aae6146b9da40aa95e2acfe12f6d3\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3\">initWiFi</a></div><div class=\"ttdeci\">void initWiFi(uint8_t channel, const char *networkName, const char *networkKey, uint8_t role)</div><div class=\"ttdoc\">Initalizes WiFi interfaces on ESP8266 or ESP32.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00032\">helperFunctions.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aa382c421546fc99b22b4698acb36c3d8\"><div class=\"ttname\"><a href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">Node::isKeyValid</a></div><div class=\"ttdeci\">bool isKeyValid()</div><div class=\"ttdoc\">Gets shared key validity for this node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00276\">NodeList.h:276</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a416d8a7660d1eaa85422247e9e918781\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">EnigmaIOTNodeClass::led</a></div><div class=\"ttdeci\">int8_t led</div><div class=\"ttdoc\">IO Pin that corresponds to Tx LED. Default value disables LED. It is initialized with setLed method.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00138\">EnigmaIOTNode.h:138</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a3621fd27cee1a28145a7daa167ad0b3d\"><div class=\"ttname\"><a href=\"classNode.html#a3621fd27cee1a28145a7daa167ad0b3d\">Node::setInitAsSleepy</a></div><div class=\"ttdeci\">void setInitAsSleepy(bool sleepy)</div><div class=\"ttdoc\">Records if node started as a sleepy node or not. If it did not started so it will never accept sleep ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00346\">NodeList.h:346</a></div></div>\n<div class=\"ttc\" id=\"atimeManager_8cpp_html_aa2f15646607c9908039f67741ccbab58\"><div class=\"ttname\"><a href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a></div><div class=\"ttdeci\">TimeManagerClass TimeManager</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00065\">timeManager.cpp:65</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\">DOWNSTREAM_BRCAST_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_BRCAST_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00045\">EnigmaIOTGateway.h:45</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a461dd5c9def2768c3c4b87cfc9be6ef8\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">EnigmaIOTNodeClass::checkCRC</a></div><div class=\"ttdeci\">bool checkCRC(const uint8_t *buf, size_t count, uint32_t *crc)</div><div class=\"ttdoc\">Check that a given CRC matches to calulated value from a buffer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01182\">EnigmaIOTNode.cpp:1182</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a3615b98da7f0ea0d8615a8f45519a715\"><div class=\"ttname\"><a href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">Node::setNodeId</a></div><div class=\"ttdeci\">void setNodeId(uint16_t nodeId)</div><div class=\"ttdoc\">Sets a new Node identifier.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00144\">NodeList.h:144</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_ae90dfe037c5e9b1a6804f0292c28bddc\"><div class=\"ttname\"><a href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a></div><div class=\"ttdeci\">static bool encryptBuffer(const uint8_t *data, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</div><div class=\"ttdoc\">Decrypts a buffer using a shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00086\">cryptModule.cpp:86</a></div></div>\n<div class=\"ttc\" id=\"acryptModule_8cpp_html_a2f63b7a310b37c1127e7b8cfcbb5eb22\"><div class=\"ttname\"><a href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a></div><div class=\"ttdeci\">CryptModule Crypto</div><div class=\"ttdoc\">Singleton Crypto class instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00167\">cryptModule.cpp:167</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae6768d968b8f72fb12001fa3895a4670\"><div class=\"ttname\"><a href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">Node::broadcastIsEnabled</a></div><div class=\"ttdeci\">bool broadcastIsEnabled()</div><div class=\"ttdoc\">Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted b...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00373\">NodeList.h:373</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a02961b325403161b54533152d242696a\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a></div><div class=\"ttdeci\">uint8_t * str2mac(const char *macAddrString, uint8_t *macBytes)</div><div class=\"ttdoc\">Debug helper function that creates MAC address byte array from text representation.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00104\">helperFunctions.cpp:104</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_a0bf0b548fcfd9b0089f62fda8fff81aa\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">nodeConnectionLedFlashing</a></div><div class=\"ttdeci\">bool nodeConnectionLedFlashing</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00037\">EnigmaIOTNode.cpp:37</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_ac51f1bac4386e3aeb8c2e4fc10577615\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615\">TimeManagerClass::isTimeAdjusted</a></div><div class=\"ttdeci\">bool isTimeAdjusted()</div><div class=\"ttdoc\">Gets synchronization status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00067\">timeManager.h:67</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">BRCAST_KEY</a></div><div class=\"ttdeci\">@ BRCAST_KEY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00067\">NodeList.h:67</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a13270bdeee8b5e7569609fcc9045a27b\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b\">rtcmem_data_t::rssi</a></div><div class=\"ttdeci\">int8_t rssi</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00095\">EnigmaIOTNode.h:95</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a4efeeca90488a14e95283c31d70ee0e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\">EnigmaIOTNodeClass::rx_cb</a></div><div class=\"ttdeci\">static void rx_cb(uint8_t *mac_addr, uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Function that will be called anytime this node receives a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01174\">EnigmaIOTNode.cpp:1174</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aa632927a0a9da18d3605e29aa3a055f2\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\">EnigmaIOTNodeClass::processOTACommand</a></div><div class=\"ttdeci\">bool processOTACommand(const uint8_t *mac, const uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Processes a single OTA update command or data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02181\">EnigmaIOTNode.cpp:2181</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a09782f9f3ca09d7fd79b8b70e130a206\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">EnigmaIOTNodeClass::dataMessage</a></div><div class=\"ttdeci\">bool dataMessage(const uint8_t *data, size_t len, dataMessageType_t dataMsgType=DATA_TYPE, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Builds, encrypts and sends a Data message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01635\">EnigmaIOTNode.cpp:1635</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a6432011ed34012e55d393bfd0c99219e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">EnigmaIOTNodeClass::setSleepTime</a></div><div class=\"ttdeci\">void setSleepTime(uint32_t sleepTime, bool forceSleepForever=false)</div><div class=\"ttdoc\">Allows to configure a new sleep time period from user code.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00948\">EnigmaIOTNode.cpp:948</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ab348fec65af29c28ebc8c1a342e3b241\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\">EnigmaIOTNodeClass::processSetSleepTimeCommand</a></div><div class=\"ttdeci\">bool processSetSleepTimeCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request to set new sleep time configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02118\">EnigmaIOTNode.cpp:2118</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a700642be35601636c1af04d831f177c5\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5\">COMM_ERRORS_BEFORE_SCAN</a></div><div class=\"ttdeci\">static const uint8_t COMM_ERRORS_BEFORE_SCAN</div><div class=\"ttdoc\">Node will search for a gateway if this number of communication errors have happened.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00051\">EnigmaIoTconfig.h:51</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a9c45ffb63a64a645032b9c132f86c821\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a></div><div class=\"ttdeci\">static const uint8_t ENIGMAIOT_PROT_VERS[3]</div><div class=\"ttdoc\">EnitmaIoT Version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00016\">EnigmaIoTconfig.h:16</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a32a98693bfc71a16f8f3c6db7053221c\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\">EnigmaIOTNodeClass::processGetNameCommand</a></div><div class=\"ttdeci\">bool processGetNameCommand(const uint8_t *mac, const uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Processes a request to get Node name and address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01795\">EnigmaIOTNode.cpp:1795</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a5509b838b2b813cc5b4bce9436c825b5\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5\">TimeManagerClass::unixtime</a></div><div class=\"ttdeci\">time_t unixtime()</div><div class=\"ttdoc\">Gets local clock in seconds. It returns millis() / 1000 if not synchronized, local clock otherwise....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00040\">timeManager.h:40</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a22c20e35a06410f1060c11ef669ab96a\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">rtcmem_data_t::crc32</a></div><div class=\"ttdeci\">uint32_t crc32</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00090\">EnigmaIOTNode.h:90</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a3da4f4369bb769b62d742990cf7aab67\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67\">rtcmem_data_t::broadcastKeyValid</a></div><div class=\"ttdeci\">bool broadcastKeyValid</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00105\">EnigmaIOTNode.h:105</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afa97e9b5f9e73702c545a5e7b4c2c15f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">EnigmaIOTNodeClass::clearRTC</a></div><div class=\"ttdeci\">void clearRTC()</div><div class=\"ttdoc\">Clears configuration stored in RTC memory to recover factory state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02093\">EnigmaIOTNode.cpp:2093</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a55aa8affe03e929129ee30ac33c954c5\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">EnigmaIOTNodeClass::sendRestart</a></div><div class=\"ttdeci\">void sendRestart()</div><div class=\"ttdoc\">Sends a restart notification control message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00056\">EnigmaIOTNode.cpp:56</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a339f610c808ea5b39ccc9ca462269cf2\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">TimeManagerClass::adjustTime</a></div><div class=\"ttdeci\">int64_t adjustTime(int64_t t1r, int64_t t2r, int64_t t3r, int64_t t4r)</div><div class=\"ttdoc\">Gets delay between Gateway time and local clock and adjust local clock accordingly....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00034\">timeManager.cpp:34</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_a80700bb63bd56ebabbb4728aa433fd29\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a></div><div class=\"ttdeci\">#define LED_OFF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00040\">enigmaiot_led_flasher.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">OTA</a></div><div class=\"ttdeci\">@ OTA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00068\">NodeList.h:68</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2cf188fbd1d22775605eea93ed561a53\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">EnigmaIOTNodeClass::checkResetButton</a></div><div class=\"ttdeci\">void checkResetButton()</div><div class=\"ttdoc\">Checks reset button status during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00674\">EnigmaIOTNode.cpp:674</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9865adf18595ebc6eb73154e6267380e\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NETWORK_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00024\">EnigmaIoTconfigAdvanced.h:24</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_ab9b144ebcf09f24dd9b85f95e6d118d0\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">SHMSG_LEN</a></div><div class=\"ttdeci\">#define SHMSG_LEN</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_ae79c9303923c11f39edb388b32d4646b\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#ae79c9303923c11f39edb388b32d4646b\">startFlash</a></div><div class=\"ttdeci\">void startFlash(time_t period)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00627\">EnigmaIOTNode.cpp:627</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\">RESTART_CONFIRM</a></div><div class=\"ttdeci\">@ RESTART_CONFIRM</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00066\">NodeList.h:66</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a6be31758c99161d257bf66a6a809047d\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d\">MIN_SYNC_ACCURACY</a></div><div class=\"ttdeci\">static const int MIN_SYNC_ACCURACY</div><div class=\"ttdoc\">If calculated offset absolute value is higher than this value resync is done more often....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00047\">EnigmaIoTconfigAdvanced.h:47</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">RESET</a></div><div class=\"ttdeci\">@ RESET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00058\">NodeList.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a5bf02d202c9cb76831de89e4d1ef8893\"><div class=\"ttname\"><a href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">Node::getSleepy</a></div><div class=\"ttdeci\">bool getSleepy()</div><div class=\"ttdoc\">Gets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sl...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00363\">NodeList.h:363</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00044\">EnigmaIOTGateway.h:44</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aea10660384ee02f0e6cf1aa3f1786144\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">EnigmaIOTNodeClass::resetPin</a></div><div class=\"ttdeci\">int resetPin</div><div class=\"ttdoc\">Pin used to reset configuration if it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00168\">EnigmaIOTNode.h:168</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a81ded601038e157ecb03daa7fb85242d\"><div class=\"ttname\"><a href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">Node::setKeyValid</a></div><div class=\"ttdeci\">void setKeyValid(bool status)</div><div class=\"ttdoc\">Sets shared key validity for this node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00284\">NodeList.h:284</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\">OTA_TIMEOUT</a></div><div class=\"ttdeci\">@ OTA_TIMEOUT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00082\">NodeList.h:82</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a1e12d39c7745876a5391182975e32a8d\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">rtcmem_data_t::lastDownlinkMsgCounter</a></div><div class=\"ttdeci\">uint16_t lastDownlinkMsgCounter</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00110\">EnigmaIOTNode.h:110</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a4c9590d8531f7da5643983f5519d40a9\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">EnigmaIOTNodeClass::notifyWiFiManagerStarted</a></div><div class=\"ttdeci\">simpleEventHandler_t notifyWiFiManagerStarted</div><div class=\"ttdoc\">Function called when configuration portal is started.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00171\">EnigmaIOTNode.h:171</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00042\">EnigmaIOTGateway.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a9d5665e7dfd598c618e5388b07271bb1\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">EnigmaIOTNodeClass::requestReportRSSI</a></div><div class=\"ttdeci\">bool requestReportRSSI</div><div class=\"ttdoc\">Flag to control RSSI reporting.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00166\">EnigmaIOTNode.h:166</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a2f387a44ed85c58ad43c40dbc632699c\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c\">TIME_SYNC_PERIOD</a></div><div class=\"ttdeci\">static const uint32_t TIME_SYNC_PERIOD</div><div class=\"ttdoc\">Period of clock synchronization request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00044\">EnigmaIoTconfig.h:44</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">RSSI_GET</a></div><div class=\"ttdeci\">@ RSSI_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00060\">NodeList.h:60</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a3e3e9744eef70673aaae93c27f4b0218\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">EnigmaIOTNodeClass::restartReason</a></div><div class=\"ttdeci\">restartReason_t restartReason</div><div class=\"ttdoc\">Reason of restart (OTA, restart requested, configuration reset)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00163\">EnigmaIOTNode.h:163</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aa2a4910739da2e9181f2274cbc4d078a\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">EnigmaIOTNodeClass::indentifying</a></div><div class=\"ttdeci\">boolean indentifying</div><div class=\"ttdoc\">True if node has its led flashing to be identified.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00158\">EnigmaIOTNode.h:158</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acd0424de61195d76ff09a7462d539d7e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\">EnigmaIOTNodeClass::processSetNameResponse</a></div><div class=\"ttdeci\">bool processSetNameResponse(const uint8_t *mac, const uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Processes a response to set Node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01829\">EnigmaIOTNode.cpp:1829</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a6d12566cf69b6429f5cce300ab1f39c9\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a></div><div class=\"ttdeci\">enum node_status status_t</div><div class=\"ttdoc\">Node state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00001\">NodeList.h:39</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a4be66e40b4882a486cf8ee80a4277438\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">EnigmaIOTNodeClass::flashBlue</a></div><div class=\"ttdeci\">bool flashBlue</div><div class=\"ttdoc\">If true Tx LED will be flashed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00137\">EnigmaIOTNode.h:137</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a></div><div class=\"ttdeci\">dataMessageType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00068\">EnigmaIOTNode.h:68</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a6172f9eb39a02f01b692a53b9ee09c56\"><div class=\"ttname\"><a href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">Node::getStatus</a></div><div class=\"ttdeci\">status_t getStatus()</div><div class=\"ttdoc\">Gets status for finite state machine that represents node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00300\">NodeList.h:300</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\">OTA_START_ERROR</a></div><div class=\"ttdeci\">@ OTA_START_ERROR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00078\">NodeList.h:78</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\">OTA_FINISHED</a></div><div class=\"ttdeci\">@ OTA_FINISHED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00084\">NodeList.h:83</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a78e9abdac15a5ff7bfd409fc13fa6b54\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">rtcmem_data_t::sleepTime</a></div><div class=\"ttdeci\">uint32_t sleepTime</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00099\">EnigmaIOTNode.h:99</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a0144b183ee216aa5b977086ae1753d3c\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">EnigmaIOTNodeClass::getSleepTime</a></div><div class=\"ttdeci\">uint32_t getSleepTime()</div><div class=\"ttdoc\">Returns sleep period in seconds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00077\">EnigmaIOTNode.cpp:77</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a2563f7f556d09035dbbf042656d4fa3a\"><div class=\"ttname\"><a href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">Node::getNodeId</a></div><div class=\"ttdeci\">uint16_t getNodeId()</div><div class=\"ttdoc\">Gets Node identifier.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00136\">NodeList.h:136</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a59484fb7e3490df6600b5add60badbb7\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7\">DEBUG_ESP_PORT</a></div><div class=\"ttdeci\">#define DEBUG_ESP_PORT</div><div class=\"ttdoc\">Stream to output debug info. It will normally be Serial</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00058\">EnigmaIoTconfig.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a15877a320c33f77402c5700774d936cc\"><div class=\"ttname\"><a href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">Node::getLastMessageTime</a></div><div class=\"ttdeci\">time_t getLastMessageTime()</div><div class=\"ttdoc\">Gets last time that node sent a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00203\">NodeList.h:203</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a65284f939ba9d70cff90e7e508ac1a13\"><div class=\"ttname\"><a href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">Node::setKeyValidFrom</a></div><div class=\"ttdeci\">void setKeyValidFrom(time_t keyValidFrom)</div><div class=\"ttdoc\">Sets time when key was agreed with gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00195\">NodeList.h:195</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">INIT</a></div><div class=\"ttdeci\">@ INIT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00025\">NodeList.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a2d876405390237c8cbbd4689fb2f960b\"><div class=\"ttname\"><a href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">Node::setLastControlCounter</a></div><div class=\"ttdeci\">void setLastControlCounter(uint16_t counter)</div><div class=\"ttdoc\">Sets counter for last received control message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00250\">NodeList.h:250</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a7fca29c7cd9cba0115ec42566250275d\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">EnigmaIOTNodeClass::comm</a></div><div class=\"ttdeci\">Comms_halClass * comm</div><div class=\"ttdoc\">Comms abstraction layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00140\">EnigmaIOTNode.h:140</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\">DOWNSTREAM_CTRL_DATA</a></div><div class=\"ttdeci\">@ DOWNSTREAM_CTRL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00047\">EnigmaIOTGateway.h:47</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\">RSSI_ANS</a></div><div class=\"ttdeci\">@ RSSI_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00061\">NodeList.h:61</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a3d6b6cce8aa2484af80617db10da4ea4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">EnigmaIOTNodeClass::dataMessageSent</a></div><div class=\"ttdeci\">uint8_t dataMessageSent[MAX_MESSAGE_LENGTH]</div><div class=\"ttdoc\">Buffer where sent message is stored in case of retransmission is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00148\">EnigmaIOTNode.h:148</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></div><div class=\"ttdeci\">@ DATA_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00069\">EnigmaIOTNode.h:69</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a0bc27edb1340a28f92b43dd4f91e9a16\"><div class=\"ttname\"><a href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a></div><div class=\"ttdeci\">static uint8_t * getSHA256(uint8_t *buffer, uint8_t length)</div><div class=\"ttdoc\">Generates a SHA256 hash from input.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00020\">cryptModule.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a195293f46d7c371ed61bbcdcf6d8340a\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a\">TimeManagerClass::getDelay</a></div><div class=\"ttdeci\">int64_t getDelay()</div><div class=\"ttdoc\">Gets propagation + processing delay between Node and Gateway in milliseconds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00075\">timeManager.h:75</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a04a1d59adae7dc0786ac6e066c5d1263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\">EnigmaIOTNodeClass::processSetIdentifyCommand</a></div><div class=\"ttdeci\">bool processSetIdentifyCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request to start indicate to identify a node visually.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02033\">EnigmaIOTNode.cpp:2033</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a10d221c32311c32d19d670a68044aca4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">EnigmaIOTNodeClass::timeSyncPeriod</a></div><div class=\"ttdeci\">clock_t timeSyncPeriod</div><div class=\"ttdoc\">Clock synchronization period.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00160\">EnigmaIOTNode.h:160</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a1d62eaa08920568f019ef240dd98dc3b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\">EnigmaIOTNodeClass::clockRequest</a></div><div class=\"ttdeci\">bool clockRequest()</div><div class=\"ttdoc\">Build a ClockRequest messange and send it to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01291\">EnigmaIOTNode.cpp:1291</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">SLEEP_GET</a></div><div class=\"ttdeci\">@ SLEEP_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00054\">NodeList.h:54</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\">CONTROL_DATA</a></div><div class=\"ttdeci\">@ CONTROL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00046\">EnigmaIOTGateway.h:46</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_ad072ccb795ca00a2cc374f3ce7bd5d55\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#ad072ccb795ca00a2cc374f3ce7bd5d55\">stopFlash</a></div><div class=\"ttdeci\">void stopFlash()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00647\">EnigmaIOTNode.cpp:647</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a81ab5be7b67c28948ea5de40e5d3c360\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a></div><div class=\"ttdeci\">void sleep()</div><div class=\"ttdoc\">Requests transition to sleep mode (low energy state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01564\">EnigmaIOTNode.cpp:1564</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a3a00052a511fa3b63de7e280320b1ef9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a></div><div class=\"ttdeci\">const uint8_t AAD_LENGTH</div><div class=\"ttdoc\">Number of bytes from last part of key that will be used for additional authenticated data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00073\">EnigmaIoTconfigAdvanced.h:73</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\">NAME_OK</a></div><div class=\"ttdeci\">@ NAME_OK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00033\">NodeList.h:33</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a3c807080f0701745c68182181677a98d\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\">EnigmaIOTNodeClass::processSetResetConfigCommand</a></div><div class=\"ttdeci\">bool processSetResetConfigCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request to reset node configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02059\">EnigmaIOTNode.cpp:2059</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae1a2a8c747a1af2e7d9467ae9199edd7\"><div class=\"ttname\"><a href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">Node::setSleepy</a></div><div class=\"ttdeci\">void setSleepy(bool sleepy)</div><div class=\"ttdoc\">Sets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sl...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00334\">NodeList.h:334</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a3e50f907a24843d7752e81664e28fde9\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\">EnigmaIOTNodeClass::tx_cb</a></div><div class=\"ttdeci\">static void tx_cb(uint8_t *mac_addr, uint8_t status)</div><div class=\"ttdoc\">Function that will be called anytime this node sends a message to indicate status result of sending p...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01178\">EnigmaIOTNode.cpp:1178</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a></div><div class=\"ttdeci\">@ SENSOR_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00039\">EnigmaIOTGateway.h:39</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a777ffbcfe25563aae4ddbb77bdca4fc0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\">EnigmaIOTNodeClass::processServerHello</a></div><div class=\"ttdeci\">bool processServerHello(const uint8_t *mac, const uint8_t *buf, size_t count)</div><div class=\"ttdoc\">Gets a buffer containing a ServerHello message and process it. It uses that message to calculate a sh...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01471\">EnigmaIOTNode.cpp:1471</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_a4dcb9645090920f31f391adcd5b3850c\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">dumpRtcData</a></div><div class=\"ttdeci\">void dumpRtcData(rtcmem_data_t *data, uint8_t *gateway=NULL)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00113\">EnigmaIOTNode.cpp:113</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a446963c57800cd34607bcc6fa1e933e9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">QUICK_SYNC_TIME</a></div><div class=\"ttdeci\">static const unsigned int QUICK_SYNC_TIME</div><div class=\"ttdoc\">Period of clock synchronization request in case of resync is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00046\">EnigmaIoTconfig.h:46</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_aceff31e0cac1b5d0ca7895e8379c7fd4\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">rtcmem_data_t::channel</a></div><div class=\"ttdeci\">uint8_t channel</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00093\">EnigmaIOTNode.h:93</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_ae441a9d80bb39bdc39aee158a5d9f114\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">rtcmem_data_t::lastMessageCounter</a></div><div class=\"ttdeci\">uint16_t lastMessageCounter</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00108\">EnigmaIOTNode.h:108</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a531eee8dc001da6f1f1393c1cc632b09\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">EnigmaIOTNodeClass::clearFlash</a></div><div class=\"ttdeci\">void clearFlash()</div><div class=\"ttdoc\">Clears configuration stored in flash to recover factory state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00464\">EnigmaIOTNode.cpp:464</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a98ed5cb782d6c980e81392c82beec9fa\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">EnigmaIOTNodeClass::lastBroadcastMsgCounter</a></div><div class=\"ttdeci\">int16_t lastBroadcastMsgCounter</div><div class=\"ttdoc\">Counter for broadcast messages from gateway *‍/.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00173\">EnigmaIOTNode.h:173</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">WAIT_FOR_SERVER_HELLO</a></div><div class=\"ttdeci\">@ WAIT_FOR_SERVER_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00026\">NodeList.h:26</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_a92e5a2fd1601642b4ee6c4a9ec126524\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">localLed</a></div><div class=\"ttdeci\">int localLed</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00029\">EnigmaIOTNode.cpp:29</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a7d5403fd3a4bcaea590b3aa919c141dc\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">EnigmaIOTNodeClass::restart</a></div><div class=\"ttdeci\">void restart(restartReason_t reason, bool reboot=true)</div><div class=\"ttdoc\">Sets connection as unregistered to force a resyncrhonisation after boot.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02351\">EnigmaIOTNode.cpp:2351</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae4b169a75d7c1fa535eb883c28683001\"><div class=\"ttname\"><a href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">Node::getLastControlCounter</a></div><div class=\"ttdeci\">uint16_t getLastControlCounter()</div><div class=\"ttdoc\">Gets counter for last received control message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00226\">NodeList.h:226</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a41984c7560df0af008fc526ee38b0b42\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">EnigmaIOTNodeClass::configWiFiManager</a></div><div class=\"ttdeci\">bool configWiFiManager(rtcmem_data_t *data)</div><div class=\"ttdoc\">Starts configuration AP and web server and gets settings from it.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00481\">EnigmaIOTNode.cpp:481</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a7c565caad2fea0439f28d24887ac2498\"><div class=\"ttname\"><a href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">Node::reset</a></div><div class=\"ttdeci\">void reset()</div><div class=\"ttdoc\">Resets all node fields to a default initial and not registered state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00106\">NodeList.cpp:106</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a256f6a64dac541f374d00349d3a3e325\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325\">EnigmaIOTNodeClass::resetConfig</a></div><div class=\"ttdeci\">void resetConfig()</div><div class=\"ttdoc\">Deletes configuration file stored on flash. It makes neccessary to configure it again using WiFi Port...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00044\">EnigmaIOTNode.cpp:44</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a358bcf3efcf3a3c08249409852590e91\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">EnigmaIOTNodeClass::sleepTime</a></div><div class=\"ttdeci\">uint64_t sleepTime</div><div class=\"ttdoc\">Time in microseconds that this node will be slept between measurements.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00147\">EnigmaIOTNode.h:147</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a659fca03ecdfd18e19be1b39b4e703b3\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">EnigmaIOTNodeClass::stopIdentifying</a></div><div class=\"ttdeci\">void stopIdentifying()</div><div class=\"ttdoc\">Stops node identification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00669\">EnigmaIOTNode.cpp:669</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a89ccd5b416ac31593da426c48ec8562a\"><div class=\"ttname\"><a href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">Node::getInitAsSleepy</a></div><div class=\"ttdeci\">bool getInitAsSleepy()</div><div class=\"ttdoc\">Gets initial sleepy mode.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00354\">NodeList.h:354</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae7b7337fdc178fe350ac4ce2f4675040\"><div class=\"ttname\"><a href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">Node::setEncryptionKey</a></div><div class=\"ttdeci\">void setEncryptionKey(const uint8_t *key)</div><div class=\"ttdoc\">Sets encryption key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00011\">NodeList.cpp:11</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ac5a613a21aca12c2d2efbff02a2f0ff5\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">Comms_halClass::send</a></div><div class=\"ttdeci\">virtual int32_t send(uint8_t *da, uint8_t *data, int len)=0</div><div class=\"ttdoc\">Sends data to the other peer.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a27b8cf1e2d300318f7102b8bc0facef9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9\">CHECK_COMM_ERRORS</a></div><div class=\"ttdeci\">static const bool CHECK_COMM_ERRORS</div><div class=\"ttdoc\">Try to reconnect in case of communication errors.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00050\">EnigmaIoTconfigAdvanced.h:50</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a074be31e720b8d50da8e94b1c0012afe\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">EnigmaIOTNodeClass::dataMessageSendPending</a></div><div class=\"ttdeci\">bool dataMessageSendPending</div><div class=\"ttdoc\">True in case of message retransmission is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00150\">EnigmaIOTNode.h:150</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ae2da55526a67b70c0b724fe1d856cc72\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">EnigmaIOTNodeClass::notifyConnection</a></div><div class=\"ttdeci\">onConnected_t notifyConnection</div><div class=\"ttdoc\">Callback that will be called anytime a new node is registered.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00142\">EnigmaIOTNode.h:142</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a6093fd7b0a9eedba72c3622977639d92\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">Comms_halClass::getAddressLength</a></div><div class=\"ttdeci\">virtual uint8_t getAddressLength()=0</div><div class=\"ttdoc\">Get address length that a specific communication subsystem uses.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a61ac445d996a9304b34fc78a2514364f\"><div class=\"ttname\"><a href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">Node::getEncriptionKey</a></div><div class=\"ttdeci\">uint8_t * getEncriptionKey()</div><div class=\"ttdoc\">Gets Node encryption key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00173\">NodeList.h:173</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a96b21ebe23b1914e09408bd3e41b34b0\"><div class=\"ttname\"><a href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a></div><div class=\"ttdeci\">static uint32_t random()</div><div class=\"ttdoc\">Gets a random number.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00119\">cryptModule.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\">RESTART_AFTER_OTA</a></div><div class=\"ttdeci\">@ RESTART_AFTER_OTA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00042\">NodeList.h:42</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a122e04d1d7956015ed3e7d349fa34a6a\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a\">PRE_REG_DELAY</a></div><div class=\"ttdeci\">static const uint32_t PRE_REG_DELAY</div><div class=\"ttdoc\">Time to wait before registration so that other nodes have time to communicate. Real delay is a random...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00048\">EnigmaIoTconfig.h:48</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a></div><div class=\"ttdeci\">restartReason_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00041\">NodeList.h:41</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\">DOWNSTREAM_BRCAST_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_BRCAST_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00043\">EnigmaIOTGateway.h:43</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acb396ad8481d5fe7c99227cae4a1f1cf\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">EnigmaIOTNodeClass::useCounter</a></div><div class=\"ttdeci\">bool useCounter</div><div class=\"ttdoc\">true means that data message counter will be used to mark message order</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00144\">EnigmaIOTNode.h:144</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a198819f64ca0424df0b0fc930b85caed\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed\">POST_REG_DELAY</a></div><div class=\"ttdeci\">static const uint32_t POST_REG_DELAY</div><div class=\"ttdoc\">Time to wait before sending data after registration so that other nodes have time to finish their reg...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00050\">EnigmaIoTconfig.h:50</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a59f5ef49f540e586fb43dc984c0ed696\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\">EnigmaIOTNodeClass::processControlCommand</a></div><div class=\"ttdeci\">bool processControlCommand(const uint8_t *mac, const uint8_t *data, size_t len, bool broadcast)</div><div class=\"ttdoc\">Processes a control command. Does not propagate to user code.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02366\">EnigmaIOTNode.cpp:2366</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ab5c31a536cb60a6c86dec8524117f50e\"><div class=\"ttname\"><a href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">Node::getLastMessageCounter</a></div><div class=\"ttdeci\">uint16_t getLastMessageCounter()</div><div class=\"ttdoc\">Gets counter for last received message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00218\">NodeList.h:218</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a27731975d4dc4feeafb7ac42ab5a4035\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\">EnigmaIOTNodeClass::processSetNameCommand</a></div><div class=\"ttdeci\">bool processSetNameCommand(const uint8_t *mac, const uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Processes a request to set Node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01899\">EnigmaIOTNode.cpp:1899</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_af5a1e79dde5802d9f3b10583dd9eaa78\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">rtcmem_data_t::lastControlCounter</a></div><div class=\"ttdeci\">uint16_t lastControlCounter</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00109\">EnigmaIOTNode.h:109</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13b4e0476b9afe933303985e9a7025f1\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">EnigmaIOTNodeClass::ledOnTime</a></div><div class=\"ttdeci\">unsigned int ledOnTime</div><div class=\"ttdoc\">Time that LED is On during flash. Initalized on setLed</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00139\">EnigmaIOTNode.h:139</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a59edd64bf4bf9acf6b18b6af90c9a435\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">EnigmaIOTNodeClass::node</a></div><div class=\"ttdeci\">Node node</div><div class=\"ttdoc\">Node abstraction to store context.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00136\">EnigmaIOTNode.h:136</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a45670fbcb6213e0a028e97569d988249\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">EnigmaIOTNodeClass::sendNodeNameSet</a></div><div class=\"ttdeci\">bool sendNodeNameSet(const char *name)</div><div class=\"ttdoc\">Informs Gateway about custom node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01936\">EnigmaIOTNode.cpp:1936</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a9233d49a0d125e9c7054c6e70f377d56\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\">EnigmaIOTNodeClass::processSetRestartCommand</a></div><div class=\"ttdeci\">bool processSetRestartCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request to restar node mcu.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02053\">EnigmaIOTNode.cpp:2053</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\">OTA_OUT_OF_SEQUENCE</a></div><div class=\"ttdeci\">@ OTA_OUT_OF_SEQUENCE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00081\">NodeList.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a39fd0a21844a920f3a237e25311f58f8\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">EnigmaIOTNodeClass::invalidateReason</a></div><div class=\"ttdeci\">nodeInvalidateReason_t invalidateReason</div><div class=\"ttdoc\">Last key invalidation reason.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00153\">EnigmaIOTNode.h:153</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ad3f6f92f204d4667e2a577cd23965f69\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">EnigmaIOTNodeClass::rtcmem_data</a></div><div class=\"ttdeci\">rtcmem_data_t rtcmem_data</div><div class=\"ttdoc\">Context data to be stored on persistent storage.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00145\">EnigmaIOTNode.h:145</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">NAME_ANS</a></div><div class=\"ttdeci\">@ NAME_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00063\">NodeList.h:63</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af1408c0ed378a9b46e62d98f88545893\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">EnigmaIOTNodeClass::loadRTCData</a></div><div class=\"ttdeci\">bool loadRTCData()</div><div class=\"ttdoc\">Loads configuration from RTC data. Uses a CRC to check data integrity.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00221\">EnigmaIOTNode.cpp:221</a></div></div>\n<div class=\"ttc\" id=\"acryptModule_8h_html_a164ce4566a4b31ef42907bf37f3e6654\"><div class=\"ttname\"><a href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">RANDOM_LENGTH</a></div><div class=\"ttdeci\">const uint8_t RANDOM_LENGTH</div><div class=\"ttdoc\">Length of random number generator values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00027\">cryptModule.h:27</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_afa20feac19225b3ee433e7610493105d\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">rtcmem_data_t::nodeName</a></div><div class=\"ttdeci\">char nodeName[NODE_NAME_LENGTH+1]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00100\">EnigmaIOTNode.h:100</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_adbabb6a770438b4cfbb0f89cf2cb1795\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">EnigmaIOTNodeClass::clockSyncEnabled</a></div><div class=\"ttdeci\">bool clockSyncEnabled</div><div class=\"ttdoc\">If true clock is synchronized with Gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00161\">EnigmaIOTNode.h:161</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aea12cab858f40940a1ab5c61596b6355\"><div class=\"ttname\"><a href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">Node::setMacAddress</a></div><div class=\"ttdeci\">void setMacAddress(const uint8_t *macAddress)</div><div class=\"ttdoc\">Sets node address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00266\">NodeList.h:266</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a863ca9be67da8cdc5fb9447378021e07\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a></div><div class=\"ttdeci\">const uint8_t KEY_LENGTH</div><div class=\"ttdoc\">Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00070\">EnigmaIoTconfigAdvanced.h:70</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a95a7b8677828b1fe4c6e45a13deeb83b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">EnigmaIOTNodeClass::processBroadcastKeyMessage</a></div><div class=\"ttdeci\">bool processBroadcastKeyMessage(const uint8_t *mac, const uint8_t *buf, size_t count)</div><div class=\"ttdoc\">Gets a buffer containing a BroadcastKey message and process it. This key is used to send and receive ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02408\">EnigmaIOTNode.cpp:2408</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a0186926009fc565b05f5a2c37dfb3649\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">EnigmaIOTNodeClass::sleepRequested</a></div><div class=\"ttdeci\">bool sleepRequested</div><div class=\"ttdoc\">true means that this node will sleep as soon a message is sent and downlink wait time has passed</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00146\">EnigmaIOTNode.h:146</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ac2c135a9d3623b28dda13acdbd4d5615\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\">EnigmaIOTNodeClass::processVersionCommand</a></div><div class=\"ttdeci\">bool processVersionCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request firmware version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02163\">EnigmaIOTNode.cpp:2163</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\">CONFIG_RESET</a></div><div class=\"ttdeci\">@ CONFIG_RESET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00045\">NodeList.h:45</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aab18d9b24e08c00bcbac6bd5f1792d63\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">EnigmaIOTNodeClass::processDownstreamData</a></div><div class=\"ttdeci\">bool processDownstreamData(const uint8_t *mac, const uint8_t *buf, size_t count, bool control=false)</div><div class=\"ttdoc\">Processes downstream data from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02425\">EnigmaIOTNode.cpp:2425</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afff6af9384f1f217168473b1df017d78\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">EnigmaIOTNodeClass::wifiManager</a></div><div class=\"ttdeci\">AsyncWiFiManager * wifiManager</div><div class=\"ttdoc\">Wifi configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00169\">EnigmaIOTNode.h:169</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ad35575e4aa02a2ef38baa14a2dea0f67\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\">EnigmaIOTNodeClass::processClockResponse</a></div><div class=\"ttdeci\">bool processClockResponse(const uint8_t *mac, const uint8_t *buf, size_t count)</div><div class=\"ttdoc\">Gets a buffer containing a ClockResponse message and process it. It uses that message to calculate cl...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01367\">EnigmaIOTNode.cpp:1367</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a436eb0a595405e52dc3a937c5968447f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass::sendHADiscoveryMessage</a></div><div class=\"ttdeci\">bool sendHADiscoveryMessage(const uint8_t *data, size_t len)</div><div class=\"ttdoc\">Builds, encrypts and sends a HomeAssistant discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01764\">EnigmaIOTNode.cpp:1764</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a7a907754d1a1cc7e4cd9225f1be82c63\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">rtcmem_data_t::broadcastKeyRequested</a></div><div class=\"ttdeci\">bool broadcastKeyRequested</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00106\">EnigmaIOTNode.h:106</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2fbd4d4a8c9e29873e69d408bff0d735\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">EnigmaIOTNodeClass::dataMessageEncrypt</a></div><div class=\"ttdeci\">bool dataMessageEncrypt</div><div class=\"ttdoc\">Message encryption enabled. Stored for use in case of message retransmission is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00152\">EnigmaIOTNode.h:152</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_ad6e69a2870c8f219cc679677af110849\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a></div><div class=\"ttdeci\">#define MACSTR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00083\">helperFunctions.cpp:83</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a68fd5dd70eb1fa10fa1878e044d14cb0\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">RTC_ADDRESS</a></div><div class=\"ttdeci\">static const uint32_t RTC_ADDRESS</div><div class=\"ttdoc\">RTC memory address where to store context. Modify it if you need place to store your own data during ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00052\">EnigmaIoTconfigAdvanced.h:52</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ad3d2d41b518fbbb99d6c4d8824b9d4bd\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">EnigmaIOTNodeClass::lastOTAmsg</a></div><div class=\"ttdeci\">time_t lastOTAmsg</div><div class=\"ttdoc\">Time when last OTA update message has received. This is used to control timeout.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00157\">EnigmaIOTNode.h:157</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a0b8712b5d25abc82bd371e652eae5826\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">RECONNECTION_PERIOD</a></div><div class=\"ttdeci\">static const int16_t RECONNECTION_PERIOD</div><div class=\"ttdoc\">Time to retry Gateway connection.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00039\">EnigmaIoTconfig.h:39</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a50bb8229ba54273b8da7f1a012b72496\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">rtcmem_data_t::nodeRegisterStatus</a></div><div class=\"ttdeci\">status_t nodeRegisterStatus</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00107\">EnigmaIOTNode.h:107</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_a47616803c1ff494134cb784756035a08\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">CONFIG_FILE</a></div><div class=\"ttdeci\">const char CONFIG_FILE[]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00027\">EnigmaIOTNode.cpp:27</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a></div><div class=\"ttdeci\">@ UNREGISTERED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00024\">NodeList.h:24</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a></div><div class=\"ttdeci\">@ KEY_EXPIRED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00081\">EnigmaIOTGateway.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a0e506efc2aa99694bfa13a59b07d55cc\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">EnigmaIOTNodeClass::notifyDisconnection</a></div><div class=\"ttdeci\">onDisconnected_t notifyDisconnection</div><div class=\"ttdoc\">Callback that will be called anytime a node is disconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00143\">EnigmaIOTNode.h:143</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\">RESET_ANS</a></div><div class=\"ttdeci\">@ RESET_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00059\">NodeList.h:59</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a0b809fd0304e6e55173ac1e6fa8d3dc8\"><div class=\"ttname\"><a href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">Node::isRegistered</a></div><div class=\"ttdeci\">bool isRegistered()</div><div class=\"ttdoc\">Gets registration state of this node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00292\">NodeList.h:292</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a85889f0610371fd502b47aae07d35506\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">TimeManagerClass::clock</a></div><div class=\"ttdeci\">int64_t clock()</div><div class=\"ttdoc\">Gets local clock.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00012\">timeManager.cpp:12</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a4cefee4f9feaa563b8e8a725a847e9ac\"><div class=\"ttname\"><a href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">Node::getMacAddress</a></div><div class=\"ttdeci\">uint8_t * getMacAddress()</div><div class=\"ttdoc\">Gets address from Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00128\">NodeList.h:128</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a9ffe72d0ffb67d58f2e435308433b8ad\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">EnigmaIOTNodeClass::identifyStart</a></div><div class=\"ttdeci\">time_t identifyStart</div><div class=\"ttdoc\">Time when identification started flashing. Used to control identification timeout.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00159\">EnigmaIOTNode.h:159</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a22c565018d72ac1df23a765a713fd768\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\">EnigmaIOTNodeClass::processInvalidateKey</a></div><div class=\"ttdeci\">nodeInvalidateReason_t processInvalidateKey(const uint8_t *mac, const uint8_t *buf, size_t count)</div><div class=\"ttdoc\">Gets a buffer containing an InvalidateKey message and process it. This trigger a new key agreement to...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02527\">EnigmaIOTNode.cpp:2527</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">VERSION</a></div><div class=\"ttdeci\">@ VERSION</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00052\">NodeList.h:52</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a187f3eb82f9948d5b53bd7eb480f1dd4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a></div><div class=\"ttdeci\">void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00089\">EnigmaIOTNode.cpp:89</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_a568f6925a7027004598c4ad288dd11f0\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">IKMSG_LEN</a></div><div class=\"ttdeci\">#define IKMSG_LEN</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a></div><div class=\"ttdeci\">@ HA_DISCOVERY_MESSAGE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00049\">EnigmaIOTGateway.h:49</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ae1bb8b93c739fced2c695e47a5242f9a\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">EnigmaIOTNodeClass::saveRTCData</a></div><div class=\"ttdeci\">bool saveRTCData()</div><div class=\"ttdoc\">Save configuration to RTC to store current status and recover it after deep sleep.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00433\">EnigmaIOTNode.cpp:433</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a8574c3435e748fbca1b99eeec4c770c2\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">EnigmaIOTNodeClass::loadFlashData</a></div><div class=\"ttdeci\">bool loadFlashData()</div><div class=\"ttdoc\">Loads configuration from flash memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00270\">EnigmaIOTNode.cpp:270</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">OTA_ANS</a></div><div class=\"ttdeci\">@ OTA_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00069\">NodeList.h:69</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a36b675e4186420fb1f8e324fc0987cbd\"><div class=\"ttname\"><a href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">Node::printToSerial</a></div><div class=\"ttdeci\">void printToSerial(Stream *port=&amp;Serial)</div><div class=\"ttdoc\">Dumps node data to the given stream, Serial by default. This method may be used for debugging.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00032\">NodeList.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">NAME_GET</a></div><div class=\"ttdeci\">@ NAME_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00062\">NodeList.h:62</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ac6f82e2e104008daffa7b6f17abbcfdc\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\">EnigmaIOTNodeClass::unencryptedDataMessage</a></div><div class=\"ttdeci\">bool unencryptedDataMessage(const uint8_t *data, size_t len, dataMessageType_t dataMsgType=DATA_TYPE, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Builds and sends a Data message without encryption. Not recommended, use it only if you absolutely ne...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01574\">EnigmaIOTNode.cpp:1574</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a52ec03c6ad068419f98e52f60718626e\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e\">DOWNLINK_WAIT_TIME</a></div><div class=\"ttdeci\">static const uint16_t DOWNLINK_WAIT_TIME</div><div class=\"ttdoc\">Time to wait for downlink message before sleep. Setting less than 180 ms causes ESP-NOW errors due to...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00040\">EnigmaIoTconfig.h:40</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a></div><div class=\"ttdeci\">@ REGISTERED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00028\">NodeList.h:28</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\">SERVER_HELLO</a></div><div class=\"ttdeci\">@ SERVER_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00057\">EnigmaIOTGateway.h:57</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ab95b384ed3f016217d9669c7982e8c08\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">EnigmaIOTNodeClass::reportRSSI</a></div><div class=\"ttdeci\">bool reportRSSI()</div><div class=\"ttdoc\">Sends RSSI value and channel to Gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00982\">EnigmaIOTNode.cpp:982</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2e3ba13a9f6b1a0e3feb9e6bee17d365\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">EnigmaIOTNodeClass::shouldRestart</a></div><div class=\"ttdeci\">bool shouldRestart</div><div class=\"ttdoc\">Triggers a restart if true.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00162\">EnigmaIOTNode.h:162</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a726847ca0ed458b01c23e78672aa4059\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\">EnigmaIOTNodeClass::getStatus</a></div><div class=\"ttdeci\">void getStatus(uint8_t *mac_addr, uint8_t status)</div><div class=\"ttdoc\">Functrion to debug send status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02704\">EnigmaIOTNode.cpp:2704</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a1cd41eabb8dc153f74d42f263d168fee\"><div class=\"ttname\"><a href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">CryptModule::getDH2</a></div><div class=\"ttdeci\">bool getDH2(const uint8_t *remotePubKey)</div><div class=\"ttdoc\">Starts second stage of Diffie Hellman key agreement algorithm and calculate shares key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00148\">cryptModule.cpp:148</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\">CLOCK_REQUEST</a></div><div class=\"ttdeci\">@ CLOCK_REQUEST</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00050\">EnigmaIOTGateway.h:50</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a5b8a2368449f3fd7a1986fb80d9e4274\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\">EnigmaIOTNodeClass::processGetSleepTimeCommand</a></div><div class=\"ttdeci\">bool processGetSleepTimeCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request of sleep time configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01772\">EnigmaIOTNode.cpp:1772</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a59cb3b60750ca326ee647918af7a4d0b\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b\">RESET_PIN_DURATION</a></div><div class=\"ttdeci\">static const int RESET_PIN_DURATION</div><div class=\"ttdoc\">Number of milliseconds that reset pin has to be grounded to produce a configuration reset.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00019\">EnigmaIoTconfig.h:19</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\">NODE_NAME_RESULT</a></div><div class=\"ttdeci\">@ NODE_NAME_RESULT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00053\">EnigmaIOTGateway.h:53</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ae1729724a332e907bddbe7b27c2f3c22\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22\">EnigmaIOTNodeClass::stop</a></div><div class=\"ttdeci\">void stop()</div><div class=\"ttdoc\">Stops EnigmaIoT protocol.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00938\">EnigmaIOTNode.cpp:938</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a0d4446a73e230333f972b233fa2dffdd\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\">EnigmaIOTNodeClass::processGetRSSICommand</a></div><div class=\"ttdeci\">bool processGetRSSICommand(const uint8_t *mac, const uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Processes a request to measure RSSI.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02046\">EnigmaIOTNode.cpp:2046</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aecf8d05afddcd5d460472963ee88bd2b\"><div class=\"ttname\"><a href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">Node::getLastDownlinkMsgCounter</a></div><div class=\"ttdeci\">uint16_t getLastDownlinkMsgCounter()</div><div class=\"ttdoc\">Gets counter for last downlink message from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00234\">NodeList.h:234</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a0ae6c4c749724e380b6e717a6535bed6\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a></div><div class=\"ttdeci\">const uint8_t IV_LENGTH</div><div class=\"ttdoc\">Initalization vector length used by selected crypto algorythm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00071\">EnigmaIoTconfigAdvanced.h:71</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aa024db31641775e4de784d4d2ce545a1\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">EnigmaIOTNodeClass::requestSearchGateway</a></div><div class=\"ttdeci\">bool requestSearchGateway</div><div class=\"ttdoc\">Flag to control updating gateway address, RSSI and channel.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00165\">EnigmaIOTNode.h:165</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a77b2c62dbadc2b7546d74d8ebf931cc2\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">EnigmaIOTNodeClass::saveFlashData</a></div><div class=\"ttdeci\">bool saveFlashData(bool fsOpen=false)</div><div class=\"ttdoc\">Saves configuration to flash memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00352\">EnigmaIOTNode.cpp:352</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">OTA_CHECK_FAIL</a></div><div class=\"ttdeci\">@ OTA_CHECK_FAIL</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00080\">NodeList.h:80</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a245a6d744786422d9939f5f14773475e\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">rtcmem_data_t::sleepy</a></div><div class=\"ttdeci\">bool sleepy</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00098\">EnigmaIOTNode.h:98</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a89f10f640dc72117118bf9ab01f7e04a\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a></div><div class=\"ttdeci\">const char * nodeNameParam</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00024\">GatewayAPI.cpp:24</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\">IRRELEVANT</a></div><div class=\"ttdeci\">@ IRRELEVANT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00047\">NodeList.h:47</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a6830ae2f6b8dafa588f5baa1fe4e8a99\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">EnigmaIOTNodeClass::clock</a></div><div class=\"ttdeci\">int64_t clock()</div><div class=\"ttdoc\">Gets current clock counter. millis() + offset.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01455\">EnigmaIOTNode.cpp:1455</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a></div><div class=\"ttdeci\">@ UNKNOWN_ERROR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00076\">EnigmaIOTGateway.h:76</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_aba7d6bb1a99b92428585ea5823d2646d\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">rtcmem_data_t::networkName</a></div><div class=\"ttdeci\">char networkName[NETWORK_NAME_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00097\">EnigmaIOTNode.h:97</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\">DOWNSTREAM_BRCAST_CTRL_DATA</a></div><div class=\"ttdeci\">@ DOWNSTREAM_BRCAST_CTRL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00048\">EnigmaIOTGateway.h:48</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\">CLIENT_HELLO</a></div><div class=\"ttdeci\">@ CLIENT_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00056\">EnigmaIOTGateway.h:56</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ac4505b55fce99b105adc4993a404c7d4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">EnigmaIOTNodeClass::dataMessageSendEncoding</a></div><div class=\"ttdeci\">nodePayloadEncoding_t dataMessageSendEncoding</div><div class=\"ttdoc\">Encoding of the message pending to be sent.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00151\">EnigmaIOTNode.h:151</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ae85cd6a5937cb47f88fb82d06b21087a\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">Comms_halClass::enableTransmit</a></div><div class=\"ttdeci\">virtual void enableTransmit(bool enable)=0</div><div class=\"ttdoc\">Enables or disables transmission of queued messages. Used to disable communication during wifi scan.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a4400d84e20bfd15aed72aa991dd87d4f\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f\">DEFAULT_SLEEP_TIME</a></div><div class=\"ttdeci\">static const uint32_t DEFAULT_SLEEP_TIME</div><div class=\"ttdoc\">Default sleep time if it was not set.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00041\">EnigmaIoTconfig.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a846d3d0dd41fcaa8944e7cbe804bef93\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\">EnigmaIOTNodeClass::manageMessage</a></div><div class=\"ttdeci\">void manageMessage(const uint8_t *mac, const uint8_t *buf, uint8_t count)</div><div class=\"ttdoc\">Process every received message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02551\">EnigmaIOTNode.cpp:2551</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_af2e697ac60e05813d45ea2c9c9e79c25\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a></div><div class=\"ttdeci\">#define LED_ON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00039\">enigmaiot_led_flasher.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a892e3b670910fee23a107826e0ac4463\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">rtcmem_data_t::nodeKeyValid</a></div><div class=\"ttdeci\">bool nodeKeyValid</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00103\">EnigmaIOTNode.h:103</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">NAME_SET</a></div><div class=\"ttdeci\">@ NAME_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00064\">NodeList.h:64</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a81e44efba216f1a0a981219616eeb8f3\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a></div><div class=\"ttdeci\">uint32_t calculateCRC32(const uint8_t *data, size_t length)</div><div class=\"ttdoc\">Calculates CRC32 of a buffer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00064\">helperFunctions.cpp:64</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abc061ed33eaff29767c880e77d2faca9\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">EnigmaIOTNodeClass::cycleStartedTime</a></div><div class=\"ttdeci\">time_t cycleStartedTime</div><div class=\"ttdoc\">Used to calculate exact sleep time by substracting awake time.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00172\">EnigmaIOTNode.h:172</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a></div><div class=\"ttdeci\">@ HA_DISC_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00072\">EnigmaIOTNode.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_a2f399d10e625fb459fb5e0b8a3a79ef8\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#a2f399d10e625fb459fb5e0b8a3a79ef8\">flashLed</a></div><div class=\"ttdeci\">void flashLed(void *led)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00617\">EnigmaIOTNode.cpp:617</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aaa07721114c6b57152caf9a7b8cd4c23\"><div class=\"ttname\"><a href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">Node::setLastMessageCounter</a></div><div class=\"ttdeci\">void setLastMessageCounter(uint16_t counter)</div><div class=\"ttdoc\">Sets counter for last received message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00242\">NodeList.h:242</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\">INVALIDATE_KEY</a></div><div class=\"ttdeci\">@ INVALIDATE_KEY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00059\">EnigmaIOTGateway.h:58</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">SLEEP_ANS</a></div><div class=\"ttdeci\">@ SLEEP_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00056\">NodeList.h:56</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ad2beff45acb833796b079e741d13ec75\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">EnigmaIOTNodeClass::gatewaySearchStarted</a></div><div class=\"ttdeci\">bool gatewaySearchStarted</div><div class=\"ttdoc\">Avoids start a new gateway scan if it already started.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00164\">EnigmaIOTNode.h:164</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a06cedd303513fccb86207c7f8e09d1d8\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8\">TimeManagerClass::reset</a></div><div class=\"ttdeci\">void reset()</div><div class=\"ttdoc\">Resets clock synchronization and sets values to initial status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00082\">timeManager.h:82</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a5aea95bd2dead51558a1f7fa312cf1c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">EnigmaIOTNodeClass::configCleared</a></div><div class=\"ttdeci\">bool configCleared</div><div class=\"ttdoc\">This flag disables asy configuration save after triggering a factory reset.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00167\">EnigmaIOTNode.h:167</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></div><div class=\"ttdoc\">Context data to be stored con persistent storage to be used after wake from sleep mode.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00089\">EnigmaIOTNode.h:89</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_a1b66b36dbb3d32b25e7f4b2cc4e0accb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#a1b66b36dbb3d32b25e7f4b2cc4e0accb\">clearRtcData</a></div><div class=\"ttdeci\">void clearRtcData(rtcmem_data_t *data)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00098\">EnigmaIOTNode.cpp:98</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\">RESTART_REQUESTED</a></div><div class=\"ttdeci\">@ RESTART_REQUESTED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00044\">NodeList.h:44</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a></div><div class=\"ttdeci\">@ CONTROL_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00070\">EnigmaIOTNode.h:70</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ae6176d81e34ccc835f6886c23ba47d93\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93\">EnigmaIOTNodeClass::getRSSI</a></div><div class=\"ttdeci\">int8_t getRSSI()</div><div class=\"ttdoc\">Gets latest RSSI measurement. It is updated during start up or in case of transmission errors.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00085\">EnigmaIOTNode.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a1701a6f85406e5deef210c74d509a471\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">EnigmaIOTNodeClass::startIdentifying</a></div><div class=\"ttdeci\">void startIdentifying(time_t period)</div><div class=\"ttdoc\">Starts node identification by flashing led.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00663\">EnigmaIOTNode.cpp:663</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html\"><div class=\"ttname\"><a href=\"classComms__halClass.html\">Comms_halClass</a></div><div class=\"ttdoc\">Interface for communication subsystem abstraction layer definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00041\">Comms_hal.h:41</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\">OTA_STARTED</a></div><div class=\"ttdeci\">@ OTA_STARTED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00077\">NodeList.h:77</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\">UNENCRYPTED_NODE_DATA</a></div><div class=\"ttdeci\">@ UNENCRYPTED_NODE_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00041\">EnigmaIOTGateway.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a77067c58362c3beb192545cb3ba1a775\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">EnigmaIOTNodeClass::dataMessageSentLength</a></div><div class=\"ttdeci\">uint8_t dataMessageSentLength</div><div class=\"ttdoc\">Message length stored for use in case of message retransmission is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00149\">EnigmaIOTNode.h:149</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_aa69c265e65ce31580af6d5dd9b3cd40f\"><div class=\"ttname\"><a href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">Comms_halClass::stop</a></div><div class=\"ttdeci\">virtual void stop()=0</div><div class=\"ttdoc\">Terminates communication and closes all connectrions.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\">BROADCAST_KEY_RESPONSE</a></div><div class=\"ttdeci\">@ BROADCAST_KEY_RESPONSE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00055\">EnigmaIOTGateway.h:55</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTNode_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTNode.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTNode.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Library to build a node for EnigmaIoT system.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>&quot;</code><br />\n<code>#include &lt;cstddef&gt;</code><br />\n<code>#include &lt;cstdint&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOTNode_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Context data to be stored con persistent storage to be used after wake from sleep mode.  <a href=\"structrtcmem__data__t.html#details\">More...</a><br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Main node class. Manages communication with gateway and allows sending and receiving user data.  <a href=\"classEnigmaIOTNodeClass.html#details\">More...</a><br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:af2e697ac60e05813d45ea2c9c9e79c25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a>&#160;&#160;&#160;LOW</td></tr>\n<tr class=\"separator:af2e697ac60e05813d45ea2c9c9e79c25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a80700bb63bd56ebabbb4728aa433fd29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>&#160;&#160;&#160;!<a class=\"el\" href=\"EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a></td></tr>\n<tr class=\"separator:a80700bb63bd56ebabbb4728aa433fd29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:acbdfeab1a5e492bc200768fa91041445\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#acbdfeab1a5e492bc200768fa91041445\">nodeMessageType_t</a></td></tr>\n<tr class=\"separator:acbdfeab1a5e492bc200768fa91041445\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a477e362b78a326f1519738f29740e6d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">onNodeDataRx_t</a>) (const uint8_t *mac, const uint8_t *buf, uint8_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"separator:a477e362b78a326f1519738f29740e6d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a37ce04fd79315c001e113198fab23386\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">onConnected_t</a>) ()</td></tr>\n<tr class=\"separator:a37ce04fd79315c001e113198fab23386\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a450524067c6c3ce8b2fda7e2c7d2c9e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">onDisconnected_t</a>) (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a450524067c6c3ce8b2fda7e2c7d2c9e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac0bcd76b3f8b10cfc0f8c75d00e33012\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a>) (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"separator:ac0bcd76b3f8b10cfc0f8c75d00e33012\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeafba3e3725226cdcb14a23c4e57c97a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef void(*&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#aeafba3e3725226cdcb14a23c4e57c97a\">onWiFiManagerStarted_t</a>) (void)</td></tr>\n<tr class=\"separator:aeafba3e3725226cdcb14a23c4e57c97a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:a040804a4fb880b7e7dfe5c489f7bdf7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a> = 0x01, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faffd78f537f0c30f76f209e5afd106843\">SENSOR_BRCAST_DATA</a> = 0x81, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa84d08335ed131183ff525c55c14f3148\">UNENCRYPTED_NODE_DATA</a> = 0x11, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a> = 0x02, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa3b0c314d51c09e5960e07704bb05f4ab\">DOWNSTREAM_BRCAST_DATA_SET</a> = 0x82, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a> = 0x12, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae5aa3bb71dda4aa9ba38ca2a5eeba422\">DOWNSTREAM_BRCAST_DATA_GET</a> = 0x92, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa6b9b36c3722a1256ac7fa097bf10f4de\">CONTROL_DATA</a> = 0x03, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fad2c18ef749d0eca5f53ecfb0fb0af0bc\">DOWNSTREAM_CTRL_DATA</a> = 0x04, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a> = 0x08, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fade8205c810264376dfc45dc2b72e116c\">DOWNSTREAM_BRCAST_CTRL_DATA</a> = 0x84, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa50ab02cc83b80322e63edd2e2779a735\">CLOCK_REQUEST</a> = 0x05, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa597b515e2c48496c513e6d502a7528c0\">CLOCK_RESPONSE</a> = 0x06, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa766d5c890baa0b6a0e7e1e3f5cb0b224\">NODE_NAME_SET</a> = 0x07, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae69668f8ce604a1b3d09c3314cdba5bf\">NODE_NAME_RESULT</a> = 0x17, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa45ed732c2c1b8f670d6730e6f7a684b5\">BROADCAST_KEY_REQUEST</a> = 0x08, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faebca9b745a0bd1dedae14258e54e1838\">BROADCAST_KEY_RESPONSE</a> = 0x18, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa0c8da6c451065bed79ea70684e6f3fca\">CLIENT_HELLO</a> = 0xFF, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa28914d3bb26ec8c2bd2d5ad9781cbf8c\">SERVER_HELLO</a> = 0xFE, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa32637f9c9b67f884990ed21097ebc543\">INVALIDATE_KEY</a> = 0xFB\n<br />\n }</td></tr>\n<tr class=\"memdesc:a040804a4fb880b7e7dfe5c489f7bdf7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Message code definition.  <a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">More...</a><br /></td></tr>\n<tr class=\"separator:a040804a4fb880b7e7dfe5c489f7bdf7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac183d8bfcebdc9231366539a77b669eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a> = 0x00, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a> = 0x81, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba4d6491239946f63d9cc27a2984c4fe59\">PROT_BUF</a> = 0x82, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a> = 0x83, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba311c13f8df1217b0cd4d5537cb91311f\">BSON</a> = 0x84, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba56f7b9e0a4250b6a5c73811ae092e686\">CBOR</a> = 0x85, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba298f796cee1bd5d6decfe81d4a98b554\">SMILE</a> = 0x86\n<br />\n }</td></tr>\n<tr class=\"separator:ac183d8bfcebdc9231366539a77b669eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3716f5ccb3d0e7f9222a842f67b9d0a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> { <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>\n }</td></tr>\n<tr class=\"separator:a3716f5ccb3d0e7f9222a842f67b9d0a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1c3e9c34675da8090182cab1de105bc6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a> = 0x00, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6ad6e9d0b3e3d479305eb2ce4233f4eca6\">WRONG_CLIENT_HELLO</a> = 0x01, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a4d7f512e433223ce2caa44e787a2ddff\">WRONG_DATA</a> = 0x03, \n<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a975e594ca3839a0687f31cfbbdb6c90f\">UNREGISTERED_NODE</a> = 0x04, \n<br />\n&#160;&#160;<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a> = 0x05\n<br />\n }</td></tr>\n<tr class=\"memdesc:a1c3e9c34675da8090182cab1de105bc6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Key invalidation reason definition.  <a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">More...</a><br /></td></tr>\n<tr class=\"separator:a1c3e9c34675da8090182cab1de105bc6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:aad0a67af9b0ad60557652e3170f8a2af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></td></tr>\n<tr class=\"separator:aad0a67af9b0ad60557652e3170f8a2af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Library to build a node for EnigmaIoT system. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a80700bb63bd56ebabbb4728aa433fd29\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a80700bb63bd56ebabbb4728aa433fd29\">&#9670;&nbsp;</a></span>LED_OFF</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_OFF&#160;&#160;&#160;!<a class=\"el\" href=\"EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00030\">30</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af2e697ac60e05813d45ea2c9c9e79c25\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af2e697ac60e05813d45ea2c9c9e79c25\">&#9670;&nbsp;</a></span>LED_ON</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_ON&#160;&#160;&#160;LOW</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00029\">29</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a id=\"acbdfeab1a5e492bc200768fa91041445\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acbdfeab1a5e492bc200768fa91041445\">&#9670;&nbsp;</a></span>nodeMessageType_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a> <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00113\">113</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a37ce04fd79315c001e113198fab23386\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a37ce04fd79315c001e113198fab23386\">&#9670;&nbsp;</a></span>onConnected_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* onConnected_t) ()</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00124\">124</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a450524067c6c3ce8b2fda7e2c7d2c9e9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450524067c6c3ce8b2fda7e2c7d2c9e9\">&#9670;&nbsp;</a></span>onDisconnected_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* onDisconnected_t) (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00125\">125</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a477e362b78a326f1519738f29740e6d8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a477e362b78a326f1519738f29740e6d8\">&#9670;&nbsp;</a></span>onNodeDataRx_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* onNodeDataRx_t) (const uint8_t *mac, const uint8_t *buf, uint8_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00123\">123</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac0bcd76b3f8b10cfc0f8c75d00e33012\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac0bcd76b3f8b10cfc0f8c75d00e33012\">&#9670;&nbsp;</a></span>onWiFiManagerExit_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* onWiFiManagerExit_t) (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00126\">126</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aeafba3e3725226cdcb14a23c4e57c97a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aeafba3e3725226cdcb14a23c4e57c97a\">&#9670;&nbsp;</a></span>onWiFiManagerStarted_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef void(* onWiFiManagerStarted_t) (void)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00127\">127</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a id=\"a3716f5ccb3d0e7f9222a842f67b9d0a2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3716f5ccb3d0e7f9222a842f67b9d0a2\">&#9670;&nbsp;</a></span>dataMessageType_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\"></a>DATA_TYPE&#160;</td><td class=\"fielddoc\"><p>User data message </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\"></a>CONTROL_TYPE&#160;</td><td class=\"fielddoc\"><p>Control message </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\"></a>HA_DISC_TYPE&#160;</td><td class=\"fielddoc\"><p>Home Assistant Discovery message </p>\n</td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00068\">68</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1c3e9c34675da8090182cab1de105bc6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1c3e9c34675da8090182cab1de105bc6\">&#9670;&nbsp;</a></span>nodeInvalidateReason_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Key invalidation reason definition. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\"></a>UNKNOWN_ERROR&#160;</td><td class=\"fielddoc\"><p>Unknown error. Not used by the moment </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a1c3e9c34675da8090182cab1de105bc6ad6e9d0b3e3d479305eb2ce4233f4eca6\"></a>WRONG_CLIENT_HELLO&#160;</td><td class=\"fielddoc\"><p>ClientHello message received was invalid </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a1c3e9c34675da8090182cab1de105bc6a4d7f512e433223ce2caa44e787a2ddff\"></a>WRONG_DATA&#160;</td><td class=\"fielddoc\"><p>Data message received could not be decrypted successfuly </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a1c3e9c34675da8090182cab1de105bc6a975e594ca3839a0687f31cfbbdb6c90f\"></a>UNREGISTERED_NODE&#160;</td><td class=\"fielddoc\"><p>Data received from an unregistered node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a1c3e9c34675da8090182cab1de105bc6a09a1d3d5daa36af5469fa79c12a027fe\"></a>KEY_EXPIRED&#160;</td><td class=\"fielddoc\"><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> key has reached maximum validity time </p>\n</td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00078\">78</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a040804a4fb880b7e7dfe5c489f7bdf7f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a040804a4fb880b7e7dfe5c489f7bdf7f\">&#9670;&nbsp;</a></span>nodeMessageType</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Message code definition. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7faa8ba55203a30122cc271cc66b2909b21\"></a>SENSOR_DATA&#160;</td><td class=\"fielddoc\"><p>Data message from sensor node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7faffd78f537f0c30f76f209e5afd106843\"></a>SENSOR_BRCAST_DATA&#160;</td><td class=\"fielddoc\"><p>Data broadcast message from sensor node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa84d08335ed131183ff525c55c14f3148\"></a>UNENCRYPTED_NODE_DATA&#160;</td><td class=\"fielddoc\"><p>Data message from sensor node. Unencrypted </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa21ca6763c97e4804ee6957d039443d2d\"></a>DOWNSTREAM_DATA_SET&#160;</td><td class=\"fielddoc\"><p>Data message from gateway. Downstream data for commands </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa3b0c314d51c09e5960e07704bb05f4ab\"></a>DOWNSTREAM_BRCAST_DATA_SET&#160;</td><td class=\"fielddoc\"><p>Data broadcast message from gateway. Downstream data for user commands </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fac8a74f458aed6681bf199f1ce2f9eb03\"></a>DOWNSTREAM_DATA_GET&#160;</td><td class=\"fielddoc\"><p>Data message from gateway. Downstream data for user commands </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fae5aa3bb71dda4aa9ba38ca2a5eeba422\"></a>DOWNSTREAM_BRCAST_DATA_GET&#160;</td><td class=\"fielddoc\"><p>Data broadcast message from gateway. Downstream data for user commands </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa6b9b36c3722a1256ac7fa097bf10f4de\"></a>CONTROL_DATA&#160;</td><td class=\"fielddoc\"><p>Internal control message from node to gateway. Used for OTA, settings configuration, etc </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fad2c18ef749d0eca5f53ecfb0fb0af0bc\"></a>DOWNSTREAM_CTRL_DATA&#160;</td><td class=\"fielddoc\"><p>Internal control message from gateway to node. Used for OTA, settings configuration, etc </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa01b2a3fb2e751c9536ae814b4b8919c3\"></a>HA_DISCOVERY_MESSAGE&#160;</td><td class=\"fielddoc\"><p>This sends gateway needed information to build a Home Assistant discovery MQTT message to allow automatic entities provision </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fade8205c810264376dfc45dc2b72e116c\"></a>DOWNSTREAM_BRCAST_CTRL_DATA&#160;</td><td class=\"fielddoc\"><p>Internal control broadcast message from gateway to sensor. Used for OTA, settings configuration, etc </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa50ab02cc83b80322e63edd2e2779a735\"></a>CLOCK_REQUEST&#160;</td><td class=\"fielddoc\"><p>Clock request message from node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa597b515e2c48496c513e6d502a7528c0\"></a>CLOCK_RESPONSE&#160;</td><td class=\"fielddoc\"><p>Clock response message from gateway </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa766d5c890baa0b6a0e7e1e3f5cb0b224\"></a>NODE_NAME_SET&#160;</td><td class=\"fielddoc\"><p>Message from node to signal its own custom node name </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fae69668f8ce604a1b3d09c3314cdba5bf\"></a>NODE_NAME_RESULT&#160;</td><td class=\"fielddoc\"><p>Message from gateway to get result after set node name </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa45ed732c2c1b8f670d6730e6f7a684b5\"></a>BROADCAST_KEY_REQUEST&#160;</td><td class=\"fielddoc\"><p>Message from node to request broadcast key </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7faebca9b745a0bd1dedae14258e54e1838\"></a>BROADCAST_KEY_RESPONSE&#160;</td><td class=\"fielddoc\"><p>Message from gateway with broadcast key </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa0c8da6c451065bed79ea70684e6f3fca\"></a>CLIENT_HELLO&#160;</td><td class=\"fielddoc\"><p>ClientHello message from node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa28914d3bb26ec8c2bd2d5ad9781cbf8c\"></a>SERVER_HELLO&#160;</td><td class=\"fielddoc\"><p>ServerHello message from gateway </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a040804a4fb880b7e7dfe5c489f7bdf7fa32637f9c9b67f884990ed21097ebc543\"></a>INVALIDATE_KEY&#160;</td><td class=\"fielddoc\"><p>InvalidateKey message from gateway </p>\n</td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00035\">35</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac183d8bfcebdc9231366539a77b669eb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac183d8bfcebdc9231366539a77b669eb\">&#9670;&nbsp;</a></span>nodePayloadEncoding_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\"></a>RAW&#160;</td><td class=\"fielddoc\"><p>Raw data without specific format </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\"></a>CAYENNELPP&#160;</td><td class=\"fielddoc\"><p>CayenneLPP packed data </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"ac183d8bfcebdc9231366539a77b669eba4d6491239946f63d9cc27a2984c4fe59\"></a>PROT_BUF&#160;</td><td class=\"fielddoc\"><p>Data packed using Protocol Buffers. NOT IMPLEMENTED </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"ac183d8bfcebdc9231366539a77b669eba578494bedfca043a7f16b17ae27c75bc\"></a>MSG_PACK&#160;</td><td class=\"fielddoc\"><p>Data packed using MessagePack </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"ac183d8bfcebdc9231366539a77b669eba311c13f8df1217b0cd4d5537cb91311f\"></a>BSON&#160;</td><td class=\"fielddoc\"><p>Data packed using BSON. NOT IMPLEMENTED </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"ac183d8bfcebdc9231366539a77b669eba56f7b9e0a4250b6a5c73811ae092e686\"></a>CBOR&#160;</td><td class=\"fielddoc\"><p>Data packed using CBOR. NOT IMPLEMENTED </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"ac183d8bfcebdc9231366539a77b669eba298f796cee1bd5d6decfe81d4a98b554\"></a>SMILE&#160;</td><td class=\"fielddoc\"><p>Data packed using SMILE. NOT IMPLEMENTED </p>\n</td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00058\">58</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"aad0a67af9b0ad60557652e3170f8a2af\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aad0a67af9b0ad60557652e3170f8a2af\">&#9670;&nbsp;</a></span>EnigmaIOTNode</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> EnigmaIOTNode</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">extern</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02719\">2719</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTNode_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTNode.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTNode.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOTNode_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _ENIGMAIOTNODE_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _ENIGMAIOTNODE_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"comment\">//#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160; </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"cryptModule_8h.html\">cryptModule.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"Comms__hal_8h.html\">Comms_hal.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"NodeList_8h.html\">NodeList.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;cstdint&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160; </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">   29</a></span>&#160;<span class=\"preprocessor\">#define LED_ON LOW</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a80700bb63bd56ebabbb4728aa433fd29\">   30</a></span>&#160;<span class=\"preprocessor\">#define LED_OFF !LED_ON</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">   35</a></span>&#160;<span class=\"keyword\">enum</span> <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a> {</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faa8ba55203a30122cc271cc66b2909b21\">   36</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a> = 0x01, </div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faffd78f537f0c30f76f209e5afd106843\">   37</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faffd78f537f0c30f76f209e5afd106843\">SENSOR_BRCAST_DATA</a> = 0x81, </div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa84d08335ed131183ff525c55c14f3148\">   38</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa84d08335ed131183ff525c55c14f3148\">UNENCRYPTED_NODE_DATA</a> = 0x11, </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa21ca6763c97e4804ee6957d039443d2d\">   39</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a> = 0x02, </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa3b0c314d51c09e5960e07704bb05f4ab\">   40</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa3b0c314d51c09e5960e07704bb05f4ab\">DOWNSTREAM_BRCAST_DATA_SET</a> = 0x82, </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fac8a74f458aed6681bf199f1ce2f9eb03\">   41</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a> = 0x12, </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae5aa3bb71dda4aa9ba38ca2a5eeba422\">   42</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae5aa3bb71dda4aa9ba38ca2a5eeba422\">DOWNSTREAM_BRCAST_DATA_GET</a> = 0x92, </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa6b9b36c3722a1256ac7fa097bf10f4de\">   43</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa6b9b36c3722a1256ac7fa097bf10f4de\">CONTROL_DATA</a> = 0x03, </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fad2c18ef749d0eca5f53ecfb0fb0af0bc\">   44</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fad2c18ef749d0eca5f53ecfb0fb0af0bc\">DOWNSTREAM_CTRL_DATA</a> = 0x04, </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa01b2a3fb2e751c9536ae814b4b8919c3\">   45</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a> = 0x08, </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fade8205c810264376dfc45dc2b72e116c\">   46</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fade8205c810264376dfc45dc2b72e116c\">DOWNSTREAM_BRCAST_CTRL_DATA</a> = 0x84, </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa50ab02cc83b80322e63edd2e2779a735\">   47</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa50ab02cc83b80322e63edd2e2779a735\">CLOCK_REQUEST</a> = 0x05, </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa597b515e2c48496c513e6d502a7528c0\">   48</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa597b515e2c48496c513e6d502a7528c0\">CLOCK_RESPONSE</a> = 0x06, </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa766d5c890baa0b6a0e7e1e3f5cb0b224\">   49</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa766d5c890baa0b6a0e7e1e3f5cb0b224\">NODE_NAME_SET</a> = 0x07, </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae69668f8ce604a1b3d09c3314cdba5bf\">   50</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae69668f8ce604a1b3d09c3314cdba5bf\">NODE_NAME_RESULT</a> = 0x17, </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa45ed732c2c1b8f670d6730e6f7a684b5\">   51</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa45ed732c2c1b8f670d6730e6f7a684b5\">BROADCAST_KEY_REQUEST</a> = 0x08, </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faebca9b745a0bd1dedae14258e54e1838\">   52</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faebca9b745a0bd1dedae14258e54e1838\">BROADCAST_KEY_RESPONSE</a> = 0x18, </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa0c8da6c451065bed79ea70684e6f3fca\">   53</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa0c8da6c451065bed79ea70684e6f3fca\">CLIENT_HELLO</a> = 0xFF, </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa28914d3bb26ec8c2bd2d5ad9781cbf8c\">   54</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa28914d3bb26ec8c2bd2d5ad9781cbf8c\">SERVER_HELLO</a> = 0xFE, </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa32637f9c9b67f884990ed21097ebc543\">INVALIDATE_KEY</a> = 0xFB </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa32637f9c9b67f884990ed21097ebc543\">   56</a></span>&#160;};</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">   58</a></span>&#160;<span class=\"keyword\">enum</span> <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> {</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">   59</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a> = 0x00, </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">   60</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a> = 0x81, </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba4d6491239946f63d9cc27a2984c4fe59\">   61</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba4d6491239946f63d9cc27a2984c4fe59\">PROT_BUF</a> = 0x82, </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba578494bedfca043a7f16b17ae27c75bc\">   62</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a> = 0x83, </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba311c13f8df1217b0cd4d5537cb91311f\">   63</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba311c13f8df1217b0cd4d5537cb91311f\">BSON</a> = 0x84, </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba56f7b9e0a4250b6a5c73811ae092e686\">   64</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba56f7b9e0a4250b6a5c73811ae092e686\">CBOR</a> = 0x85, </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba298f796cee1bd5d6decfe81d4a98b554\">SMILE</a> = 0x86 </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba298f796cee1bd5d6decfe81d4a98b554\">   66</a></span>&#160;};</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160; </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">   68</a></span>&#160;<span class=\"keyword\">enum</span> <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">   69</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>,      </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">   70</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a>,   </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>    </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">   72</a></span>&#160;};</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160; </div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160; </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">   78</a></span>&#160;<span class=\"keyword\">enum</span> <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\">   79</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a> = 0x00, </div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6ad6e9d0b3e3d479305eb2ce4233f4eca6\">   80</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6ad6e9d0b3e3d479305eb2ce4233f4eca6\">WRONG_CLIENT_HELLO</a> = 0x01, </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a4d7f512e433223ce2caa44e787a2ddff\">   81</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a4d7f512e433223ce2caa44e787a2ddff\">WRONG_DATA</a> = 0x03, </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a975e594ca3839a0687f31cfbbdb6c90f\">   82</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a975e594ca3839a0687f31cfbbdb6c90f\">UNREGISTERED_NODE</a> = 0x04, </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a> = 0x05 </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a09a1d3d5daa36af5469fa79c12a027fe\">   84</a></span>&#160;};</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html\">   89</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span>{</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">   90</a></span>&#160;    uint32_t <a class=\"code\" href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">crc32</a>; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">   91</a></span>&#160;    uint8_t nodeKey[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">   92</a></span>&#160;    uint16_t <a class=\"code\" href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">nodeId</a>; </div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">   93</a></span>&#160;    uint8_t channel <span class=\"comment\">/*= DEFAULT_CHANNEL*/</span>; </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">   94</a></span>&#160;    uint8_t gateway[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]; </div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b\">   95</a></span>&#160;    int8_t <a class=\"code\" href=\"structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b\">rssi</a>; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">   96</a></span>&#160;    uint8_t networkKey[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">   97</a></span>&#160;    <span class=\"keywordtype\">char</span> networkName[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">   98</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">sleepy</a>; </div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">   99</a></span>&#160;    uint32_t sleepTime <span class=\"comment\">/*= 0*/</span>; </div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">  100</a></span>&#160;    <span class=\"keywordtype\">char</span> nodeName[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a> + 1]; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">  101</a></span>&#160;    uint8_t commErrors <span class=\"comment\">/*= 0*/</span>; </div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">  103</a></span>&#160;    <span class=\"keywordtype\">bool</span> nodeKeyValid <span class=\"comment\">/* = false*/</span>; </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e\">  104</a></span>&#160;    uint8_t broadcastKey[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67\">  105</a></span>&#160;    <span class=\"keywordtype\">bool</span> broadcastKeyValid <span class=\"comment\">/* = false*/</span>; </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">  106</a></span>&#160;    <span class=\"keywordtype\">bool</span> broadcastKeyRequested <span class=\"comment\">/* = false*/</span>; </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">  107</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> nodeRegisterStatus <span class=\"comment\">/*= UNREGISTERED*/</span>; </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">  108</a></span>&#160;    uint16_t <a class=\"code\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">lastMessageCounter</a>; </div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">  109</a></span>&#160;    uint16_t <a class=\"code\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">lastControlCounter</a>; </div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">  110</a></span>&#160;    uint16_t <a class=\"code\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">lastDownlinkMsgCounter</a>; </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;} <a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#acbdfeab1a5e492bc200768fa91041445\">  113</a></span>&#160;<span class=\"keyword\">typedef</span> <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a> <a class=\"code\" href=\"EnigmaIOTNode_8h.html#acbdfeab1a5e492bc200768fa91041445\">nodeMessageType_t</a>;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\">#if defined ARDUINO_ARCH_ESP8266 || defined ARDUINO_ARCH_ESP32</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, uint8_t len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)&gt; <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">onNodeDataRx_t</a>;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void ()&gt; <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">onConnected_t</a>;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)&gt; <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">onDisconnected_t</a>;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)&gt; <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a>;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (<span class=\"keywordtype\">void</span>)&gt; <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a>;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">  123</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">onNodeDataRx_t</a>)(<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, uint8_t len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">  124</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">onConnected_t</a>)();</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">  125</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">onDisconnected_t</a>)(<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">  126</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a>)(<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTNode_8h.html#aeafba3e3725226cdcb14a23c4e57c97a\">  127</a></span>&#160;<span class=\"keyword\">typedef</span> void (*<a class=\"code\" href=\"EnigmaIOTNode_8h.html#aeafba3e3725226cdcb14a23c4e57c97a\">onWiFiManagerStarted_t</a>)(void);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160; </div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html\">  134</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> {</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">  136</a></span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>; </div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">  137</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">flashBlue</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">  138</a></span>&#160;    int8_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a> = -1; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">  139</a></span>&#160;    <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">ledOnTime</a>; </div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">  140</a></span>&#160;    <a class=\"code\" href=\"classComms__halClass.html\">Comms_halClass</a>* <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>; </div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">  141</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">onNodeDataRx_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">notifyData</a>; </div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">  142</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">onConnected_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">notifyConnection</a>; </div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">  143</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">onDisconnected_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">notifyDisconnection</a>; </div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">  144</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a> = <span class=\"keyword\">true</span>; </div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">  145</a></span>&#160;    <a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>; </div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">  146</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">sleepRequested</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">  147</a></span>&#160;    uint64_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>; </div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">  148</a></span>&#160;    uint8_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">dataMessageSent</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">  149</a></span>&#160;    uint8_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">dataMessageSentLength</a> = 0; </div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">  150</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">dataMessageSendPending</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">  151</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">dataMessageSendEncoding</a> = <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a>; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">  152</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">dataMessageEncrypt</a> = <span class=\"keyword\">true</span>; </div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">  153</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">invalidateReason</a> = <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a>; </div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">  154</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">  155</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">otaError</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">  156</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">protectOTA</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">  157</a></span>&#160;    time_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">lastOTAmsg</a>; </div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">  158</a></span>&#160;    <span class=\"keywordtype\">boolean</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">indentifying</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">  159</a></span>&#160;    time_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">identifyStart</a>; </div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">  160</a></span>&#160;    clock_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">timeSyncPeriod</a> = <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">QUICK_SYNC_TIME</a>; </div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">  161</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">clockSyncEnabled</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">  162</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">shouldRestart</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">  163</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">restartReason</a>; </div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">  164</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">gatewaySearchStarted</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">  165</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">requestSearchGateway</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">  166</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">requestReportRSSI</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">  167</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">configCleared</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">  168</a></span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">resetPin</a> = -1; </div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">  169</a></span>&#160;    AsyncWiFiManager* <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>; </div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">  170</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">notifyWiFiManagerExit</a>; </div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">  171</a></span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">notifyWiFiManagerStarted</a>; </div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">  172</a></span>&#160;    time_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">cycleStartedTime</a>; </div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">  173</a></span>&#160;    int16_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">lastBroadcastMsgCounter</a>; </div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160; </div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">checkCRC</a> (<span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, uint32_t* crc);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160; </div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">startIdentifying</a> (time_t period);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160; </div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">stopIdentifying</a> ();</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160; </div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">loadRTCData</a> ();</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160; </div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">loadFlashData</a> ();</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160; </div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">saveFlashData</a> (<span class=\"keywordtype\">bool</span> fsOpen = <span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160; </div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">configWiFiManager</a> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>);</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160; </div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">sendRestart</a> ();</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160; </div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\">clientHello</a> ();</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160; </div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\">clockRequest</a> ();</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160; </div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\">processClockResponse</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count);</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160; </div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\">processServerHello</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count);</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160; </div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\">processInvalidateKey</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count);</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160; </div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">processBroadcastKeyMessage</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count);</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160; </div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">dataMessage</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType = <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>, <span class=\"keywordtype\">bool</span> encrypt = <span class=\"keyword\">true</span>, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding = <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>);</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160; </div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\">unencryptedDataMessage</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType = <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding = <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>);</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160; </div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\">processOTACommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160; </div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\">processControlCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <span class=\"keywordtype\">bool</span> broadcast);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160; </div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">processDownstreamData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> count, <span class=\"keywordtype\">bool</span> control = <span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160; </div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\">manageMessage</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, uint8_t count);</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160; </div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\">getStatus</a> (uint8_t* mac_addr, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160; </div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\">rx_cb</a> (uint8_t* mac_addr, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160; </div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\">tx_cb</a> (uint8_t* mac_addr, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160; </div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\">processGetSleepTimeCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160; </div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\">processSetSleepTimeCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160; </div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\">processSetIdentifyCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160; </div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\">processSetResetConfigCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160; </div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\">processSetRestartCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160; </div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\">processVersionCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buf, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160; </div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType, <span class=\"keywordtype\">bool</span> encrypt = <span class=\"keyword\">true</span>, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding = <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>);</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160; </div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">searchForGateway</a> (<a class=\"code\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">bool</span> shouldStoreData = <span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160; </div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">clearRTC</a> ();</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160; </div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">clearFlash</a> ();</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160; </div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ();</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160; </div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">checkResetButton</a> ();</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160; </div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">reportRSSI</a> ();</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160; </div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\">processGetRSSICommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160; </div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\">processGetNameCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160; </div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\">processSetNameResponse</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160; </div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\">processSetNameCommand</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160; </div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">sendNodeNameSet</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name);</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160; </div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (<a class=\"code\" href=\"classComms__halClass.html\">Comms_halClass</a>* <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>, uint8_t* gateway = NULL, uint8_t* networkKey = NULL, <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a> = <span class=\"keyword\">true</span>, <span class=\"keywordtype\">bool</span> sleepy = <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160; </div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22\">stop</a> ();</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160; </div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">restart</a> (<a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a> reason, <span class=\"keywordtype\">bool</span> reboot = <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160; </div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">setSleepTime</a> (uint32_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>, <span class=\"keywordtype\">bool</span> forceSleepForever = <span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160; </div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (uint8_t address[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]);</div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160; </div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;    uint32_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">getSleepTime</a> ();</div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160; </div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a742b9e627fee356913b069c64499cd5f\">  557</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a742b9e627fee356913b069c64499cd5f\">broadcastIsEnabled</a> () {</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">broadcastIsEnabled</a> ();</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160; </div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">  566</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">enableBroadcast</a> (<span class=\"keywordtype\">bool</span> broadcast = <span class=\"keyword\">true</span>) {</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;<span class=\"preprocessor\">#ifndef DISABLE_BRCAST</span></div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a2c6ecfa165b71155d3d25331ca56d98e\">enableBroadcast</a> (broadcast);</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67\">broadcastKeyValid</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a>.<a class=\"code\" href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">broadcastKeyRequested</a> = <span class=\"keyword\">false</span>; <span class=\"comment\">// Key is not requested yet</span></div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160; </div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> ();</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160; </div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">  584</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a> (<span class=\"keywordtype\">bool</span> clockSync = <span class=\"keyword\">true</span>) {</div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;        setenv (<span class=\"stringliteral\">&quot;TZ&quot;</span>, <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a\">TZINFO</a>, 1);</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;        tzset ();</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">clockSyncEnabled</a> = clockSync;</div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160; </div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a> (uint8_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>, time_t onTime = <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a>);</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160; </div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (<span class=\"keywordtype\">int</span> pin);</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160; </div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a15f69c66601b59bfc4bae47cf6075e55\">  609</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a15f69c66601b59bfc4bae47cf6075e55\">sendData</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding = <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>) {</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>, <span class=\"keyword\">true</span>, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160; </div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">sendHADiscoveryMessage</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len);</div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160; </div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160; </div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a2e6973be4195ba354607c631c587297e\">  628</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2e6973be4195ba354607c631c587297e\">sendUnencryptedData</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding = <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>) {</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>, <span class=\"keyword\">false</span>, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160; </div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">  655</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">onNodeDataRx_t</a> handler) {</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">notifyData</a> = handler;</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160; </div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">  682</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">onConnected_t</a> handler) {</div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">notifyConnection</a> = handler;</div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160; </div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">  711</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">onDisconnected_t</a> handler) {</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">notifyDisconnection</a> = handler;</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160; </div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">  719</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">onWiFiManagerExit</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a>) {</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">notifyWiFiManagerExit</a> = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a>;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160; </div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">  727</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">onWiFiManagerStarted</a> (<a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a>) {</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">notifyWiFiManagerStarted</a> = <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a>;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160; </div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">  735</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">addWiFiManagerParameter</a> (AsyncWiFiManagerParameter* p) {</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>) {</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a>-&gt;addParameter (p);</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160; </div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a> ();</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160; </div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;    int64_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">clock</a> ();</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160; </div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;    time_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">unixtime</a> ();</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160; </div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">hasClockSync</a> ();</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160; </div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf\">  770</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf\">isRegistered</a> () {</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>.<a class=\"code\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">isRegistered</a> ();</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160; </div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;    int8_t <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93\">getRSSI</a> ();</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160; </div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325\">resetConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160; </div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a3398ebecf52e1d7b5493d34ed011c38f\">  789</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a3398ebecf52e1d7b5493d34ed011c38f\">getOTArunning</a> () {</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a>;</div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160; </div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">  797</a></span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">getNode</a> () {</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;        <span class=\"keywordflow\">return</span> &amp;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a>;</div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160; </div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160; </div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;<span class=\"keyword\">extern</span> <a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> <a class=\"code\" href=\"EnigmaIOTNode_8h.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>;</div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160; </div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;<span class=\"comment\">//#endif // ESP8266</span></div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;<span class=\"preprocessor\">#endif // _ENIGMAIOTNODE_h</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a238294f8ca6888e5e6000592e0955888\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">EnigmaIOTNodeClass::otaRunning</a></div><div class=\"ttdeci\">bool otaRunning</div><div class=\"ttdoc\">True if OTA update has started.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00154\">EnigmaIOTNode.h:154</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2984b66fdb8a831c9c7cbf775afc82b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">EnigmaIOTNodeClass::notifyWiFiManagerExit</a></div><div class=\"ttdeci\">onWiFiManagerExit_t notifyWiFiManagerExit</div><div class=\"ttdoc\">Function called when configuration portal exits.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00170\">EnigmaIOTNode.h:170</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a70fa9cce1a3080b3e946783a791363d6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">EnigmaIOTNodeClass::otaError</a></div><div class=\"ttdeci\">bool otaError</div><div class=\"ttdoc\">True if OTA update has failed. This normally produces a restart.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00155\">EnigmaIOTNode.h:155</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a5c188f7db5bdde5837a02e4095c3b549\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">EnigmaIOTNodeClass::notifyData</a></div><div class=\"ttdeci\">onNodeDataRx_t notifyData</div><div class=\"ttdoc\">Callback that will be called on every message reception.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00141\">EnigmaIOTNode.h:141</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6ad6e9d0b3e3d479305eb2ce4233f4eca6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6ad6e9d0b3e3d479305eb2ce4233f4eca6\">WRONG_CLIENT_HELLO</a></div><div class=\"ttdeci\">@ WRONG_CLIENT_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00080\">EnigmaIOTNode.h:80</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ab35d557fff42f0a565ee2cae63d86140\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">EnigmaIOTNodeClass::unixtime</a></div><div class=\"ttdeci\">time_t unixtime()</div><div class=\"ttdoc\">Gets current time in seconds from 1970, if time is synchronized.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01460\">EnigmaIOTNode.cpp:1460</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a450524067c6c3ce8b2fda7e2c7d2c9e9\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">onDisconnected_t</a></div><div class=\"ttdeci\">void(* onDisconnected_t)(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00125\">EnigmaIOTNode.h:125</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa84d08335ed131183ff525c55c14f3148\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa84d08335ed131183ff525c55c14f3148\">UNENCRYPTED_NODE_DATA</a></div><div class=\"ttdeci\">@ UNENCRYPTED_NODE_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00038\">EnigmaIOTNode.h:38</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a7068191735c2fb154c857fc80660adc0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">EnigmaIOTNodeClass::protectOTA</a></div><div class=\"ttdeci\">bool protectOTA</div><div class=\"ttdoc\">True if OTA update was launched. OTA flag is stored on RTC so this disables writting.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00156\">EnigmaIOTNode.h:156</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_acbdfeab1a5e492bc200768fa91041445\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#acbdfeab1a5e492bc200768fa91041445\">nodeMessageType_t</a></div><div class=\"ttdeci\">nodeMessageType nodeMessageType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00113\">EnigmaIOTNode.h:113</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_af9e7c0a7f49a26a8ad8cbba8ad4a8481\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">rtcmem_data_t::nodeId</a></div><div class=\"ttdeci\">uint16_t nodeId</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00092\">EnigmaIOTNode.h:92</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a1c015860a4a1650d3e2653212d13179e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">EnigmaIOTNodeClass::hasClockSync</a></div><div class=\"ttdeci\">bool hasClockSync()</div><div class=\"ttdoc\">Checks if internal clock is synchronized to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01464\">EnigmaIOTNode.cpp:1464</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afe087ce005069779bf699e39695397f4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass::enableClockSync</a></div><div class=\"ttdeci\">void enableClockSync(bool clockSync=true)</div><div class=\"ttdoc\">Controls clock synchronization function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00584\">EnigmaIOTNode.h:584</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa6b9b36c3722a1256ac7fa097bf10f4de\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa6b9b36c3722a1256ac7fa097bf10f4de\">CONTROL_DATA</a></div><div class=\"ttdeci\">@ CONTROL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00043\">EnigmaIOTNode.h:43</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa28914d3bb26ec8c2bd2d5ad9781cbf8c\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa28914d3bb26ec8c2bd2d5ad9781cbf8c\">SERVER_HELLO</a></div><div class=\"ttdeci\">@ SERVER_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00054\">EnigmaIOTNode.h:54</a></div></div>\n<div class=\"ttc\" id=\"acryptModule_8h_html\"><div class=\"ttname\"><a href=\"cryptModule_8h.html\">cryptModule.h</a></div><div class=\"ttdoc\">Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions.</div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html\"><div class=\"ttname\"><a href=\"NodeList_8h.html\">NodeList.h</a></div><div class=\"ttdoc\">EnigmaIoT sensor node management structures.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fae69668f8ce604a1b3d09c3314cdba5bf\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae69668f8ce604a1b3d09c3314cdba5bf\">NODE_NAME_RESULT</a></div><div class=\"ttdeci\">@ NODE_NAME_RESULT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00050\">EnigmaIOTNode.h:50</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a1ddc7fce5233d3959cfb52dd3c7f605c\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\">EnigmaIOTNodeClass::clientHello</a></div><div class=\"ttdeci\">bool clientHello()</div><div class=\"ttdoc\">Build a ClientHello messange and send it to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01192\">EnigmaIOTNode.cpp:1192</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eba56f7b9e0a4250b6a5c73811ae092e686\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba56f7b9e0a4250b6a5c73811ae092e686\">CBOR</a></div><div class=\"ttdeci\">@ CBOR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00064\">EnigmaIOTNode.h:64</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ad7a98adabe272649c3c65efd1c2cfe45\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">EnigmaIOTNodeClass::searchForGateway</a></div><div class=\"ttdeci\">bool searchForGateway(rtcmem_data_t *data, bool shouldStoreData=false)</div><div class=\"ttdoc\">Starts searching for a gateway that it using configured Network Name as WiFi AP. Stores this info for...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00860\">EnigmaIOTNode.cpp:860</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a025eed5564c31f411fc6950a5ecd4c40\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NODE_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00025\">EnigmaIoTconfigAdvanced.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a416d8a7660d1eaa85422247e9e918781\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">EnigmaIOTNodeClass::led</a></div><div class=\"ttdeci\">int8_t led</div><div class=\"ttdoc\">IO Pin that corresponds to Tx LED. Default value disables LED. It is initialized with setLed method.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00138\">EnigmaIOTNode.h:138</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a></div><div class=\"ttdeci\">@ RAW</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00059\">EnigmaIOTNode.h:59</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa01b2a3fb2e751c9536ae814b4b8919c3\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa01b2a3fb2e751c9536ae814b4b8919c3\">HA_DISCOVERY_MESSAGE</a></div><div class=\"ttdeci\">@ HA_DISCOVERY_MESSAGE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00045\">EnigmaIOTNode.h:45</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a461dd5c9def2768c3c4b87cfc9be6ef8\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">EnigmaIOTNodeClass::checkCRC</a></div><div class=\"ttdeci\">bool checkCRC(const uint8_t *buf, size_t count, uint32_t *crc)</div><div class=\"ttdoc\">Check that a given CRC matches to calulated value from a buffer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01182\">EnigmaIOTNode.cpp:1182</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a15f69c66601b59bfc4bae47cf6075e55\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a15f69c66601b59bfc4bae47cf6075e55\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Starts a data message transmission.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00609\">EnigmaIOTNode.h:609</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae6768d968b8f72fb12001fa3895a4670\"><div class=\"ttname\"><a href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">Node::broadcastIsEnabled</a></div><div class=\"ttdeci\">bool broadcastIsEnabled()</div><div class=\"ttdoc\">Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted b...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00373\">NodeList.h:373</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a13270bdeee8b5e7569609fcc9045a27b\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b\">rtcmem_data_t::rssi</a></div><div class=\"ttdeci\">int8_t rssi</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00095\">EnigmaIOTNode.h:95</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a4efeeca90488a14e95283c31d70ee0e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\">EnigmaIOTNodeClass::rx_cb</a></div><div class=\"ttdeci\">static void rx_cb(uint8_t *mac_addr, uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Function that will be called anytime this node receives a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01174\">EnigmaIOTNode.cpp:1174</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aa632927a0a9da18d3605e29aa3a055f2\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\">EnigmaIOTNodeClass::processOTACommand</a></div><div class=\"ttdeci\">bool processOTACommand(const uint8_t *mac, const uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Processes a single OTA update command or data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02181\">EnigmaIOTNode.cpp:2181</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a09782f9f3ca09d7fd79b8b70e130a206\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">EnigmaIOTNodeClass::dataMessage</a></div><div class=\"ttdeci\">bool dataMessage(const uint8_t *data, size_t len, dataMessageType_t dataMsgType=DATA_TYPE, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Builds, encrypts and sends a Data message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01635\">EnigmaIOTNode.cpp:1635</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a77cde0d6b3da9d409d46bdc85147724a\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a\">TZINFO</a></div><div class=\"ttdeci\">#define TZINFO</div><div class=\"ttdoc\">Time zone.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00020\">EnigmaIoTconfig.h:20</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a6432011ed34012e55d393bfd0c99219e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">EnigmaIOTNodeClass::setSleepTime</a></div><div class=\"ttdeci\">void setSleepTime(uint32_t sleepTime, bool forceSleepForever=false)</div><div class=\"ttdoc\">Allows to configure a new sleep time period from user code.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00948\">EnigmaIOTNode.cpp:948</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ab348fec65af29c28ebc8c1a342e3b241\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\">EnigmaIOTNodeClass::processSetSleepTimeCommand</a></div><div class=\"ttdeci\">bool processSetSleepTimeCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request to set new sleep time configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02118\">EnigmaIOTNode.cpp:2118</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a32a98693bfc71a16f8f3c6db7053221c\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\">EnigmaIOTNodeClass::processGetNameCommand</a></div><div class=\"ttdeci\">bool processGetNameCommand(const uint8_t *mac, const uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Processes a request to get Node name and address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01795\">EnigmaIOTNode.cpp:1795</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a></div><div class=\"ttdoc\">Parameter configuration.</div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a22c20e35a06410f1060c11ef669ab96a\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">rtcmem_data_t::crc32</a></div><div class=\"ttdeci\">uint32_t crc32</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00090\">EnigmaIOTNode.h:90</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a3da4f4369bb769b62d742990cf7aab67\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67\">rtcmem_data_t::broadcastKeyValid</a></div><div class=\"ttdeci\">bool broadcastKeyValid</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00105\">EnigmaIOTNode.h:105</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afa97e9b5f9e73702c545a5e7b4c2c15f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">EnigmaIOTNodeClass::clearRTC</a></div><div class=\"ttdeci\">void clearRTC()</div><div class=\"ttdoc\">Clears configuration stored in RTC memory to recover factory state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02093\">EnigmaIOTNode.cpp:2093</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a55aa8affe03e929129ee30ac33c954c5\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">EnigmaIOTNodeClass::sendRestart</a></div><div class=\"ttdeci\">void sendRestart()</div><div class=\"ttdoc\">Sends a restart notification control message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00056\">EnigmaIOTNode.cpp:56</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eba298f796cee1bd5d6decfe81d4a98b554\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba298f796cee1bd5d6decfe81d4a98b554\">SMILE</a></div><div class=\"ttdeci\">@ SMILE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00066\">EnigmaIOTNode.h:65</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa21ca6763c97e4804ee6957d039443d2d\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00039\">EnigmaIOTNode.h:39</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2cf188fbd1d22775605eea93ed561a53\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">EnigmaIOTNodeClass::checkResetButton</a></div><div class=\"ttdeci\">void checkResetButton()</div><div class=\"ttdoc\">Checks reset button status during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00674\">EnigmaIOTNode.cpp:674</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9865adf18595ebc6eb73154e6267380e\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NETWORK_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00024\">EnigmaIoTconfigAdvanced.h:24</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eba4d6491239946f63d9cc27a2984c4fe59\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba4d6491239946f63d9cc27a2984c4fe59\">PROT_BUF</a></div><div class=\"ttdeci\">@ PROT_BUF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00061\">EnigmaIOTNode.h:61</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aea10660384ee02f0e6cf1aa3f1786144\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">EnigmaIOTNodeClass::resetPin</a></div><div class=\"ttdeci\">int resetPin</div><div class=\"ttdoc\">Pin used to reset configuration if it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00168\">EnigmaIOTNode.h:168</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa45ed732c2c1b8f670d6730e6f7a684b5\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa45ed732c2c1b8f670d6730e6f7a684b5\">BROADCAST_KEY_REQUEST</a></div><div class=\"ttdeci\">@ BROADCAST_KEY_REQUEST</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00051\">EnigmaIOTNode.h:51</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a1e12d39c7745876a5391182975e32a8d\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">rtcmem_data_t::lastDownlinkMsgCounter</a></div><div class=\"ttdeci\">uint16_t lastDownlinkMsgCounter</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00110\">EnigmaIOTNode.h:110</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a4c9590d8531f7da5643983f5519d40a9\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">EnigmaIOTNodeClass::notifyWiFiManagerStarted</a></div><div class=\"ttdeci\">simpleEventHandler_t notifyWiFiManagerStarted</div><div class=\"ttdoc\">Function called when configuration portal is started.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00171\">EnigmaIOTNode.h:171</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a3398ebecf52e1d7b5493d34ed011c38f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a3398ebecf52e1d7b5493d34ed011c38f\">EnigmaIOTNodeClass::getOTArunning</a></div><div class=\"ttdeci\">bool getOTArunning()</div><div class=\"ttdoc\">Checks if OTA is running.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00789\">EnigmaIOTNode.h:789</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a9d5665e7dfd598c618e5388b07271bb1\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">EnigmaIOTNodeClass::requestReportRSSI</a></div><div class=\"ttdeci\">bool requestReportRSSI</div><div class=\"ttdoc\">Flag to control RSSI reporting.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00166\">EnigmaIOTNode.h:166</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6a975e594ca3839a0687f31cfbbdb6c90f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a975e594ca3839a0687f31cfbbdb6c90f\">UNREGISTERED_NODE</a></div><div class=\"ttdeci\">@ UNREGISTERED_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00082\">EnigmaIOTNode.h:82</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a3e3e9744eef70673aaae93c27f4b0218\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">EnigmaIOTNodeClass::restartReason</a></div><div class=\"ttdeci\">restartReason_t restartReason</div><div class=\"ttdoc\">Reason of restart (OTA, restart requested, configuration reset)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00163\">EnigmaIOTNode.h:163</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aa2a4910739da2e9181f2274cbc4d078a\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">EnigmaIOTNodeClass::indentifying</a></div><div class=\"ttdeci\">boolean indentifying</div><div class=\"ttdoc\">True if node has its led flashing to be identified.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00158\">EnigmaIOTNode.h:158</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acd0424de61195d76ff09a7462d539d7e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\">EnigmaIOTNodeClass::processSetNameResponse</a></div><div class=\"ttdeci\">bool processSetNameResponse(const uint8_t *mac, const uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Processes a response to set Node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01829\">EnigmaIOTNode.cpp:1829</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a6d12566cf69b6429f5cce300ab1f39c9\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a></div><div class=\"ttdeci\">enum node_status status_t</div><div class=\"ttdoc\">Node state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00001\">NodeList.h:39</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a4be66e40b4882a486cf8ee80a4277438\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">EnigmaIOTNodeClass::flashBlue</a></div><div class=\"ttdeci\">bool flashBlue</div><div class=\"ttdoc\">If true Tx LED will be flashed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00137\">EnigmaIOTNode.h:137</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a></div><div class=\"ttdeci\">dataMessageType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00068\">EnigmaIOTNode.h:68</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a0144b183ee216aa5b977086ae1753d3c\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">EnigmaIOTNodeClass::getSleepTime</a></div><div class=\"ttdeci\">uint32_t getSleepTime()</div><div class=\"ttdoc\">Returns sleep period in seconds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00077\">EnigmaIOTNode.cpp:77</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2e6973be4195ba354607c631c587297e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2e6973be4195ba354607c631c587297e\">EnigmaIOTNodeClass::sendUnencryptedData</a></div><div class=\"ttdeci\">bool sendUnencryptedData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Starts a data message transmission.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00628\">EnigmaIOTNode.h:628</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a742b9e627fee356913b069c64499cd5f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a742b9e627fee356913b069c64499cd5f\">EnigmaIOTNodeClass::broadcastIsEnabled</a></div><div class=\"ttdeci\">bool broadcastIsEnabled()</div><div class=\"ttdoc\">Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted b...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00557\">EnigmaIOTNode.h:557</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a7fca29c7cd9cba0115ec42566250275d\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">EnigmaIOTNodeClass::comm</a></div><div class=\"ttdeci\">Comms_halClass * comm</div><div class=\"ttdoc\">Comms abstraction layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00140\">EnigmaIOTNode.h:140</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eba311c13f8df1217b0cd4d5537cb91311f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba311c13f8df1217b0cd4d5537cb91311f\">BSON</a></div><div class=\"ttdeci\">@ BSON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00063\">EnigmaIOTNode.h:63</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fade8205c810264376dfc45dc2b72e116c\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fade8205c810264376dfc45dc2b72e116c\">DOWNSTREAM_BRCAST_CTRL_DATA</a></div><div class=\"ttdeci\">@ DOWNSTREAM_BRCAST_CTRL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00046\">EnigmaIOTNode.h:46</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a3d6b6cce8aa2484af80617db10da4ea4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">EnigmaIOTNodeClass::dataMessageSent</a></div><div class=\"ttdeci\">uint8_t dataMessageSent[MAX_MESSAGE_LENGTH]</div><div class=\"ttdoc\">Buffer where sent message is stored in case of retransmission is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00148\">EnigmaIOTNode.h:148</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></div><div class=\"ttdeci\">@ DATA_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00069\">EnigmaIOTNode.h:69</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a04a1d59adae7dc0786ac6e066c5d1263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\">EnigmaIOTNodeClass::processSetIdentifyCommand</a></div><div class=\"ttdeci\">bool processSetIdentifyCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request to start indicate to identify a node visually.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02033\">EnigmaIOTNode.cpp:2033</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a10d221c32311c32d19d670a68044aca4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">EnigmaIOTNodeClass::timeSyncPeriod</a></div><div class=\"ttdeci\">clock_t timeSyncPeriod</div><div class=\"ttdoc\">Clock synchronization period.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00160\">EnigmaIOTNode.h:160</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a1d62eaa08920568f019ef240dd98dc3b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\">EnigmaIOTNodeClass::clockRequest</a></div><div class=\"ttdeci\">bool clockRequest()</div><div class=\"ttdoc\">Build a ClockRequest messange and send it to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01291\">EnigmaIOTNode.cpp:1291</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aafdd17efe90bfc2dd9af758633034f82\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">EnigmaIOTNodeClass::enableBroadcast</a></div><div class=\"ttdeci\">void enableBroadcast(bool broadcast=true)</div><div class=\"ttdoc\">Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00566\">EnigmaIOTNode.h:566</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eba578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00062\">EnigmaIOTNode.h:62</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a81ab5be7b67c28948ea5de40e5d3c360\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a></div><div class=\"ttdeci\">void sleep()</div><div class=\"ttdoc\">Requests transition to sleep mode (low energy state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01564\">EnigmaIOTNode.cpp:1564</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7c95cb7d1926120867fd8a4246f90f5c\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a></div><div class=\"ttdeci\">void(* simpleEventHandler_t)(void)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00101\">EnigmaIOTGateway.h:101</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa32637f9c9b67f884990ed21097ebc543\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa32637f9c9b67f884990ed21097ebc543\">INVALIDATE_KEY</a></div><div class=\"ttdeci\">@ INVALIDATE_KEY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00056\">EnigmaIOTNode.h:55</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a3c807080f0701745c68182181677a98d\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\">EnigmaIOTNodeClass::processSetResetConfigCommand</a></div><div class=\"ttdeci\">bool processSetResetConfigCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request to reset node configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02059\">EnigmaIOTNode.cpp:2059</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6a4d7f512e433223ce2caa44e787a2ddff\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a4d7f512e433223ce2caa44e787a2ddff\">WRONG_DATA</a></div><div class=\"ttdeci\">@ WRONG_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00081\">EnigmaIOTNode.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a3e50f907a24843d7752e81664e28fde9\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\">EnigmaIOTNodeClass::tx_cb</a></div><div class=\"ttdeci\">static void tx_cb(uint8_t *mac_addr, uint8_t status)</div><div class=\"ttdoc\">Function that will be called anytime this node sends a message to indicate status result of sending p...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01178\">EnigmaIOTNode.cpp:1178</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a777ffbcfe25563aae4ddbb77bdca4fc0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\">EnigmaIOTNodeClass::processServerHello</a></div><div class=\"ttdeci\">bool processServerHello(const uint8_t *mac, const uint8_t *buf, size_t count)</div><div class=\"ttdoc\">Gets a buffer containing a ServerHello message and process it. It uses that message to calculate a sh...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01471\">EnigmaIOTNode.cpp:1471</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a446963c57800cd34607bcc6fa1e933e9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">QUICK_SYNC_TIME</a></div><div class=\"ttdeci\">static const unsigned int QUICK_SYNC_TIME</div><div class=\"ttdoc\">Period of clock synchronization request in case of resync is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00046\">EnigmaIoTconfig.h:46</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a43809462401bef0a7697175450f025ae\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">EnigmaIOTNodeClass::onWiFiManagerExit</a></div><div class=\"ttdeci\">void onWiFiManagerExit(onWiFiManagerExit_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager exit.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00719\">EnigmaIOTNode.h:719</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_ae441a9d80bb39bdc39aee158a5d9f114\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">rtcmem_data_t::lastMessageCounter</a></div><div class=\"ttdeci\">uint16_t lastMessageCounter</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00108\">EnigmaIOTNode.h:108</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a531eee8dc001da6f1f1393c1cc632b09\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">EnigmaIOTNodeClass::clearFlash</a></div><div class=\"ttdeci\">void clearFlash()</div><div class=\"ttdoc\">Clears configuration stored in flash to recover factory state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00464\">EnigmaIOTNode.cpp:464</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a98ed5cb782d6c980e81392c82beec9fa\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">EnigmaIOTNodeClass::lastBroadcastMsgCounter</a></div><div class=\"ttdeci\">int16_t lastBroadcastMsgCounter</div><div class=\"ttdoc\">Counter for broadcast messages from gateway *‍/.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00173\">EnigmaIOTNode.h:173</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fae5aa3bb71dda4aa9ba38ca2a5eeba422\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae5aa3bb71dda4aa9ba38ca2a5eeba422\">DOWNSTREAM_BRCAST_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_BRCAST_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00042\">EnigmaIOTNode.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a7d5403fd3a4bcaea590b3aa919c141dc\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">EnigmaIOTNodeClass::restart</a></div><div class=\"ttdeci\">void restart(restartReason_t reason, bool reboot=true)</div><div class=\"ttdoc\">Sets connection as unregistered to force a resyncrhonisation after boot.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02351\">EnigmaIOTNode.cpp:2351</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a41984c7560df0af008fc526ee38b0b42\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">EnigmaIOTNodeClass::configWiFiManager</a></div><div class=\"ttdeci\">bool configWiFiManager(rtcmem_data_t *data)</div><div class=\"ttdoc\">Starts configuration AP and web server and gets settings from it.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00481\">EnigmaIOTNode.cpp:481</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a256f6a64dac541f374d00349d3a3e325\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325\">EnigmaIOTNodeClass::resetConfig</a></div><div class=\"ttdeci\">void resetConfig()</div><div class=\"ttdoc\">Deletes configuration file stored on flash. It makes neccessary to configure it again using WiFi Port...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00044\">EnigmaIOTNode.cpp:44</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a358bcf3efcf3a3c08249409852590e91\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">EnigmaIOTNodeClass::sleepTime</a></div><div class=\"ttdeci\">uint64_t sleepTime</div><div class=\"ttdoc\">Time in microseconds that this node will be slept between measurements.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00147\">EnigmaIOTNode.h:147</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fac8a74f458aed6681bf199f1ce2f9eb03\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00041\">EnigmaIOTNode.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a659fca03ecdfd18e19be1b39b4e703b3\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">EnigmaIOTNodeClass::stopIdentifying</a></div><div class=\"ttdeci\">void stopIdentifying()</div><div class=\"ttdoc\">Stops node identification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00669\">EnigmaIOTNode.cpp:669</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a074be31e720b8d50da8e94b1c0012afe\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">EnigmaIOTNodeClass::dataMessageSendPending</a></div><div class=\"ttdeci\">bool dataMessageSendPending</div><div class=\"ttdoc\">True in case of message retransmission is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00150\">EnigmaIOTNode.h:150</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ae2da55526a67b70c0b724fe1d856cc72\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">EnigmaIOTNodeClass::notifyConnection</a></div><div class=\"ttdeci\">onConnected_t notifyConnection</div><div class=\"ttdoc\">Callback that will be called anytime a new node is registered.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00142\">EnigmaIOTNode.h:142</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7faebca9b745a0bd1dedae14258e54e1838\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faebca9b745a0bd1dedae14258e54e1838\">BROADCAST_KEY_RESPONSE</a></div><div class=\"ttdeci\">@ BROADCAST_KEY_RESPONSE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00052\">EnigmaIOTNode.h:52</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a></div><div class=\"ttdeci\">restartReason_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00041\">NodeList.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acb396ad8481d5fe7c99227cae4a1f1cf\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">EnigmaIOTNodeClass::useCounter</a></div><div class=\"ttdeci\">bool useCounter</div><div class=\"ttdoc\">true means that data message counter will be used to mark message order</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00144\">EnigmaIOTNode.h:144</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a59f5ef49f540e586fb43dc984c0ed696\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\">EnigmaIOTNodeClass::processControlCommand</a></div><div class=\"ttdeci\">bool processControlCommand(const uint8_t *mac, const uint8_t *data, size_t len, bool broadcast)</div><div class=\"ttdoc\">Processes a control command. Does not propagate to user code.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02366\">EnigmaIOTNode.cpp:2366</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a></div><div class=\"ttdeci\">@ UNKNOWN_ERROR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00079\">EnigmaIOTNode.h:79</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a92cabfdedc76da41398b548ff7e6e799\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">EnigmaIOTNodeClass::onWiFiManagerStarted</a></div><div class=\"ttdeci\">void onWiFiManagerStarted(simpleEventHandler_t handle)</div><div class=\"ttdoc\">Register callback to be called on wifi manager start.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00727\">EnigmaIOTNode.h:727</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a27731975d4dc4feeafb7ac42ab5a4035\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\">EnigmaIOTNodeClass::processSetNameCommand</a></div><div class=\"ttdeci\">bool processSetNameCommand(const uint8_t *mac, const uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Processes a request to set Node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01899\">EnigmaIOTNode.cpp:1899</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_af5a1e79dde5802d9f3b10583dd9eaa78\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">rtcmem_data_t::lastControlCounter</a></div><div class=\"ttdeci\">uint16_t lastControlCounter</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00109\">EnigmaIOTNode.h:109</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a43abab3a73d46ff99f33c8596512dcaf\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf\">EnigmaIOTNodeClass::isRegistered</a></div><div class=\"ttdeci\">bool isRegistered()</div><div class=\"ttdoc\">Checks if node is registered.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00770\">EnigmaIOTNode.h:770</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13b4e0476b9afe933303985e9a7025f1\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">EnigmaIOTNodeClass::ledOnTime</a></div><div class=\"ttdeci\">unsigned int ledOnTime</div><div class=\"ttdoc\">Time that LED is On during flash. Initalized on setLed</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00139\">EnigmaIOTNode.h:139</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a59edd64bf4bf9acf6b18b6af90c9a435\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">EnigmaIOTNodeClass::node</a></div><div class=\"ttdeci\">Node node</div><div class=\"ttdoc\">Node abstraction to store context.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00136\">EnigmaIOTNode.h:136</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a45670fbcb6213e0a028e97569d988249\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">EnigmaIOTNodeClass::sendNodeNameSet</a></div><div class=\"ttdeci\">bool sendNodeNameSet(const char *name)</div><div class=\"ttdoc\">Informs Gateway about custom node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01936\">EnigmaIOTNode.cpp:1936</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a8d168a19f1c868e2cdcd7f11f70e0742\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">EnigmaIOTNodeClass::addWiFiManagerParameter</a></div><div class=\"ttdeci\">void addWiFiManagerParameter(AsyncWiFiManagerParameter *p)</div><div class=\"ttdoc\">Adds a parameter to configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00735\">EnigmaIOTNode.h:735</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a9233d49a0d125e9c7054c6e70f377d56\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\">EnigmaIOTNodeClass::processSetRestartCommand</a></div><div class=\"ttdeci\">bool processSetRestartCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request to restar node mcu.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02053\">EnigmaIOTNode.cpp:2053</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a39fd0a21844a920f3a237e25311f58f8\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">EnigmaIOTNodeClass::invalidateReason</a></div><div class=\"ttdeci\">nodeInvalidateReason_t invalidateReason</div><div class=\"ttdoc\">Last key invalidation reason.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00153\">EnigmaIOTNode.h:153</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ad3f6f92f204d4667e2a577cd23965f69\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">EnigmaIOTNodeClass::rtcmem_data</a></div><div class=\"ttdeci\">rtcmem_data_t rtcmem_data</div><div class=\"ttdoc\">Context data to be stored on persistent storage.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00145\">EnigmaIOTNode.h:145</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af1408c0ed378a9b46e62d98f88545893\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">EnigmaIOTNodeClass::loadRTCData</a></div><div class=\"ttdeci\">bool loadRTCData()</div><div class=\"ttdoc\">Loads configuration from RTC data. Uses a CRC to check data integrity.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00221\">EnigmaIOTNode.cpp:221</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_adbabb6a770438b4cfbb0f89cf2cb1795\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">EnigmaIOTNodeClass::clockSyncEnabled</a></div><div class=\"ttdeci\">bool clockSyncEnabled</div><div class=\"ttdoc\">If true clock is synchronized with Gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00161\">EnigmaIOTNode.h:161</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a863ca9be67da8cdc5fb9447378021e07\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a></div><div class=\"ttdeci\">const uint8_t KEY_LENGTH</div><div class=\"ttdoc\">Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00070\">EnigmaIoTconfigAdvanced.h:70</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a95a7b8677828b1fe4c6e45a13deeb83b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">EnigmaIOTNodeClass::processBroadcastKeyMessage</a></div><div class=\"ttdeci\">bool processBroadcastKeyMessage(const uint8_t *mac, const uint8_t *buf, size_t count)</div><div class=\"ttdoc\">Gets a buffer containing a BroadcastKey message and process it. This key is used to send and receive ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02408\">EnigmaIOTNode.cpp:2408</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a0186926009fc565b05f5a2c37dfb3649\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">EnigmaIOTNodeClass::sleepRequested</a></div><div class=\"ttdeci\">bool sleepRequested</div><div class=\"ttdoc\">true means that this node will sleep as soon a message is sent and downlink wait time has passed</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00146\">EnigmaIOTNode.h:146</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa766d5c890baa0b6a0e7e1e3f5cb0b224\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa766d5c890baa0b6a0e7e1e3f5cb0b224\">NODE_NAME_SET</a></div><div class=\"ttdeci\">@ NODE_NAME_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00049\">EnigmaIOTNode.h:49</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ac2c135a9d3623b28dda13acdbd4d5615\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\">EnigmaIOTNodeClass::processVersionCommand</a></div><div class=\"ttdeci\">bool processVersionCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request firmware version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02163\">EnigmaIOTNode.cpp:2163</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7faffd78f537f0c30f76f209e5afd106843\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faffd78f537f0c30f76f209e5afd106843\">SENSOR_BRCAST_DATA</a></div><div class=\"ttdeci\">@ SENSOR_BRCAST_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00037\">EnigmaIOTNode.h:37</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aab18d9b24e08c00bcbac6bd5f1792d63\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">EnigmaIOTNodeClass::processDownstreamData</a></div><div class=\"ttdeci\">bool processDownstreamData(const uint8_t *mac, const uint8_t *buf, size_t count, bool control=false)</div><div class=\"ttdoc\">Processes downstream data from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02425\">EnigmaIOTNode.cpp:2425</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afff6af9384f1f217168473b1df017d78\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">EnigmaIOTNodeClass::wifiManager</a></div><div class=\"ttdeci\">AsyncWiFiManager * wifiManager</div><div class=\"ttdoc\">Wifi configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00169\">EnigmaIOTNode.h:169</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ad35575e4aa02a2ef38baa14a2dea0f67\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\">EnigmaIOTNodeClass::processClockResponse</a></div><div class=\"ttdeci\">bool processClockResponse(const uint8_t *mac, const uint8_t *buf, size_t count)</div><div class=\"ttdoc\">Gets a buffer containing a ClockResponse message and process it. It uses that message to calculate cl...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01367\">EnigmaIOTNode.cpp:1367</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a436eb0a595405e52dc3a937c5968447f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass::sendHADiscoveryMessage</a></div><div class=\"ttdeci\">bool sendHADiscoveryMessage(const uint8_t *data, size_t len)</div><div class=\"ttdoc\">Builds, encrypts and sends a HomeAssistant discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01764\">EnigmaIOTNode.cpp:1764</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a7a907754d1a1cc7e4cd9225f1be82c63\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">rtcmem_data_t::broadcastKeyRequested</a></div><div class=\"ttdeci\">bool broadcastKeyRequested</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00106\">EnigmaIOTNode.h:106</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2fbd4d4a8c9e29873e69d408bff0d735\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">EnigmaIOTNodeClass::dataMessageEncrypt</a></div><div class=\"ttdeci\">bool dataMessageEncrypt</div><div class=\"ttdoc\">Message encryption enabled. Stored for use in case of message retransmission is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00152\">EnigmaIOTNode.h:152</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html\"><div class=\"ttname\"><a href=\"classNode.html\">Node</a></div><div class=\"ttdoc\">Class definition for a single sensor Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00109\">NodeList.h:109</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa50ab02cc83b80322e63edd2e2779a735\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa50ab02cc83b80322e63edd2e2779a735\">CLOCK_REQUEST</a></div><div class=\"ttdeci\">@ CLOCK_REQUEST</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00047\">EnigmaIOTNode.h:47</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ad3d2d41b518fbbb99d6c4d8824b9d4bd\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">EnigmaIOTNodeClass::lastOTAmsg</a></div><div class=\"ttdeci\">time_t lastOTAmsg</div><div class=\"ttdoc\">Time when last OTA update message has received. This is used to control timeout.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00157\">EnigmaIOTNode.h:157</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6a09a1d3d5daa36af5469fa79c12a027fe\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a09a1d3d5daa36af5469fa79c12a027fe\">KEY_EXPIRED</a></div><div class=\"ttdeci\">@ KEY_EXPIRED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00084\">EnigmaIOTNode.h:83</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a2c6ecfa165b71155d3d25331ca56d98e\"><div class=\"ttname\"><a href=\"classNode.html#a2c6ecfa165b71155d3d25331ca56d98e\">Node::enableBroadcast</a></div><div class=\"ttdeci\">void enableBroadcast(bool broadcast)</div><div class=\"ttdoc\">Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00386\">NodeList.h:386</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a0e506efc2aa99694bfa13a59b07d55cc\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">EnigmaIOTNodeClass::notifyDisconnection</a></div><div class=\"ttdeci\">onDisconnected_t notifyDisconnection</div><div class=\"ttdoc\">Callback that will be called anytime a node is disconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00143\">EnigmaIOTNode.h:143</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a0b809fd0304e6e55173ac1e6fa8d3dc8\"><div class=\"ttname\"><a href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">Node::isRegistered</a></div><div class=\"ttdeci\">bool isRegistered()</div><div class=\"ttdoc\">Gets registration state of this node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00292\">NodeList.h:292</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a9ffe72d0ffb67d58f2e435308433b8ad\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">EnigmaIOTNodeClass::identifyStart</a></div><div class=\"ttdeci\">time_t identifyStart</div><div class=\"ttdoc\">Time when identification started flashing. Used to control identification timeout.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00159\">EnigmaIOTNode.h:159</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a22c565018d72ac1df23a765a713fd768\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\">EnigmaIOTNodeClass::processInvalidateKey</a></div><div class=\"ttdeci\">nodeInvalidateReason_t processInvalidateKey(const uint8_t *mac, const uint8_t *buf, size_t count)</div><div class=\"ttdoc\">Gets a buffer containing an InvalidateKey message and process it. This trigger a new key agreement to...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02527\">EnigmaIOTNode.cpp:2527</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7faa8ba55203a30122cc271cc66b2909b21\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faa8ba55203a30122cc271cc66b2909b21\">SENSOR_DATA</a></div><div class=\"ttdeci\">@ SENSOR_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00036\">EnigmaIOTNode.h:36</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a187f3eb82f9948d5b53bd7eb480f1dd4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a></div><div class=\"ttdeci\">void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00089\">EnigmaIOTNode.cpp:89</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ae1bb8b93c739fced2c695e47a5242f9a\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">EnigmaIOTNodeClass::saveRTCData</a></div><div class=\"ttdeci\">bool saveRTCData()</div><div class=\"ttdoc\">Save configuration to RTC to store current status and recover it after deep sleep.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00433\">EnigmaIOTNode.cpp:433</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a8574c3435e748fbca1b99eeec4c770c2\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">EnigmaIOTNodeClass::loadFlashData</a></div><div class=\"ttdeci\">bool loadFlashData()</div><div class=\"ttdoc\">Loads configuration from flash memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00270\">EnigmaIOTNode.cpp:270</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ac6f82e2e104008daffa7b6f17abbcfdc\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\">EnigmaIOTNodeClass::unencryptedDataMessage</a></div><div class=\"ttdeci\">bool unencryptedDataMessage(const uint8_t *data, size_t len, dataMessageType_t dataMsgType=DATA_TYPE, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Builds and sends a Data message without encryption. Not recommended, use it only if you absolutely ne...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01574\">EnigmaIOTNode.cpp:1574</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa597b515e2c48496c513e6d502a7528c0\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa597b515e2c48496c513e6d502a7528c0\">CLOCK_RESPONSE</a></div><div class=\"ttdeci\">@ CLOCK_RESPONSE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00048\">EnigmaIOTNode.h:48</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fad2c18ef749d0eca5f53ecfb0fb0af0bc\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fad2c18ef749d0eca5f53ecfb0fb0af0bc\">DOWNSTREAM_CTRL_DATA</a></div><div class=\"ttdeci\">@ DOWNSTREAM_CTRL_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00044\">EnigmaIOTNode.h:44</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ab95b384ed3f016217d9669c7982e8c08\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">EnigmaIOTNodeClass::reportRSSI</a></div><div class=\"ttdeci\">bool reportRSSI()</div><div class=\"ttdoc\">Sends RSSI value and channel to Gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00982\">EnigmaIOTNode.cpp:982</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2e3ba13a9f6b1a0e3feb9e6bee17d365\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">EnigmaIOTNodeClass::shouldRestart</a></div><div class=\"ttdeci\">bool shouldRestart</div><div class=\"ttdoc\">Triggers a restart if true.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00162\">EnigmaIOTNode.h:162</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a726847ca0ed458b01c23e78672aa4059\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\">EnigmaIOTNodeClass::getStatus</a></div><div class=\"ttdeci\">void getStatus(uint8_t *mac_addr, uint8_t status)</div><div class=\"ttdoc\">Functrion to debug send status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02704\">EnigmaIOTNode.cpp:2704</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa0c8da6c451065bed79ea70684e6f3fca\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa0c8da6c451065bed79ea70684e6f3fca\">CLIENT_HELLO</a></div><div class=\"ttdeci\">@ CLIENT_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00053\">EnigmaIOTNode.h:53</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a5b8a2368449f3fd7a1986fb80d9e4274\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\">EnigmaIOTNodeClass::processGetSleepTimeCommand</a></div><div class=\"ttdeci\">bool processGetSleepTimeCommand(const uint8_t *mac, const uint8_t *buf, uint8_t len)</div><div class=\"ttdoc\">Processes a request of sleep time configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01772\">EnigmaIOTNode.cpp:1772</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></div><div class=\"ttdeci\">@ CAYENNELPP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00060\">EnigmaIOTNode.h:60</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ae1729724a332e907bddbe7b27c2f3c22\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22\">EnigmaIOTNodeClass::stop</a></div><div class=\"ttdeci\">void stop()</div><div class=\"ttdoc\">Stops EnigmaIoT protocol.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00938\">EnigmaIOTNode.cpp:938</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a0d4446a73e230333f972b233fa2dffdd\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\">EnigmaIOTNodeClass::processGetRSSICommand</a></div><div class=\"ttdeci\">bool processGetRSSICommand(const uint8_t *mac, const uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Processes a request to measure RSSI.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02046\">EnigmaIOTNode.cpp:2046</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aa024db31641775e4de784d4d2ce545a1\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">EnigmaIOTNodeClass::requestSearchGateway</a></div><div class=\"ttdeci\">bool requestSearchGateway</div><div class=\"ttdoc\">Flag to control updating gateway address, RSSI and channel.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00165\">EnigmaIOTNode.h:165</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a77b2c62dbadc2b7546d74d8ebf931cc2\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">EnigmaIOTNodeClass::saveFlashData</a></div><div class=\"ttdeci\">bool saveFlashData(bool fsOpen=false)</div><div class=\"ttdoc\">Saves configuration to flash memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00352\">EnigmaIOTNode.cpp:352</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac0bcd76b3f8b10cfc0f8c75d00e33012\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a></div><div class=\"ttdeci\">void(* onWiFiManagerExit_t)(bool status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00126\">EnigmaIOTNode.h:126</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html_a245a6d744786422d9939f5f14773475e\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">rtcmem_data_t::sleepy</a></div><div class=\"ttdeci\">bool sleepy</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00098\">EnigmaIOTNode.h:98</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a152501c4de4fad4ccdc6dffa8b47c349\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a></div><div class=\"ttdeci\">static const uint32_t FLASH_LED_TIME</div><div class=\"ttdoc\">Time that led keeps on during flash in ms.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00018\">EnigmaIoTconfig.h:18</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a6830ae2f6b8dafa588f5baa1fe4e8a99\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">EnigmaIOTNodeClass::clock</a></div><div class=\"ttdeci\">int64_t clock()</div><div class=\"ttdoc\">Gets current clock counter. millis() + offset.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01455\">EnigmaIOTNode.cpp:1455</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ac4505b55fce99b105adc4993a404c7d4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">EnigmaIOTNodeClass::dataMessageSendEncoding</a></div><div class=\"ttdeci\">nodePayloadEncoding_t dataMessageSendEncoding</div><div class=\"ttdoc\">Encoding of the message pending to be sent.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00151\">EnigmaIOTNode.h:151</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a846d3d0dd41fcaa8944e7cbe804bef93\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\">EnigmaIOTNodeClass::manageMessage</a></div><div class=\"ttdeci\">void manageMessage(const uint8_t *mac, const uint8_t *buf, uint8_t count)</div><div class=\"ttdoc\">Process every received message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02551\">EnigmaIOTNode.cpp:2551</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a477e362b78a326f1519738f29740e6d8\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">onNodeDataRx_t</a></div><div class=\"ttdeci\">void(* onNodeDataRx_t)(const uint8_t *mac, const uint8_t *buf, uint8_t len, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00123\">EnigmaIOTNode.h:123</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abc061ed33eaff29767c880e77d2faca9\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">EnigmaIOTNodeClass::cycleStartedTime</a></div><div class=\"ttdeci\">time_t cycleStartedTime</div><div class=\"ttdoc\">Used to calculate exact sleep time by substracting awake time.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00172\">EnigmaIOTNode.h:172</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a></div><div class=\"ttdeci\">@ HA_DISC_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00072\">EnigmaIOTNode.h:71</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html\">Comms_hal.h</a></div><div class=\"ttdoc\">Generic communication system abstraction layer.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ad2beff45acb833796b079e741d13ec75\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">EnigmaIOTNodeClass::gatewaySearchStarted</a></div><div class=\"ttdeci\">bool gatewaySearchStarted</div><div class=\"ttdoc\">Avoids start a new gateway scan if it already started.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00164\">EnigmaIOTNode.h:164</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a5aea95bd2dead51558a1f7fa312cf1c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">EnigmaIOTNodeClass::configCleared</a></div><div class=\"ttdeci\">bool configCleared</div><div class=\"ttdoc\">This flag disables asy configuration save after triggering a factory reset.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00167\">EnigmaIOTNode.h:167</a></div></div>\n<div class=\"ttc\" id=\"astructrtcmem__data__t_html\"><div class=\"ttname\"><a href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></div><div class=\"ttdoc\">Context data to be stored con persistent storage to be used after wake from sleep mode.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00089\">EnigmaIOTNode.h:89</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_aeafba3e3725226cdcb14a23c4e57c97a\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#aeafba3e3725226cdcb14a23c4e57c97a\">onWiFiManagerStarted_t</a></div><div class=\"ttdeci\">void(* onWiFiManagerStarted_t)(void)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00127\">EnigmaIOTNode.h:127</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">CONTROL_TYPE</a></div><div class=\"ttdeci\">@ CONTROL_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00070\">EnigmaIOTNode.h:70</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ae6176d81e34ccc835f6886c23ba47d93\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93\">EnigmaIOTNodeClass::getRSSI</a></div><div class=\"ttdeci\">int8_t getRSSI()</div><div class=\"ttdoc\">Gets latest RSSI measurement. It is updated during start up or in case of transmission errors.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00085\">EnigmaIOTNode.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a1701a6f85406e5deef210c74d509a471\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">EnigmaIOTNodeClass::startIdentifying</a></div><div class=\"ttdeci\">void startIdentifying(time_t period)</div><div class=\"ttdoc\">Starts node identification by flashing led.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00663\">EnigmaIOTNode.cpp:663</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a6aaa73dd705c9bdaa7c2b1fe70cb91ed\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">EnigmaIOTNodeClass::getNode</a></div><div class=\"ttdeci\">Node * getNode()</div><div class=\"ttdoc\">Gets Node instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00797\">EnigmaIOTNode.h:797</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html\"><div class=\"ttname\"><a href=\"classComms__halClass.html\">Comms_halClass</a></div><div class=\"ttdoc\">Interface for communication subsystem abstraction layer definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00041\">Comms_hal.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a77067c58362c3beb192545cb3ba1a775\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">EnigmaIOTNodeClass::dataMessageSentLength</a></div><div class=\"ttdeci\">uint8_t dataMessageSentLength</div><div class=\"ttdoc\">Message length stored for use in case of message retransmission is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00149\">EnigmaIOTNode.h:149</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7fa3b0c314d51c09e5960e07704bb05f4ab\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa3b0c314d51c09e5960e07704bb05f4ab\">DOWNSTREAM_BRCAST_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_BRCAST_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00040\">EnigmaIOTNode.h:40</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a37ce04fd79315c001e113198fab23386\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">onConnected_t</a></div><div class=\"ttdeci\">void(* onConnected_t)()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00124\">EnigmaIOTNode.h:124</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTRingBuffer_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTRingBuffer.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTRingBuffer.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Library to build a gateway for EnigmaIoT system.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&quot;</code><br />\n</div>\n<p><a href=\"EnigmaIOTRingBuffer_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Ring buffer class. Used to implement message buffer.  <a href=\"classEnigmaIOTRingBuffer.html#details\">More...</a><br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Library to build a gateway for EnigmaIoT system. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTRingBuffer_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTRingBuffer.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTRingBuffer.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOTRingBuffer_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _ENIGMAIOTBUFFER_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _ENIGMAIOTBUFFER_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> Telement&gt;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html\">   24</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a> {</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">   26</a></span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a>; </div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">   27</a></span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a> = 0; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">   28</a></span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a> = 0; </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">   29</a></span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a> = 0; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#a1c18bc66f575fffc206be22f96fc6a16\">   30</a></span>&#160;    Telement* <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">buffer</a>; </div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer &lt;Telement&gt;</a> (<span class=\"keywordtype\">int</span> range) : <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a> (range) {</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">buffer</a> = <span class=\"keyword\">new</span> Telement[<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a>];</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#aba3855eadedeaa091aff67f49bdc2255\">   45</a></span>&#160;    <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aba3855eadedeaa091aff67f49bdc2255\">~EnigmaIOTRingBuffer</a> () {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a> = 0;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">delete</span>[] (<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">buffer</a>);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">   54</a></span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> () { <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a>; }</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374\">   60</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374\">isFull</a> () { <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a> == <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a>; }</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">   66</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">empty</a> () { <span class=\"keywordflow\">return</span> (<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a> == 0); }</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160; </div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">   73</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">push</a> (Telement* item) {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keywordtype\">bool</span> wasFull = <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374\">isFull</a> ();</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Add element. Buffer was %s&quot;</span>, wasFull ? <span class=\"stringliteral\">&quot;full&quot;</span> : <span class=\"stringliteral\">&quot;not full&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Before -- &gt; ReadIdx: %d. WriteIdx: %d. Size: %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a>);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        portMUX_TYPE myMutex = portMUX_INITIALIZER_UNLOCKED;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        portENTER_CRITICAL (&amp;myMutex);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        memcpy (&amp;(<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">buffer</a>[<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a>]), item, <span class=\"keyword\">sizeof</span> (Telement));</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"comment\">//Serial.printf (&quot;Copied: %d bytes\\n&quot;, sizeof (Telement));</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a>++;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a> &gt;= <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a>) {</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a> %= <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a>;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keywordflow\">if</span> (wasFull) { <span class=\"comment\">// old value is no longer valid</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a>++;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a> &gt;= <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a>) {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a> %= <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a>++;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        portEXIT_CRITICAL (&amp;myMutex);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;After -- &gt; ReadIdx: %d. WriteIdx: %d. Size: %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a>);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"keywordflow\">return</span> !wasFull;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160; </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">  106</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">pop</a> () {</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"keywordtype\">bool</span> wasEmpty = <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">empty</a> ();</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Remove element. Buffer was %s&quot;</span>, wasEmpty ? <span class=\"stringliteral\">&quot;empty&quot;</span> : <span class=\"stringliteral\">&quot;not empty&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Before -- &gt; ReadIdx: %d. WriteIdx: %d. Size: %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a>);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        <span class=\"keywordflow\">if</span> (!wasEmpty) {</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a>++;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a> &gt;= <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a>) {</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a> %= <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a>;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;            <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a>--;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;After -- &gt; ReadIdx: %d. WriteIdx: %d. Size: %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a>);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keywordflow\">return</span> !wasEmpty;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160; </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">  125</a></span>&#160;    Telement* <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">front</a> () {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Read element. ReadIdx: %d. WriteIdx: %d. Size: %d&quot;</span>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a>, <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">empty</a> ()) {</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;            <span class=\"keywordflow\">return</span> &amp;(<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">buffer</a>[<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a>]);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;            <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_aa75d2fb067f7bb4e4e760d776b3a149e\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">EnigmaIOTRingBuffer::readIndex</a></div><div class=\"ttdeci\">int readIndex</div><div class=\"ttdoc\">Pointer to next item to be read.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00028\">EnigmaIOTRingBuffer.h:28</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_aba3855eadedeaa091aff67f49bdc2255\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#aba3855eadedeaa091aff67f49bdc2255\">EnigmaIOTRingBuffer::~EnigmaIOTRingBuffer</a></div><div class=\"ttdeci\">~EnigmaIOTRingBuffer()</div><div class=\"ttdoc\">EnigmaIOTRingBuffer destructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00045\">EnigmaIOTRingBuffer.h:45</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a7f89d738dd736ef5e4858313a93d8359\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">EnigmaIOTRingBuffer::buffer</a></div><div class=\"ttdeci\">Telement * buffer</div><div class=\"ttdoc\">Actual buffer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00030\">EnigmaIOTRingBuffer.h:30</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a></div><div class=\"ttdoc\">Ring buffer class. Used to implement message buffer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00024\">EnigmaIOTRingBuffer.h:24</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_aacd555a37dc6ff614813f365e0d85419\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">EnigmaIOTRingBuffer::size</a></div><div class=\"ttdeci\">int size()</div><div class=\"ttdoc\">Returns actual number of elements that buffer holds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00054\">EnigmaIOTRingBuffer.h:54</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a0356f7e08a203093ad1c03e27ac18d0a\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">EnigmaIOTRingBuffer::push</a></div><div class=\"ttdeci\">bool push(Telement *item)</div><div class=\"ttdoc\">Adds a new item to buffer, deleting older element if it is full.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00073\">EnigmaIOTRingBuffer.h:73</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a4000e36c678d2ae166b3689e5703c7e5\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">EnigmaIOTRingBuffer::empty</a></div><div class=\"ttdeci\">bool empty()</div><div class=\"ttdoc\">Checks if buffer is empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00066\">EnigmaIOTRingBuffer.h:66</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_ab8124d524ffeb47ab53c5435ac2fe4c8\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">EnigmaIOTRingBuffer::pop</a></div><div class=\"ttdeci\">bool pop()</div><div class=\"ttdoc\">Deletes older item from buffer, if buffer is not empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00106\">EnigmaIOTRingBuffer.h:106</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a596c337b97baac1d28f2bd8e71af6eaa\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">EnigmaIOTRingBuffer::maxSize</a></div><div class=\"ttdeci\">int maxSize</div><div class=\"ttdoc\">Buffer size.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00026\">EnigmaIOTRingBuffer.h:26</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a3dd72b32f71d5bf46c0c083c3bb9b942\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">EnigmaIOTRingBuffer::front</a></div><div class=\"ttdeci\">Telement * front()</div><div class=\"ttdoc\">Gets a pointer to older item in buffer, if buffer is not empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00125\">EnigmaIOTRingBuffer.h:125</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a95e56ba5a8626aaabb4b17d267e91374\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374\">EnigmaIOTRingBuffer::isFull</a></div><div class=\"ttdeci\">bool isFull()</div><div class=\"ttdoc\">Checks if buffer is full.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00060\">EnigmaIOTRingBuffer.h:60</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a312bff8624df2dfa07a823f4e0523237\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">EnigmaIOTRingBuffer::numElements</a></div><div class=\"ttdeci\">int numElements</div><div class=\"ttdoc\">Number of elements that buffer currently has.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00027\">EnigmaIOTRingBuffer.h:27</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_af902303fe23e088b2288baeca53706fa\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">EnigmaIOTRingBuffer::writeIndex</a></div><div class=\"ttdeci\">int writeIndex</div><div class=\"ttdoc\">Pointer to next position to write onto.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00029\">EnigmaIOTRingBuffer.h:29</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTdebug_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTdebug.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTdebug.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Auxiliary functions for debugging over Serial.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>&quot;</code><br />\n</div>\n<p><a href=\"EnigmaIOTdebug_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a424f1b989129c5519f4df8f61ad6dcaf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a424f1b989129c5519f4df8f61ad6dcaf\">NO_DEBUG</a>&#160;&#160;&#160;0</td></tr>\n<tr class=\"memdesc:a424f1b989129c5519f4df8f61ad6dcaf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug level that will give no debug output.  <a href=\"EnigmaIOTdebug_8h.html#a424f1b989129c5519f4df8f61ad6dcaf\">More...</a><br /></td></tr>\n<tr class=\"separator:a424f1b989129c5519f4df8f61ad6dcaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8fe83ac76edc595f6b98cd4a4127aed5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a8fe83ac76edc595f6b98cd4a4127aed5\">ERROR</a>&#160;&#160;&#160;1</td></tr>\n<tr class=\"memdesc:a8fe83ac76edc595f6b98cd4a4127aed5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug level that will give error messages.  <a href=\"EnigmaIOTdebug_8h.html#a8fe83ac76edc595f6b98cd4a4127aed5\">More...</a><br /></td></tr>\n<tr class=\"separator:a8fe83ac76edc595f6b98cd4a4127aed5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a271d8f7f52be750e5c744a394ec71344\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a271d8f7f52be750e5c744a394ec71344\">WARN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"memdesc:a271d8f7f52be750e5c744a394ec71344\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug level that will give error and warning messages.  <a href=\"EnigmaIOTdebug_8h.html#a271d8f7f52be750e5c744a394ec71344\">More...</a><br /></td></tr>\n<tr class=\"separator:a271d8f7f52be750e5c744a394ec71344\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae1103fea1e1b3c41ca3322d5389f7162\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTdebug_8h.html#ae1103fea1e1b3c41ca3322d5389f7162\">INFO</a>&#160;&#160;&#160;3</td></tr>\n<tr class=\"memdesc:ae1103fea1e1b3c41ca3322d5389f7162\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug level that will give error, warning and info messages.  <a href=\"EnigmaIOTdebug_8h.html#ae1103fea1e1b3c41ca3322d5389f7162\">More...</a><br /></td></tr>\n<tr class=\"separator:ae1103fea1e1b3c41ca3322d5389f7162\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49606be7356624568932ec81c0d429f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a49606be7356624568932ec81c0d429f4\">DBG</a>&#160;&#160;&#160;4</td></tr>\n<tr class=\"memdesc:a49606be7356624568932ec81c0d429f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug level that will give error, warning,info AND dbg messages.  <a href=\"EnigmaIOTdebug_8h.html#a49606be7356624568932ec81c0d429f4\">More...</a><br /></td></tr>\n<tr class=\"separator:a49606be7356624568932ec81c0d429f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42f8c497a1968074f38bf5055c650dca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a42f8c497a1968074f38bf5055c650dca\">VERBOSE</a>&#160;&#160;&#160;5</td></tr>\n<tr class=\"memdesc:a42f8c497a1968074f38bf5055c650dca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug level that will give all defined messages.  <a href=\"EnigmaIOTdebug_8h.html#a42f8c497a1968074f38bf5055c650dca\">More...</a><br /></td></tr>\n<tr class=\"separator:a42f8c497a1968074f38bf5055c650dca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Auxiliary functions for debugging over Serial. </p>\n<p>Format used on debug functions is the same as <code>printf()</code>. Check source code for usage examples Debug calls will be enabled or disabled automatically before compiling according defined <code>DEBUG_LEVEL</code>.</p>\n<p>If <code>DEBUG_ESP_PORT</code> is not defined library will give no debug output at all</p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a49606be7356624568932ec81c0d429f4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a49606be7356624568932ec81c0d429f4\">&#9670;&nbsp;</a></span>DBG</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define DBG&#160;&#160;&#160;4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug level that will give error, warning,info AND dbg messages. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html#l00028\">28</a> of file <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8fe83ac76edc595f6b98cd4a4127aed5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8fe83ac76edc595f6b98cd4a4127aed5\">&#9670;&nbsp;</a></span>ERROR</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define ERROR&#160;&#160;&#160;1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug level that will give error messages. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html#l00025\">25</a> of file <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae1103fea1e1b3c41ca3322d5389f7162\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae1103fea1e1b3c41ca3322d5389f7162\">&#9670;&nbsp;</a></span>INFO</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define INFO&#160;&#160;&#160;3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug level that will give error, warning and info messages. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html#l00027\">27</a> of file <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a424f1b989129c5519f4df8f61ad6dcaf\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a424f1b989129c5519f4df8f61ad6dcaf\">&#9670;&nbsp;</a></span>NO_DEBUG</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define NO_DEBUG&#160;&#160;&#160;0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug level that will give no debug output. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html#l00024\">24</a> of file <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a42f8c497a1968074f38bf5055c650dca\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a42f8c497a1968074f38bf5055c650dca\">&#9670;&nbsp;</a></span>VERBOSE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define VERBOSE&#160;&#160;&#160;5</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug level that will give all defined messages. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html#l00029\">29</a> of file <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a271d8f7f52be750e5c744a394ec71344\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a271d8f7f52be750e5c744a394ec71344\">&#9670;&nbsp;</a></span>WARN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define WARN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug level that will give error and warning messages. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html#l00026\">26</a> of file <a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTdebug_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTdebug.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTdebug.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOTdebug_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#ifndef _DEBUG_h</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#define _DEBUG_h</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;esp_log.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160; </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTdebug_8h.html#a424f1b989129c5519f4df8f61ad6dcaf\">   24</a></span>&#160;<span class=\"preprocessor\">#define NO_DEBUG    0 </span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTdebug_8h.html#a8fe83ac76edc595f6b98cd4a4127aed5\">   25</a></span>&#160;<span class=\"preprocessor\">#define ERROR   1 </span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTdebug_8h.html#a271d8f7f52be750e5c744a394ec71344\">   26</a></span>&#160;<span class=\"preprocessor\">#define WARN    2 </span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTdebug_8h.html#ae1103fea1e1b3c41ca3322d5389f7162\">   27</a></span>&#160;<span class=\"preprocessor\">#define INFO    3 </span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTdebug_8h.html#a49606be7356624568932ec81c0d429f4\">   28</a></span>&#160;<span class=\"preprocessor\">#define DBG     4 </span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIOTdebug_8h.html#a42f8c497a1968074f38bf5055c650dca\">   29</a></span>&#160;<span class=\"preprocessor\">#define VERBOSE 5 </span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\"></span> </div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* extractFileName (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* path);</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#define DEBUG_LINE_PREFIX() DEBUG_ESP_PORT.printf_P (PSTR(&quot;[%lu][H:%5lu][%s:%d] %s() | &quot;),millis(),(unsigned long)ESP.getFreeHeap(),extractFileName(__FILE__),__LINE__,__FUNCTION__)</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160; </div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#ifdef DEBUG_ESP_PORT</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160; </div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= VERBOSE</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#define DEBUG_VERBOSE(text,...) DEBUG_ESP_PORT.print(&quot;V &quot;);DEBUG_LINE_PREFIX();DEBUG_ESP_PORT.printf_P(PSTR(text),##__VA_ARGS__);DEBUG_ESP_PORT.println()</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#define DEBUG_VERBOSE(...)</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= DBG</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#define DEBUG_DBG(text,...) DEBUG_ESP_PORT.print(&quot;D &quot;);DEBUG_LINE_PREFIX(); DEBUG_ESP_PORT.printf_P(PSTR(text),##__VA_ARGS__);DEBUG_ESP_PORT.println()</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#define DEBUG_DBG(...)</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= INFO</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">#define DEBUG_INFO(text,...) DEBUG_ESP_PORT.print(&quot;I &quot;);DEBUG_LINE_PREFIX();DEBUG_ESP_PORT.printf_P(PSTR(text),##__VA_ARGS__);DEBUG_ESP_PORT.println()</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#define DEBUG_INFO(...)</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160; </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= WARN</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#define DEBUG_WARN(text,...) DEBUG_ESP_PORT.print(&quot;W &quot;);DEBUG_LINE_PREFIX();DEBUG_ESP_PORT.printf_P(PSTR(text),##__VA_ARGS__);DEBUG_ESP_PORT.println()</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#define DEBUG_WARN(...)</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160; </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= ERROR</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#define DEBUG_ERROR(text,...) DEBUG_ESP_PORT.print(&quot;E &quot;);DEBUG_LINE_PREFIX();DEBUG_ESP_PORT.printf_P(PSTR(text),##__VA_ARGS__);DEBUG_ESP_PORT.println()</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\">#define DEBUG_ERROR(...)</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#define DEFAULT_LOG_TAG &quot;EnigmaIOT&quot;</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#define DEBUG_VERBOSE(format,...) ESP_LOGV (DEFAULT_LOG_TAG,&quot;%d Heap: %6d. &quot; format, millis(), ESP.getFreeHeap(), ##__VA_ARGS__)</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"preprocessor\">#define DEBUG_DBG(format,...) ESP_LOGD (DEFAULT_LOG_TAG,&quot;%d Heap: %6d &quot; format, millis(), ESP.getFreeHeap(), ##__VA_ARGS__)</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#define DEBUG_INFO(format,...) ESP_LOGI (DEFAULT_LOG_TAG,&quot;%d Heap: %6d &quot; format, millis(), ESP.getFreeHeap(), ##__VA_ARGS__)</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#define DEBUG_WARN(format,...) ESP_LOGW (DEFAULT_LOG_TAG,&quot;%d Heap: %6d &quot; format, millis(), ESP.getFreeHeap(), ##__VA_ARGS__)</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#define DEBUG_ERROR(format,...) ESP_LOGE (DEFAULT_LOG_TAG,&quot;%d Heap: %6d &quot; format, millis(), ESP.getFreeHeap(), ##__VA_ARGS__)</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#define DEBUG_VERBOSE(...)</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#define DEBUG_DBG(...)</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#define DEBUG_INFO(...)</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#define DEBUG_WARN(...)</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#define DEBUG_ERROR(...)</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160; </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a></div><div class=\"ttdoc\">Parameter configuration.</div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTjsonController_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTjsonController.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTjsonController.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Prototype for JSON/MSGPACK based controller node.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n</div>\n<p><a href=\"EnigmaIOTjsonController_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Prototype for JSON/MSGPACK based controller node. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIOTjsonController_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIOTjsonController.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTjsonController.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIOTjsonController_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _ENIGMAIOTJSONCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _ENIGMAIOTJSONCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;queue&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160; </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if defined ESP8266 || defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;bool (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType)&gt; sendData_cb; </div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void ()&gt; haDiscovery_call_t; </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#error This code only supports ESP8266 or ESP32 platforms</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#endif // defined ESP8266 || defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html\">   34</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> {</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">   36</a></span>&#160;    sendData_cb <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">sendData</a>;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">   37</a></span>&#160;    <a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">enigmaIotNode</a>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;    std::queue&lt;haDiscovery_call_t&gt; haCallQueue;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    <span class=\"keywordtype\">bool</span> doSendHAdiscovery = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    clock_t sendHAtime;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;    clock_t sendHAdelay = <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a1ca4cd82c4372161db98aee89cff4868\">HA_FIRST_DISCOVERY_DELAY</a>;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">   51</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* config = NULL) = 0;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">   56</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">loop</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">   67</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">processRxCommand</a> (</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) = 0;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160; </div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">   74</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a> (sendData_cb cb) {</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">sendData</a> = cb;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160; </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">   81</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">connectInform</a> () {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Connect inform&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">sendStartAnouncement</a> ();</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">enigmaIotNode</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">getNode</a> ()-&gt;<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> ()) {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;            sendHAdelay = <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a49e01af100e8659b911c4dc6c8b30ef4\">HA_FIRST_DISCOVERY_DELAY_SLEEPY</a>;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Enable HA Discovery&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        doSendHAdiscovery = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        sendHAtime = millis ();</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">   97</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">disconnectInform</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason){}</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">  102</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">configManagerStart</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">  108</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) = 0;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160; </div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">  114</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">loadConfig</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160; </div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"keywordtype\">void</span> callHAdiscoveryCalls () {</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keywordflow\">if</span> (doSendHAdiscovery &amp;&amp; millis () - sendHAtime &gt; sendHAdelay) {</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;            haDiscovery_call_t hacall = 0;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Call HA discovery&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;            <span class=\"keywordflow\">if</span> (haCallQueue.size ()) {</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                hacall = haCallQueue.front ();</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;haCallQueue size is %d&quot;</span>, haCallQueue.size ());</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;            <span class=\"keywordflow\">if</span> (hacall) {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Execute hacall&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                hacall ();</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                haCallQueue.pop ();</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                sendHAtime = millis ();</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">enigmaIotNode</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">getNode</a> ()-&gt;<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> ()) {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                    sendHAdelay = <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a19844f57e8cb836e57d6418a76e6717f\">HA_NEXT_DISCOVERY_DELAY_SLEEPY</a>;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                    sendHAdelay = <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21aa047809e9b061f5712589cf2136f9\">HA_NEXT_DISCOVERY_DELAY</a>;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                doSendHAdiscovery = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot; Exit call HA discovery. Delay = %d. doSendHAdiscovery = %s&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                        sendHAdelay, doSendHAdiscovery ? <span class=\"stringliteral\">&quot;true&quot;</span> : <span class=\"stringliteral\">&quot;false&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">  152</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result) = 0;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160; </div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">  158</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">sendStartAnouncement</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160; </div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">  164</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">saveConfig</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160; </div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">  170</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a> (DynamicJsonDocument&amp; json) {</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        <span class=\"keywordtype\">int</span> len = measureMsgPack (json) + 1;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        uint8_t* buffer = (uint8_t*)malloc (len);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        len = serializeMsgPack (json, (<span class=\"keywordtype\">char</span>*)buffer, len);</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160; </div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keywordtype\">size_t</span> strLen = measureJson (json) + 1;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        <span class=\"keywordtype\">char</span>* strBuffer = (<span class=\"keywordtype\">char</span>*)calloc (<span class=\"keyword\">sizeof</span> (uint8_t), strLen);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160; </div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <span class=\"comment\">/*Serial.printf (&quot;Trying to send: %s\\n&quot;, printHexBuffer (</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"comment\">            buffer, len));*/</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        serializeJson (json, strBuffer, strLen);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Trying to send: %s&quot;</span>, strBuffer);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        <span class=\"keywordtype\">bool</span> result = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">sendData</a>)</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;            result = <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">sendData</a> (buffer, len, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        <span class=\"keywordflow\">if</span> (!result) {</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;---- Error sending data&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;---- Data sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        <span class=\"keywordflow\">if</span> (buffer) {</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;            free (buffer);        </div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keywordflow\">if</span> (strBuffer) {</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;            free (strBuffer);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160; </div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;    <span class=\"keywordtype\">void</span> addHACall (haDiscovery_call_t HACall) {</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        haCallQueue.push (HACall);</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160; </div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;    <span class=\"keywordtype\">bool</span> sendHADiscovery (uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> len) {</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> || !len) {</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Empty HA message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        <span class=\"keywordtype\">bool</span> result = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">sendData</a>)</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;            result = <a class=\"code\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">sendData</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a>);</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        <span class=\"keywordflow\">if</span> (!result) {</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;---- Error sending data&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;---- Data sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160; </div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"preprocessor\">#endif // _ENIGMAIOTJSONCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a7d1e90a75f4b1b5abd5480d00102debf\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController::loop</a></div><div class=\"ttdeci\">virtual void loop()=0</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a1ca4cd82c4372161db98aee89cff4868\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a1ca4cd82c4372161db98aee89cff4868\">HA_FIRST_DISCOVERY_DELAY</a></div><div class=\"ttdeci\">#define HA_FIRST_DISCOVERY_DELAY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00057\">EnigmaIoTconfigAdvanced.h:57</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a9d83f8376a37624a551421a2c8a90c5f\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController::configManagerStart</a></div><div class=\"ttdeci\">virtual void configManagerStart()=0</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a844043532561398d54fa45cd7f0cf4ed\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController::configManagerExit</a></div><div class=\"ttdeci\">virtual void configManagerExit(bool status)=0</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a19844f57e8cb836e57d6418a76e6717f\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a19844f57e8cb836e57d6418a76e6717f\">HA_NEXT_DISCOVERY_DELAY_SLEEPY</a></div><div class=\"ttdeci\">#define HA_NEXT_DISCOVERY_DELAY_SLEEPY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00066\">EnigmaIoTconfigAdvanced.h:66</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a21aa047809e9b061f5712589cf2136f9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a21aa047809e9b061f5712589cf2136f9\">HA_NEXT_DISCOVERY_DELAY</a></div><div class=\"ttdeci\">#define HA_NEXT_DISCOVERY_DELAY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00060\">EnigmaIoTconfigAdvanced.h:60</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_af2e1940f901e2ad05701b238374db9c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">EnigmaIOTjsonController::disconnectInform</a></div><div class=\"ttdeci\">virtual void disconnectInform(nodeInvalidateReason_t reason)</div><div class=\"ttdoc\">Used to notify controller that it is unregistered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00097\">EnigmaIOTjsonController.h:97</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a49e01af100e8659b911c4dc6c8b30ef4\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a49e01af100e8659b911c4dc6c8b30ef4\">HA_FIRST_DISCOVERY_DELAY_SLEEPY</a></div><div class=\"ttdeci\">#define HA_FIRST_DISCOVERY_DELAY_SLEEPY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00063\">EnigmaIoTconfigAdvanced.h:63</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a8156ca47dce60feaff56f2b819a87c58\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">EnigmaIOTjsonController::sendStartAnouncement</a></div><div class=\"ttdeci\">virtual bool sendStartAnouncement()=0</div><div class=\"ttdoc\">Send a message to notify node has started running.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae59a645aaed1e5b550bdc7967c45c170\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">EnigmaIOTjsonController::sendDataCallback</a></div><div class=\"ttdeci\">void sendDataCallback(sendData_cb cb)</div><div class=\"ttdoc\">Register send data callback to run when module needs to send a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00074\">EnigmaIOTjsonController.h:74</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a5bf02d202c9cb76831de89e4d1ef8893\"><div class=\"ttname\"><a href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">Node::getSleepy</a></div><div class=\"ttdeci\">bool getSleepy()</div><div class=\"ttdoc\">Gets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sl...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00363\">NodeList.h:363</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae5ece1c030d9063e46127b8a48b7bfa9\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">EnigmaIOTjsonController::sendJson</a></div><div class=\"ttdeci\">bool sendJson(DynamicJsonDocument &amp;json)</div><div class=\"ttdoc\">Sends a JSON encoded message to lower layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00170\">EnigmaIOTjsonController.h:170</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a></div><div class=\"ttdeci\">dataMessageType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00068\">EnigmaIOTNode.h:68</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a48bf137d2f77f2167f2c2d56cdf26c10\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController::loadConfig</a></div><div class=\"ttdeci\">virtual bool loadConfig()=0</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a661a7d9fe760c19b6992aba5b4978cde\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">EnigmaIOTjsonController::enigmaIotNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass * enigmaIotNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00037\">EnigmaIOTjsonController.h:37</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></div><div class=\"ttdeci\">@ DATA_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00069\">EnigmaIOTNode.h:69</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a83069acbd6d2b8c1c9b36974fdb35b1e\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">EnigmaIOTjsonController::saveConfig</a></div><div class=\"ttdeci\">virtual bool saveConfig()=0</div><div class=\"ttdoc\">Saves output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_acfcc6e0243941ac00830f848cc8315eb\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">EnigmaIOTjsonController::sendCommandResp</a></div><div class=\"ttdeci\">virtual bool sendCommandResp(const char *command, bool result)=0</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ab2f0dacf8b11038d862eb9fa3f1254ca\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController::processRxCommand</a></div><div class=\"ttdeci\">virtual bool processRxCommand(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)=0</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a56e99497e68b8f6f9d31822c4ecaf3ea\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController::setup</a></div><div class=\"ttdeci\">virtual void setup(EnigmaIOTNodeClass *node, void *config=NULL)=0</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_a13b9adbb1aaab6ec87042889289e701d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">EnigmaIOTjsonController::sendData</a></div><div class=\"ttdeci\">sendData_cb sendData</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00036\">EnigmaIOTjsonController.h:36</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">HA_DISC_TYPE</a></div><div class=\"ttdeci\">@ HA_DISC_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00072\">EnigmaIOTNode.h:71</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a6aaa73dd705c9bdaa7c2b1fe70cb91ed\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">EnigmaIOTNodeClass::getNode</a></div><div class=\"ttdeci\">Node * getNode()</div><div class=\"ttdoc\">Gets Node instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00797\">EnigmaIOTNode.h:797</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIoTUpdate_8py.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIoTUpdate/EnigmaIoTUpdate.py File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_bbee7a02677141865fa116b3c1345c33.html\">EnigmaIoTUpdate</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#namespaces\">Namespaces</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIoTUpdate.py File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a href=\"EnigmaIoTUpdate_8py_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"namespaces\"></a>\nNamespaces</h2></td></tr>\n<tr class=\"memitem:namespaceEnigmaIoTUpdate\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"> &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html\">EnigmaIoTUpdate</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a9e979dfe91c5de2dfa6660efcf30bb9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">def&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a9e979dfe91c5de2dfa6660efcf30bb9a\">EnigmaIoTUpdate.on_connect</a> (client, userdata, flags, rc)</td></tr>\n<tr class=\"separator:a9e979dfe91c5de2dfa6660efcf30bb9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a162ca4b2a6c3e338d7e86162b09eb13a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">def&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a162ca4b2a6c3e338d7e86162b09eb13a\">EnigmaIoTUpdate.on_message</a> (client, userdata, msg)</td></tr>\n<tr class=\"separator:a162ca4b2a6c3e338d7e86162b09eb13a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0625a265d8105bb0e6aa1503f88e21cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">def&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a0625a265d8105bb0e6aa1503f88e21cd\">EnigmaIoTUpdate.main</a> ()</td></tr>\n<tr class=\"separator:a0625a265d8105bb0e6aa1503f88e21cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a950133eea5c2ac61becd91f089b8d610\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a950133eea5c2ac61becd91f089b8d610\">EnigmaIoTUpdate.args</a> = None</td></tr>\n<tr class=\"separator:a950133eea5c2ac61becd91f089b8d610\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad7b06ea4bc715581c290476212ae10c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">EnigmaIoTUpdate.sleepyNode</a> = True</td></tr>\n<tr class=\"separator:ad7b06ea4bc715581c290476212ae10c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acd57a56c8115a7f72f00b6efc95eeea5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#acd57a56c8115a7f72f00b6efc95eeea5\">EnigmaIoTUpdate.resultTopic</a> = &quot;/result/#&quot;</td></tr>\n<tr class=\"separator:acd57a56c8115a7f72f00b6efc95eeea5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa26175595b8bee3fa7d7df8300e036d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#aa26175595b8bee3fa7d7df8300e036d0\">EnigmaIoTUpdate.sleepSetTopic</a> = &quot;/set/sleeptime&quot;</td></tr>\n<tr class=\"separator:aa26175595b8bee3fa7d7df8300e036d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a880799b2afdcda342a0c9413cc31c4be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a880799b2afdcda342a0c9413cc31c4be\">EnigmaIoTUpdate.sleepResultTopic</a> = &quot;/result/sleeptime&quot;</td></tr>\n<tr class=\"separator:a880799b2afdcda342a0c9413cc31c4be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aefdb455c166193127480d7b5afe88a66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#aefdb455c166193127480d7b5afe88a66\">EnigmaIoTUpdate.otaSetTopic</a> = &quot;/set/ota&quot;</td></tr>\n<tr class=\"separator:aefdb455c166193127480d7b5afe88a66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af04fd96058043d8861cd38175cb99e6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#af04fd96058043d8861cd38175cb99e6c\">EnigmaIoTUpdate.otaResultTopic</a> = &quot;/result/ota&quot;</td></tr>\n<tr class=\"separator:af04fd96058043d8861cd38175cb99e6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ade24b0154bfadccc5f69ee560a33de8b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ade24b0154bfadccc5f69ee560a33de8b\">EnigmaIoTUpdate.otaOutOfSequenceError</a> = &quot;OTA out of sequence error&quot;</td></tr>\n<tr class=\"separator:ade24b0154bfadccc5f69ee560a33de8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af461562efece05d0467c0e17edd2e58f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#af461562efece05d0467c0e17edd2e58f\">EnigmaIoTUpdate.otaOK</a> = &quot;OTA finished OK&quot;</td></tr>\n<tr class=\"separator:af461562efece05d0467c0e17edd2e58f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1efdbd8359ee1708af1bcf3be3eff850\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a1efdbd8359ee1708af1bcf3be3eff850\">EnigmaIoTUpdate.otaFinished</a> = False</td></tr>\n<tr class=\"separator:a1efdbd8359ee1708af1bcf3be3eff850\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5069992755f7ebc78fa8218e65550c64\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a5069992755f7ebc78fa8218e65550c64\">EnigmaIoTUpdate.idx</a> = 0</td></tr>\n<tr class=\"separator:a5069992755f7ebc78fa8218e65550c64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad815631b097bdf448ecd824fc28bfec6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ad815631b097bdf448ecd824fc28bfec6\">EnigmaIoTUpdate.OTA_OUT_OF_SEQUENCE</a> = 4</td></tr>\n<tr class=\"separator:ad815631b097bdf448ecd824fc28bfec6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56955d84eb178a78a16db3ed6e2a1c7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a56955d84eb178a78a16db3ed6e2a1c7e\">EnigmaIoTUpdate.OTA_FINISHED</a> = 6</td></tr>\n<tr class=\"separator:a56955d84eb178a78a16db3ed6e2a1c7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIoTUpdate_8py_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIoTUpdate/EnigmaIoTUpdate.py Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_bbee7a02677141865fa116b3c1345c33.html\">EnigmaIoTUpdate</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIoTUpdate.py</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIoTUpdate_8py.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html\">    1</a></span>&#160;<span class=\"keyword\">import</span> base64</div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;<span class=\"keyword\">import</span> paho.mqtt.client <span class=\"keyword\">as</span> mqtt</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"keyword\">import</span> time</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"keyword\">import</span> hashlib</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"keyword\">import</span> argparse</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"keyword\">import</span> os</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">import</span> json</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"comment\"># EnigmaIoTUpdate -f &lt;file.bin&gt; -d &lt;address&gt; -t &lt;basetopic&gt; -u &lt;mqttuser&gt; -P &lt;mqttpass&gt; -s &lt;mqttserver&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"comment\">#                       -p &lt;mqttport&gt; &lt;-s&gt; -D &lt;speed&gt;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#a950133eea5c2ac61becd91f089b8d610\">   12</a></span>&#160;args = <span class=\"keywordtype\">None</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">   13</a></span>&#160;sleepyNode = <span class=\"keyword\">True</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#acd57a56c8115a7f72f00b6efc95eeea5\">   14</a></span>&#160;resultTopic = <span class=\"stringliteral\">&quot;/result/#&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#aa26175595b8bee3fa7d7df8300e036d0\">   15</a></span>&#160;sleepSetTopic = <span class=\"stringliteral\">&quot;/set/sleeptime&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#a880799b2afdcda342a0c9413cc31c4be\">   16</a></span>&#160;sleepResultTopic = <span class=\"stringliteral\">&quot;/result/sleeptime&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#aefdb455c166193127480d7b5afe88a66\">   17</a></span>&#160;otaSetTopic = <span class=\"stringliteral\">&quot;/set/ota&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#af04fd96058043d8861cd38175cb99e6c\">   18</a></span>&#160;otaResultTopic = <span class=\"stringliteral\">&quot;/result/ota&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#ade24b0154bfadccc5f69ee560a33de8b\">   19</a></span>&#160;otaOutOfSequenceError = <span class=\"stringliteral\">&quot;OTA out of sequence error&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#af461562efece05d0467c0e17edd2e58f\">   20</a></span>&#160;otaOK = <span class=\"stringliteral\">&quot;OTA finished OK&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"comment\"># otaLength = 0</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#a1efdbd8359ee1708af1bcf3be3eff850\">   22</a></span>&#160;otaFinished = <span class=\"keyword\">False</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#a5069992755f7ebc78fa8218e65550c64\">   23</a></span>&#160;idx = 0</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160; </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#ad815631b097bdf448ecd824fc28bfec6\">   25</a></span>&#160;OTA_OUT_OF_SEQUENCE = 4</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#a56955d84eb178a78a16db3ed6e2a1c7e\">   26</a></span>&#160;OTA_FINISHED = 6</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160; </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#a9e979dfe91c5de2dfa6660efcf30bb9a\">   29</a></span>&#160;<span class=\"keyword\">def </span><a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#a9e979dfe91c5de2dfa6660efcf30bb9a\">on_connect</a>(client, userdata, flags, rc):</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;    <span class=\"keyword\">global</span> args</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;    <span class=\"keywordflow\">if</span> rc == 0:</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        print(<span class=\"stringliteral\">&quot;Connected with result code &quot;</span> + str(rc))</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        mqtt.Client.connected_flag = <span class=\"keyword\">True</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    <span class=\"keywordflow\">else</span>:</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        print(<span class=\"stringliteral\">&quot;Error connecting. Code =&quot;</span> + str(rc))</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keywordflow\">return</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;    sleep_topic = args.baseTopic + <span class=\"stringliteral\">&quot;/&quot;</span> + args.address + resultTopic</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    client.subscribe(sleep_topic)</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    print(<span class=\"stringliteral\">&quot;Subscribed&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160; </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#a162ca4b2a6c3e338d7e86162b09eb13a\">   44</a></span>&#160;<span class=\"keyword\">def </span><a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#a162ca4b2a6c3e338d7e86162b09eb13a\">on_message</a>(client, userdata, msg):</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <span class=\"keyword\">global</span> sleepyNode</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    <span class=\"keyword\">global</span> idx, otaFinished</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160; </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    payload = json.loads(msg.payload)</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    <span class=\"keywordflow\">if</span> msg.topic.find(sleepResultTopic) &gt;= 0 <span class=\"keywordflow\">and</span> payload[<span class=\"stringliteral\">&#39;sleeptime&#39;</span>] == 0:</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        sleepyNode = <span class=\"keyword\">False</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        print(msg.topic + <span class=\"stringliteral\">&quot; &quot;</span> + str(msg.payload))</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    <span class=\"comment\"># payload = msg.payload.decode(&#39;utf-8&#39;)</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    <span class=\"keywordflow\">if</span> msg.topic.find(otaResultTopic) &gt;= 0:</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keywordflow\">if</span> payload[<span class=\"stringliteral\">&#39;status&#39;</span>] == OTA_OUT_OF_SEQUENCE:</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;            print(payload[<span class=\"stringliteral\">&#39;last_chunk&#39;</span>], end=<span class=\"stringliteral\">&#39;&#39;</span>)</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;            idx = int(payload[<span class=\"stringliteral\">&#39;last_chunk&#39;</span>])</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keywordflow\">elif</span> payload[<span class=\"stringliteral\">&#39;status&#39;</span>] == OTA_FINISHED:</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;            print(<span class=\"stringliteral\">&quot; OTA Finished &quot;</span>, end=<span class=\"stringliteral\">&#39;&#39;</span>)</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;            otaFinished = <span class=\"keyword\">True</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"namespaceEnigmaIoTUpdate.html#a0625a265d8105bb0e6aa1503f88e21cd\">   67</a></span>&#160;<span class=\"keyword\">def </span><a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#a0625a265d8105bb0e6aa1503f88e21cd\">main</a>():</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    <span class=\"keyword\">global</span> args</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    <span class=\"keyword\">global</span> sleepyNode</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;    <span class=\"keyword\">global</span> otaFinished</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    opt = argparse.ArgumentParser(description=<span class=\"stringliteral\">&#39;This program allows updating EnigmaIOT node over the air using&#39;</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                                              <span class=\"stringliteral\">&#39;MQTT messages.&#39;</span>)</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    opt.add_argument(<span class=\"stringliteral\">&quot;-f&quot;</span>, <span class=\"stringliteral\">&quot;--file&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                     type=str,</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                     dest=<span class=\"stringliteral\">&quot;filename&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                     default=<span class=\"stringliteral\">&quot;program.bin&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                     help=<span class=\"stringliteral\">&quot;File to program into device&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    opt.add_argument(<span class=\"stringliteral\">&quot;-d&quot;</span>, <span class=\"stringliteral\">&quot;--daddress&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                     type=str,</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                     dest=<span class=\"stringliteral\">&quot;address&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                     help=<span class=\"stringliteral\">&quot;Device address&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    opt.add_argument(<span class=\"stringliteral\">&quot;-t&quot;</span>, <span class=\"stringliteral\">&quot;--topic&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                     type=str,</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                     dest=<span class=\"stringliteral\">&quot;baseTopic&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                     default=<span class=\"stringliteral\">&quot;enigmaiot&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                     help=<span class=\"stringliteral\">&quot;Base topic for MQTT messages&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    opt.add_argument(<span class=\"stringliteral\">&quot;-u&quot;</span>, <span class=\"stringliteral\">&quot;--user&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                     type=str,</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                     dest=<span class=\"stringliteral\">&quot;mqttUser&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                     default=<span class=\"stringliteral\">&quot;&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                     help=<span class=\"stringliteral\">&quot;MQTT server username&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    opt.add_argument(<span class=\"stringliteral\">&quot;-P&quot;</span>, <span class=\"stringliteral\">&quot;--password&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                     type=str,</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                     dest=<span class=\"stringliteral\">&quot;mqttPass&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                     default=<span class=\"stringliteral\">&quot;&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                     help=<span class=\"stringliteral\">&quot;MQTT server user password&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    opt.add_argument(<span class=\"stringliteral\">&quot;-S&quot;</span>, <span class=\"stringliteral\">&quot;--server&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                     type=str,</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                     dest=<span class=\"stringliteral\">&quot;mqttServer&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                     default=<span class=\"stringliteral\">&quot;127.0.0.1&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                     help=<span class=\"stringliteral\">&quot;MQTT server address or name&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    opt.add_argument(<span class=\"stringliteral\">&quot;-p&quot;</span>, <span class=\"stringliteral\">&quot;--port&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                     type=int,</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                     dest=<span class=\"stringliteral\">&quot;mqttPort&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                     default=1883,</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                     help=<span class=\"stringliteral\">&quot;MQTT server port&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    opt.add_argument(<span class=\"stringliteral\">&quot;-s&quot;</span>, <span class=\"stringliteral\">&quot;--secure&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                     action=<span class=\"stringliteral\">&quot;store_true&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                     dest=<span class=\"stringliteral\">&quot;mqttSecure&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                     help=<span class=\"stringliteral\">&quot;Use secure TLS in MQTT connection. Normally you should use port 8883&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    opt.add_argument(<span class=\"stringliteral\">&quot;--unsecure&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                     action=<span class=\"stringliteral\">&quot;store_false&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                     dest=<span class=\"stringliteral\">&quot;mqttSecure&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                     default=<span class=\"keyword\">False</span>,</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                     help=<span class=\"stringliteral\">&quot;Use secure plain TCP in MQTT connection. Normally you should use port 1883&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    opt.add_argument(<span class=\"stringliteral\">&quot;-D&quot;</span>, <span class=\"stringliteral\">&quot;--speed&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                     type=str,</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                     dest=<span class=\"stringliteral\">&quot;otaSpeed&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                     default=<span class=\"stringliteral\">&quot;fast&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                     help=<span class=\"stringliteral\">&quot;OTA update speed profile: &#39;fast&#39;, &#39;medium&#39; or &#39;slow&#39; Throttle this down in case of&quot;</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                          <span class=\"stringliteral\">&quot;problems with OTA update. Default: %default&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160; </div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <span class=\"comment\"># (options, args) = opt.parse_args()</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    args = opt.parse_args()</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160; </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <span class=\"keywordflow\">if</span> <span class=\"keywordflow\">not</span> args.address:</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        opt.error(<span class=\"stringliteral\">&#39;Destination address not supplied&#39;</span>)</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160; </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <span class=\"comment\"># print(options)</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160; </div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    ota_topic = args.baseTopic + <span class=\"stringliteral\">&quot;/&quot;</span> + args.address + otaSetTopic</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    mqttclientname = <span class=\"stringliteral\">&quot;EnigmaIoTUpdate&quot;</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    ota_length = os.stat(args.filename).st_size</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160; </div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    delay_options = {<span class=\"stringliteral\">&quot;fast&quot;</span>: 0.02, <span class=\"stringliteral\">&quot;medium&quot;</span>: 0.06, <span class=\"stringliteral\">&quot;slow&quot;</span>: 0.18}</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    packet_delay = delay_options.get(args.otaSpeed, 0.07)</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    <span class=\"keyword\">with</span> open(args.filename, <span class=\"stringliteral\">&quot;rb&quot;</span>) <span class=\"keyword\">as</span> binary_file:</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        chunked_file = []</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        encoded_string = []</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        n = 212  <span class=\"comment\"># Max 215 - 2. Divisible by 4 =&gt; 212</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160; </div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        <span class=\"keywordflow\">for</span> chunk <span class=\"keywordflow\">in</span> iter(<span class=\"keyword\">lambda</span>: binary_file.read(n), b<span class=\"stringliteral\">&quot;&quot;</span>):</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;            chunked_file.append(chunk)</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        <span class=\"keywordflow\">for</span> chunk <span class=\"keywordflow\">in</span> chunked_file:</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;            encoded_string.append(base64.b64encode(bytes(chunk)).decode(<span class=\"stringliteral\">&#39;ascii&#39;</span>))</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"comment\"># chunked_string = [encoded_string[i:i+n] for i in range(0, len(encoded_string), n)]</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        binary_file.seek(0);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        hash_md5 = hashlib.md5()</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <span class=\"keywordflow\">for</span> chunk <span class=\"keywordflow\">in</span> iter(<span class=\"keyword\">lambda</span>: binary_file.read(4096), b<span class=\"stringliteral\">&quot;&quot;</span>):</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;            hash_md5.update(chunk)</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"comment\"># print(hash_md5.hexdigest())</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        binary_file.close()</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160; </div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    mqtt.Client.connected_flag = <span class=\"keyword\">False</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;    client = mqtt.Client(mqttclientname, <span class=\"keyword\">True</span>)</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    client.username_pw_set(username=args.mqttUser, password=args.mqttPass)</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    <span class=\"keywordflow\">if</span> args.mqttSecure:</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        client.tls_set()</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    client.on_connect = on_connect</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    client.on_message = on_message</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160; </div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    client.connect(host=args.mqttServer, port=args.mqttPort)</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;    <span class=\"keywordflow\">while</span> <span class=\"keywordflow\">not</span> client.connected_flag:  <span class=\"comment\"># wait in loop</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        print(<span class=\"stringliteral\">&quot;Connecting to MQTT server&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        client.loop()</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        time.sleep(1)</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160; </div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    <span class=\"comment\"># client.loop_start()</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;    sleep_topic = args.baseTopic + <span class=\"stringliteral\">&quot;/&quot;</span> + args.address + sleepSetTopic</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;    client.publish(sleep_topic, <span class=\"stringliteral\">&quot;0&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160; </div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    <span class=\"keywordflow\">while</span> sleepyNode:</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        print(<span class=\"stringliteral\">&quot;Waiting for non sleepy confirmation&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        client.loop()</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        time.sleep(1)</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160; </div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    print(<span class=\"stringliteral\">&quot;Sending hash: &quot;</span> + hash_md5.hexdigest())</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    md5_str = hash_md5.hexdigest()</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160; </div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;    <span class=\"comment\"># msg 0, file size, number of chunks, md5 checksum</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;    print(<span class=\"stringliteral\">&quot;Sending %d bytes in %d chunks&quot;</span> % (ota_length,len(encoded_string)))</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;    client.publish(ota_topic, <span class=\"stringliteral\">&quot;0,&quot;</span> + str(ota_length) + <span class=\"stringliteral\">&quot;,&quot;</span> + str(len(encoded_string)) + <span class=\"stringliteral\">&quot;,&quot;</span> + md5_str)</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160; </div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;    <span class=\"comment\"># for i in range(0, len(chunked_string), 1):</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;    print(<span class=\"stringliteral\">&quot;Sending file: &quot;</span> + args.filename)</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;    <span class=\"keyword\">global</span> idx</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160; </div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;    <span class=\"comment\"># remove to simulate lost message</span></div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    <span class=\"comment\"># error = False</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160; </div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;    <span class=\"keywordflow\">while</span> idx &lt; len(encoded_string):</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        client.loop()</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        time.sleep(packet_delay)</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        <span class=\"comment\"># time.sleep(0.2)</span></div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        <span class=\"comment\"># if i not in range(10,13):</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;        i = idx + 1</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        client.publish(ota_topic, str(i) + <span class=\"stringliteral\">&quot;,&quot;</span> + encoded_string[idx])</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        idx = idx + 1</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160; </div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        <span class=\"comment\"># remove to simulate lost message</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        <span class=\"comment\"># if idx == 100 and not error:</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;        <span class=\"comment\">#    error = True</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"comment\">#    idx = idx + 1</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160; </div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        <span class=\"keywordflow\">if</span> i % 2 == 0:</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;            print(<span class=\"stringliteral\">&quot;.&quot;</span>, end=<span class=\"stringliteral\">&#39;&#39;</span>)</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        <span class=\"keywordflow\">if</span> i % 160 == 0:</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;            print(<span class=\"stringliteral\">&quot; %.f%%&quot;</span> % (i / len(encoded_string) * 100))</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"keywordflow\">if</span> i == len(encoded_string):</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;            <span class=\"keywordflow\">for</span> i <span class=\"keywordflow\">in</span> range(0, 40):</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;                client.loop()</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                time.sleep(0.5)</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;                <span class=\"keywordflow\">if</span> otaFinished:</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;                    print(<span class=\"stringliteral\">&quot; OTA OK &quot;</span>, end=<span class=\"stringliteral\">&#39;&#39;</span>)</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;                    <span class=\"keywordflow\">break</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160; </div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;    print(<span class=\"stringliteral\">&quot;100%&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;    <span class=\"comment\"># time.sleep(5)</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;    client.disconnect()</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160; </div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160; </div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"keywordflow\">if</span> __name__ == <span class=\"stringliteral\">&#39;__main__&#39;</span>:</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;    <a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#a0625a265d8105bb0e6aa1503f88e21cd\">main</a>()</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"anamespaceEnigmaIoTUpdate_html_a162ca4b2a6c3e338d7e86162b09eb13a\"><div class=\"ttname\"><a href=\"namespaceEnigmaIoTUpdate.html#a162ca4b2a6c3e338d7e86162b09eb13a\">EnigmaIoTUpdate.on_message</a></div><div class=\"ttdeci\">def on_message(client, userdata, msg)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTUpdate_8py_source.html#l00044\">EnigmaIoTUpdate.py:44</a></div></div>\n<div class=\"ttc\" id=\"anamespaceEnigmaIoTUpdate_html_a9e979dfe91c5de2dfa6660efcf30bb9a\"><div class=\"ttname\"><a href=\"namespaceEnigmaIoTUpdate.html#a9e979dfe91c5de2dfa6660efcf30bb9a\">EnigmaIoTUpdate.on_connect</a></div><div class=\"ttdeci\">def on_connect(client, userdata, flags, rc)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTUpdate_8py_source.html#l00029\">EnigmaIoTUpdate.py:29</a></div></div>\n<div class=\"ttc\" id=\"anamespaceEnigmaIoTUpdate_html_a0625a265d8105bb0e6aa1503f88e21cd\"><div class=\"ttname\"><a href=\"namespaceEnigmaIoTUpdate.html#a0625a265d8105bb0e6aa1503f88e21cd\">EnigmaIoTUpdate.main</a></div><div class=\"ttdeci\">def main()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTUpdate_8py_source.html#l00067\">EnigmaIoTUpdate.py:67</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIoTconfigAdvanced_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIoTconfigAdvanced.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIoTconfigAdvanced.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Parameter configuration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;Arduino.h&quot;</code><br />\n</div>\n<p><a href=\"EnigmaIoTconfigAdvanced_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a7961bef0ea455a0913f7bf894b58eac4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a7961bef0ea455a0913f7bf894b58eac4\">ENABLE_REST_API</a>&#160;&#160;&#160;1</td></tr>\n<tr class=\"memdesc:a7961bef0ea455a0913f7bf894b58eac4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 1 to enable REST API.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a7961bef0ea455a0913f7bf894b58eac4\">More...</a><br /></td></tr>\n<tr class=\"separator:a7961bef0ea455a0913f7bf894b58eac4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a16e6dc75c832482efe3cc26d5f187201\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a16e6dc75c832482efe3cc26d5f187201\">SUPPORT_HA_DISCOVERY</a>&#160;&#160;&#160;1</td></tr>\n<tr class=\"memdesc:a16e6dc75c832482efe3cc26d5f187201\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 1 to enable HomeAssistant autodiscovery support.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a16e6dc75c832482efe3cc26d5f187201\">More...</a><br /></td></tr>\n<tr class=\"separator:a16e6dc75c832482efe3cc26d5f187201\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3adc46611e76e71d60021e6c87d11dcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3adc46611e76e71d60021e6c87d11dcc\">USE_FLASH_INSTEAD_RTC</a>&#160;&#160;&#160;0</td></tr>\n<tr class=\"memdesc:a3adc46611e76e71d60021e6c87d11dcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Use flash instead RTC for temporary context data. ATTENTION: This allows connection to survive power off cycles but may damage flash memory persistently.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a3adc46611e76e71d60021e6c87d11dcc\">More...</a><br /></td></tr>\n<tr class=\"separator:a3adc46611e76e71d60021e6c87d11dcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ca4cd82c4372161db98aee89cff4868\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a1ca4cd82c4372161db98aee89cff4868\">HA_FIRST_DISCOVERY_DELAY</a>&#160;&#160;&#160;5000</td></tr>\n<tr class=\"separator:a1ca4cd82c4372161db98aee89cff4868\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a21aa047809e9b061f5712589cf2136f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21aa047809e9b061f5712589cf2136f9\">HA_NEXT_DISCOVERY_DELAY</a>&#160;&#160;&#160;500</td></tr>\n<tr class=\"separator:a21aa047809e9b061f5712589cf2136f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a49e01af100e8659b911c4dc6c8b30ef4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a49e01af100e8659b911c4dc6c8b30ef4\">HA_FIRST_DISCOVERY_DELAY_SLEEPY</a>&#160;&#160;&#160;10</td></tr>\n<tr class=\"separator:a49e01af100e8659b911c4dc6c8b30ef4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a19844f57e8cb836e57d6418a76e6717f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a19844f57e8cb836e57d6418a76e6717f\">HA_NEXT_DISCOVERY_DELAY_SLEEPY</a>&#160;&#160;&#160;10</td></tr>\n<tr class=\"separator:a19844f57e8cb836e57d6418a76e6717f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a60424869b9d0955e8745158aadcd95b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a60424869b9d0955e8745158aadcd95b0\">CYPHER_TYPE</a>&#160;&#160;&#160;ChaChaPoly</td></tr>\n<tr class=\"separator:a60424869b9d0955e8745158aadcd95b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a9dbccd523bb0ed9a3266bc8c448f4432\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a> = 250</td></tr>\n<tr class=\"memdesc:a9dbccd523bb0ed9a3266bc8c448f4432\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum payload size on ESP-NOW.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">More...</a><br /></td></tr>\n<tr class=\"separator:a9dbccd523bb0ed9a3266bc8c448f4432\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fccc769283a5e59b2205fce6c5663c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3\">MAX_DATA_PAYLOAD_LENGTH</a> = 214</td></tr>\n<tr class=\"memdesc:a2fccc769283a5e59b2205fce6c5663c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum EnigmaIOT user data payload size.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3\">More...</a><br /></td></tr>\n<tr class=\"separator:a2fccc769283a5e59b2205fce6c5663c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a479714978e5c2a44dce41ae3be800ffd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> = 6</td></tr>\n<tr class=\"memdesc:a479714978e5c2a44dce41ae3be800ffd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Address size. Mac address = 6 bytes.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">More...</a><br /></td></tr>\n<tr class=\"separator:a479714978e5c2a44dce41ae3be800ffd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9865adf18595ebc6eb73154e6267380e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a> = 21</td></tr>\n<tr class=\"memdesc:a9865adf18595ebc6eb73154e6267380e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum number of characters of network name.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">More...</a><br /></td></tr>\n<tr class=\"separator:a9865adf18595ebc6eb73154e6267380e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a025eed5564c31f411fc6950a5ecd4c40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a> = 33</td></tr>\n<tr class=\"memdesc:a025eed5564c31f411fc6950a5ecd4c40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum number of characters of node name.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">More...</a><br /></td></tr>\n<tr class=\"separator:a025eed5564c31f411fc6950a5ecd4c40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4e22033bdc1560ca309e9a14073c2282\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a> [] = { 0xff,0xff,0xff,0xff,0xff,0xff }</td></tr>\n<tr class=\"memdesc:a4e22033bdc1560ca309e9a14073c2282\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Broadcast address.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">More...</a><br /></td></tr>\n<tr class=\"separator:a4e22033bdc1560ca309e9a14073c2282\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2ec716b4c6aeedb3d1eb957b02d69dc1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">BROADCAST_NONE_NAME</a> [] = &quot;broadcast&quot;</td></tr>\n<tr class=\"memdesc:a2ec716b4c6aeedb3d1eb957b02d69dc1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Name to reference broadcast node.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">More...</a><br /></td></tr>\n<tr class=\"separator:a2ec716b4c6aeedb3d1eb957b02d69dc1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a986a0e97c281fc18f135d159caba672c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c\">COMMS_QUEUE_SIZE</a> = 5</td></tr>\n<tr class=\"separator:a986a0e97c281fc18f135d159caba672c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aad94db36f97a563732bfd0ca10b164f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9\">OTA_GW_TIMEOUT</a> = 11000</td></tr>\n<tr class=\"memdesc:aad94db36f97a563732bfd0ca10b164f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">OTA mode timeout. In OTA mode all data messages are ignored.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9\">More...</a><br /></td></tr>\n<tr class=\"separator:aad94db36f97a563732bfd0ca10b164f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6aa9a1bf5b534f017d6c1c7bec100d1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d\">DISCONNECT_ON_DATA_ERROR</a> = true</td></tr>\n<tr class=\"memdesc:a6aa9a1bf5b534f017d6c1c7bec100d1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Activates node invalidation in case of data error.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d\">More...</a><br /></td></tr>\n<tr class=\"separator:a6aa9a1bf5b534f017d6c1c7bec100d1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a21ccf12c2b61e8c6eeef4b41326d0020\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020\">HA_DISCOVERY_PREFIX</a> [] = &quot;homeassistant&quot;</td></tr>\n<tr class=\"memdesc:a21ccf12c2b61e8c6eeef4b41326d0020\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to build HomeAssistant discovery message topic.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020\">More...</a><br /></td></tr>\n<tr class=\"separator:a21ccf12c2b61e8c6eeef4b41326d0020\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeb4681294ade5149d1db83df99744f6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e\">OTA_TIMEOUT_TIME</a> = 10000</td></tr>\n<tr class=\"memdesc:aeb4681294ade5149d1db83df99744f6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Timeout between OTA messages. In milliseconds.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e\">More...</a><br /></td></tr>\n<tr class=\"separator:aeb4681294ade5149d1db83df99744f6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6be31758c99161d257bf66a6a809047d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d\">MIN_SYNC_ACCURACY</a> = 5000</td></tr>\n<tr class=\"memdesc:a6be31758c99161d257bf66a6a809047d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If calculated offset absolute value is higher than this value resync is done more often. us units.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d\">More...</a><br /></td></tr>\n<tr class=\"separator:a6be31758c99161d257bf66a6a809047d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8df0346a1f3e282d6875b04a9fe4ec8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a> = 214</td></tr>\n<tr class=\"memdesc:a8df0346a1f3e282d6875b04a9fe4ec8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximun payload size for data packets.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">More...</a><br /></td></tr>\n<tr class=\"separator:a8df0346a1f3e282d6875b04a9fe4ec8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a27b8cf1e2d300318f7102b8bc0facef9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9\">CHECK_COMM_ERRORS</a> = true</td></tr>\n<tr class=\"memdesc:a27b8cf1e2d300318f7102b8bc0facef9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Try to reconnect in case of communication errors.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9\">More...</a><br /></td></tr>\n<tr class=\"separator:a27b8cf1e2d300318f7102b8bc0facef9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a68fd5dd70eb1fa10fa1878e044d14cb0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">RTC_ADDRESS</a> = 8</td></tr>\n<tr class=\"memdesc:a68fd5dd70eb1fa10fa1878e044d14cb0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">RTC memory address where to store context. Modify it if you need place to store your own data during deep sleep. Take care not to overwrite above that address. It is 8 to give space for FailSafeMode library.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">More...</a><br /></td></tr>\n<tr class=\"separator:a68fd5dd70eb1fa10fa1878e044d14cb0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a863ca9be67da8cdc5fb9447378021e07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> = 32</td></tr>\n<tr class=\"memdesc:a863ca9be67da8cdc5fb9447378021e07\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know what you are doing.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">More...</a><br /></td></tr>\n<tr class=\"separator:a863ca9be67da8cdc5fb9447378021e07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ae6c4c749724e380b6e717a6535bed6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a> = 12</td></tr>\n<tr class=\"memdesc:a0ae6c4c749724e380b6e717a6535bed6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initalization vector length used by selected crypto algorythm.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">More...</a><br /></td></tr>\n<tr class=\"separator:a0ae6c4c749724e380b6e717a6535bed6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e80e7a8216a26293d66f1e35829df71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a> = 16</td></tr>\n<tr class=\"memdesc:a2e80e7a8216a26293d66f1e35829df71\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Authentication tag length. For Poly1305 it is always 16.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">More...</a><br /></td></tr>\n<tr class=\"separator:a2e80e7a8216a26293d66f1e35829df71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3a00052a511fa3b63de7e280320b1ef9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> = 8</td></tr>\n<tr class=\"memdesc:a3a00052a511fa3b63de7e280320b1ef9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Number of bytes from last part of key that will be used for additional authenticated data.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">More...</a><br /></td></tr>\n<tr class=\"separator:a3a00052a511fa3b63de7e280320b1ef9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a75ba0ac6d6287a6b8d580cd65038a77a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a\">WEB_API_PORT</a> = 80</td></tr>\n<tr class=\"memdesc:a75ba0ac6d6287a6b8d580cd65038a77a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">TCP port where Web API will listen through.  <a href=\"EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a\">More...</a><br /></td></tr>\n<tr class=\"separator:a75ba0ac6d6287a6b8d580cd65038a77a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Parameter configuration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a60424869b9d0955e8745158aadcd95b0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a60424869b9d0955e8745158aadcd95b0\">&#9670;&nbsp;</a></span>CYPHER_TYPE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define CYPHER_TYPE&#160;&#160;&#160;ChaChaPoly</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00074\">74</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7961bef0ea455a0913f7bf894b58eac4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7961bef0ea455a0913f7bf894b58eac4\">&#9670;&nbsp;</a></span>ENABLE_REST_API</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define ENABLE_REST_API&#160;&#160;&#160;1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set to 1 to enable REST API. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00036\">36</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1ca4cd82c4372161db98aee89cff4868\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1ca4cd82c4372161db98aee89cff4868\">&#9670;&nbsp;</a></span>HA_FIRST_DISCOVERY_DELAY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define HA_FIRST_DISCOVERY_DELAY&#160;&#160;&#160;5000</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00057\">57</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a49e01af100e8659b911c4dc6c8b30ef4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a49e01af100e8659b911c4dc6c8b30ef4\">&#9670;&nbsp;</a></span>HA_FIRST_DISCOVERY_DELAY_SLEEPY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define HA_FIRST_DISCOVERY_DELAY_SLEEPY&#160;&#160;&#160;10</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00063\">63</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a21aa047809e9b061f5712589cf2136f9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a21aa047809e9b061f5712589cf2136f9\">&#9670;&nbsp;</a></span>HA_NEXT_DISCOVERY_DELAY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define HA_NEXT_DISCOVERY_DELAY&#160;&#160;&#160;500</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00060\">60</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a19844f57e8cb836e57d6418a76e6717f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a19844f57e8cb836e57d6418a76e6717f\">&#9670;&nbsp;</a></span>HA_NEXT_DISCOVERY_DELAY_SLEEPY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define HA_NEXT_DISCOVERY_DELAY_SLEEPY&#160;&#160;&#160;10</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00066\">66</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a16e6dc75c832482efe3cc26d5f187201\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a16e6dc75c832482efe3cc26d5f187201\">&#9670;&nbsp;</a></span>SUPPORT_HA_DISCOVERY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SUPPORT_HA_DISCOVERY&#160;&#160;&#160;1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set to 1 to enable HomeAssistant autodiscovery support. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00039\">39</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a3adc46611e76e71d60021e6c87d11dcc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3adc46611e76e71d60021e6c87d11dcc\">&#9670;&nbsp;</a></span>USE_FLASH_INSTEAD_RTC</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define USE_FLASH_INSTEAD_RTC&#160;&#160;&#160;0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Use flash instead RTC for temporary context data. ATTENTION: This allows connection to survive power off cycles but may damage flash memory persistently. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00054\">54</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a3a00052a511fa3b63de7e280320b1ef9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3a00052a511fa3b63de7e280320b1ef9\">&#9670;&nbsp;</a></span>AAD_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t AAD_LENGTH = 8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Number of bytes from last part of key that will be used for additional authenticated data. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00073\">73</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4e22033bdc1560ca309e9a14073c2282\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4e22033bdc1560ca309e9a14073c2282\">&#9670;&nbsp;</a></span>BROADCAST_ADDRESS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t BROADCAST_ADDRESS[] = { 0xff,0xff,0xff,0xff,0xff,0xff }</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Broadcast address. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00026\">26</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2ec716b4c6aeedb3d1eb957b02d69dc1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2ec716b4c6aeedb3d1eb957b02d69dc1\">&#9670;&nbsp;</a></span>BROADCAST_NONE_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char BROADCAST_NONE_NAME[] = &quot;broadcast&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Name to reference broadcast node. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00027\">27</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a27b8cf1e2d300318f7102b8bc0facef9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a27b8cf1e2d300318f7102b8bc0facef9\">&#9670;&nbsp;</a></span>CHECK_COMM_ERRORS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const bool CHECK_COMM_ERRORS = true</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Try to reconnect in case of communication errors. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00050\">50</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a986a0e97c281fc18f135d159caba672c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a986a0e97c281fc18f135d159caba672c\">&#9670;&nbsp;</a></span>COMMS_QUEUE_SIZE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t COMMS_QUEUE_SIZE = 5</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00028\">28</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6aa9a1bf5b534f017d6c1c7bec100d1d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6aa9a1bf5b534f017d6c1c7bec100d1d\">&#9670;&nbsp;</a></span>DISCONNECT_ON_DATA_ERROR</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const bool DISCONNECT_ON_DATA_ERROR = true</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Activates node invalidation in case of data error. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00033\">33</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a479714978e5c2a44dce41ae3be800ffd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a479714978e5c2a44dce41ae3be800ffd\">&#9670;&nbsp;</a></span>ENIGMAIOT_ADDR_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const size_t ENIGMAIOT_ADDR_LEN = 6</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Address size. Mac address = 6 bytes. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">23</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a21ccf12c2b61e8c6eeef4b41326d0020\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a21ccf12c2b61e8c6eeef4b41326d0020\">&#9670;&nbsp;</a></span>HA_DISCOVERY_PREFIX</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char HA_DISCOVERY_PREFIX[] = &quot;homeassistant&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Used to build HomeAssistant discovery message topic. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00041\">41</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0ae6c4c749724e380b6e717a6535bed6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0ae6c4c749724e380b6e717a6535bed6\">&#9670;&nbsp;</a></span>IV_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t IV_LENGTH = 12</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Initalization vector length used by selected crypto algorythm. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00071\">71</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a863ca9be67da8cdc5fb9447378021e07\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a863ca9be67da8cdc5fb9447378021e07\">&#9670;&nbsp;</a></span>KEY_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t KEY_LENGTH = 32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know what you are doing. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00070\">70</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2fccc769283a5e59b2205fce6c5663c3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2fccc769283a5e59b2205fce6c5663c3\">&#9670;&nbsp;</a></span>MAX_DATA_PAYLOAD_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t MAX_DATA_PAYLOAD_LENGTH = 214</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Maximum EnigmaIOT user data payload size. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00022\">22</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8df0346a1f3e282d6875b04a9fe4ec8f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8df0346a1f3e282d6875b04a9fe4ec8f\">&#9670;&nbsp;</a></span>MAX_DATA_PAYLOAD_SIZE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int MAX_DATA_PAYLOAD_SIZE = 214</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Maximun payload size for data packets. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00048\">48</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a9dbccd523bb0ed9a3266bc8c448f4432\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9dbccd523bb0ed9a3266bc8c448f4432\">&#9670;&nbsp;</a></span>MAX_MESSAGE_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t MAX_MESSAGE_LENGTH = 250</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Maximum payload size on ESP-NOW. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">21</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6be31758c99161d257bf66a6a809047d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6be31758c99161d257bf66a6a809047d\">&#9670;&nbsp;</a></span>MIN_SYNC_ACCURACY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int MIN_SYNC_ACCURACY = 5000</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>If calculated offset absolute value is higher than this value resync is done more often. us units. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00047\">47</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a9865adf18595ebc6eb73154e6267380e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9865adf18595ebc6eb73154e6267380e\">&#9670;&nbsp;</a></span>NETWORK_NAME_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t NETWORK_NAME_LENGTH = 21</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Maximum number of characters of network name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00024\">24</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a025eed5564c31f411fc6950a5ecd4c40\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a025eed5564c31f411fc6950a5ecd4c40\">&#9670;&nbsp;</a></span>NODE_NAME_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t NODE_NAME_LENGTH = 33</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Maximum number of characters of node name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00025\">25</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aad94db36f97a563732bfd0ca10b164f9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aad94db36f97a563732bfd0ca10b164f9\">&#9670;&nbsp;</a></span>OTA_GW_TIMEOUT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int OTA_GW_TIMEOUT = 11000</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>OTA mode timeout. In OTA mode all data messages are ignored. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00031\">31</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aeb4681294ade5149d1db83df99744f6e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aeb4681294ade5149d1db83df99744f6e\">&#9670;&nbsp;</a></span>OTA_TIMEOUT_TIME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint32_t OTA_TIMEOUT_TIME = 10000</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Timeout between OTA messages. In milliseconds. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00046\">46</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a68fd5dd70eb1fa10fa1878e044d14cb0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a68fd5dd70eb1fa10fa1878e044d14cb0\">&#9670;&nbsp;</a></span>RTC_ADDRESS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint32_t RTC_ADDRESS = 8</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>RTC memory address where to store context. Modify it if you need place to store your own data during deep sleep. Take care not to overwrite above that address. It is 8 to give space for FailSafeMode library. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00052\">52</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2e80e7a8216a26293d66f1e35829df71\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2e80e7a8216a26293d66f1e35829df71\">&#9670;&nbsp;</a></span>TAG_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t TAG_LENGTH = 16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Authentication tag length. For Poly1305 it is always 16. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00072\">72</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a75ba0ac6d6287a6b8d580cd65038a77a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a75ba0ac6d6287a6b8d580cd65038a77a\">&#9670;&nbsp;</a></span>WEB_API_PORT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int WEB_API_PORT = 80</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>TCP port where Web API will listen through. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00077\">77</a> of file <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIoTconfigAdvanced_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIoTconfigAdvanced.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIoTconfigAdvanced.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIoTconfigAdvanced_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"comment\"> /****************************************************************************</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"comment\">  DO NOT MODIFY THESE SETTINGS UNLESS YOU KNOW WHAT YOU ARE DOING</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"comment\">  ---------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"comment\">  NO MODIFIQUES ESTOS AJUSTES SI NO SABES LO QUE ESTÁS HACIENDO</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">  ****************************************************************************/</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160; </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#ifndef _CONFIG_ADVANCED_h</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#define _CONFIG_ADVANCED_h</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">// Global configuration. Physical layer settings</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">   21</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a> = 250; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3\">   22</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3\">MAX_DATA_PAYLOAD_LENGTH</a> = 214; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">   23</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> = 6; </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">   24</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a> = 21; </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">   25</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a> = 33; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">   26</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a>[] = { 0xff,0xff,0xff,0xff,0xff,0xff }; </div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">   27</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">BROADCAST_NONE_NAME</a>[] = <span class=\"stringliteral\">&quot;broadcast&quot;</span>; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c\">   28</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c\">COMMS_QUEUE_SIZE</a> = 5;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"comment\">// Gateway configuration</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9\">   31</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9\">OTA_GW_TIMEOUT</a> = 11000; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#ifndef DISCONNECT_ON_DATA_ERROR</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d\">   33</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d\">DISCONNECT_ON_DATA_ERROR</a> = <span class=\"keyword\">true</span>; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#endif //DISCONNECT_ON_DATA_ERROR</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#ifndef ENABLE_REST_API</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a7961bef0ea455a0913f7bf894b58eac4\">   36</a></span>&#160;<span class=\"preprocessor\">#define ENABLE_REST_API 1 </span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#endif // ENABLE_REST_API</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#ifndef SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a16e6dc75c832482efe3cc26d5f187201\">   39</a></span>&#160;<span class=\"preprocessor\">#define SUPPORT_HA_DISCOVERY 1  </span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020\">   41</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020\">HA_DISCOVERY_PREFIX</a>[] = <span class=\"stringliteral\">&quot;homeassistant&quot;</span>; </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"comment\">// Node configuration</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e\">   46</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint32_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e\">OTA_TIMEOUT_TIME</a> = 10000; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d\">   47</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d\">MIN_SYNC_ACCURACY</a> = 5000; </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">   48</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a> = 214; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#ifndef CHECK_COMM_ERRORS</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9\">   50</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9\">CHECK_COMM_ERRORS</a> = <span class=\"keyword\">true</span>; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#endif // CHECK_COMM_ERRORS</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">   52</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint32_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">RTC_ADDRESS</a> = 8; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#ifndef USE_FLASH_INSTEAD_RTC</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3adc46611e76e71d60021e6c87d11dcc\">   54</a></span>&#160;<span class=\"preprocessor\">#define USE_FLASH_INSTEAD_RTC 0 </span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#endif // USE_FLASH_INSTEAD_RTC</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#ifndef HA_FIRST_DISCOVERY_DELAY</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a1ca4cd82c4372161db98aee89cff4868\">   57</a></span>&#160;<span class=\"preprocessor\">#define HA_FIRST_DISCOVERY_DELAY 5000</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#endif // HA_FIRST_DISCOVERY_DELAY</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">#ifndef HA_NEXT_DISCOVERY_DELAY</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21aa047809e9b061f5712589cf2136f9\">   60</a></span>&#160;<span class=\"preprocessor\">#define HA_NEXT_DISCOVERY_DELAY 500</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#endif // HA_NEXT_DISCOVERY_DELAY</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">#ifndef HA_FIRST_DISCOVERY_DELAY_SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a49e01af100e8659b911c4dc6c8b30ef4\">   63</a></span>&#160;<span class=\"preprocessor\">#define HA_FIRST_DISCOVERY_DELAY_SLEEPY 10</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#endif // HA_FIRST_DISCOVERY_DELAY</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#ifndef HA_NEXT_DISCOVERY_DELAY_SLEEPY</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a19844f57e8cb836e57d6418a76e6717f\">   66</a></span>&#160;<span class=\"preprocessor\">#define HA_NEXT_DISCOVERY_DELAY_SLEEPY 10</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#endif // HA_NEXT_DISCOVERY_DELAY</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160; </div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"comment\">//Crypto configuration</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">   70</a></span>&#160;<span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a> = 32; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">   71</a></span>&#160;<span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a> = 12; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">   72</a></span>&#160;<span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a> = 16; </div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">   73</a></span>&#160;<span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a> = 8; </div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a60424869b9d0955e8745158aadcd95b0\">   74</a></span>&#160;<span class=\"preprocessor\">#define CYPHER_TYPE ChaChaPoly</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"comment\">//Web API</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a\">   77</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a\">WEB_API_PORT</a> = 80; </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160; </div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"comment\">//File system</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#if defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#define FILESYSTEM SPIFFS</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">#elif defined ESP8266</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"preprocessor\">    #ifndef USE_LITTLE_FS</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">    #define USE_LITTLE_FS 1 </span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\">    #endif // USE_LITTLE_FS</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"preprocessor\">#if USE_LITTLE_FS</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\">#include &lt;LittleFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\">#define FILESYSTEM LittleFS</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#define FILESYSTEM SPIFFS</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"preprocessor\">#endif // USE_LITTLE_FS</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a6aa9a1bf5b534f017d6c1c7bec100d1d\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d\">DISCONNECT_ON_DATA_ERROR</a></div><div class=\"ttdeci\">static const bool DISCONNECT_ON_DATA_ERROR</div><div class=\"ttdoc\">Activates node invalidation in case of data error.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00033\">EnigmaIoTconfigAdvanced.h:33</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_aeb4681294ade5149d1db83df99744f6e\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e\">OTA_TIMEOUT_TIME</a></div><div class=\"ttdeci\">static const uint32_t OTA_TIMEOUT_TIME</div><div class=\"ttdoc\">Timeout between OTA messages. In milliseconds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00046\">EnigmaIoTconfigAdvanced.h:46</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a2e80e7a8216a26293d66f1e35829df71\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">TAG_LENGTH</a></div><div class=\"ttdeci\">const uint8_t TAG_LENGTH</div><div class=\"ttdoc\">Authentication tag length. For Poly1305 it is always 16.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00072\">EnigmaIoTconfigAdvanced.h:72</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a025eed5564c31f411fc6950a5ecd4c40\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NODE_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00025\">EnigmaIoTconfigAdvanced.h:25</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a8df0346a1f3e282d6875b04a9fe4ec8f\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a></div><div class=\"ttdeci\">static const int MAX_DATA_PAYLOAD_SIZE</div><div class=\"ttdoc\">Maximun payload size for data packets.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00048\">EnigmaIoTconfigAdvanced.h:48</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9865adf18595ebc6eb73154e6267380e\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NETWORK_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00024\">EnigmaIoTconfigAdvanced.h:24</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a6be31758c99161d257bf66a6a809047d\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d\">MIN_SYNC_ACCURACY</a></div><div class=\"ttdeci\">static const int MIN_SYNC_ACCURACY</div><div class=\"ttdoc\">If calculated offset absolute value is higher than this value resync is done more often....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00047\">EnigmaIoTconfigAdvanced.h:47</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a2fccc769283a5e59b2205fce6c5663c3\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3\">MAX_DATA_PAYLOAD_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_DATA_PAYLOAD_LENGTH</div><div class=\"ttdoc\">Maximum EnigmaIOT user data payload size.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00022\">EnigmaIoTconfigAdvanced.h:22</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_aad94db36f97a563732bfd0ca10b164f9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9\">OTA_GW_TIMEOUT</a></div><div class=\"ttdeci\">static const int OTA_GW_TIMEOUT</div><div class=\"ttdoc\">OTA mode timeout. In OTA mode all data messages are ignored.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00031\">EnigmaIoTconfigAdvanced.h:31</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a3a00052a511fa3b63de7e280320b1ef9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">AAD_LENGTH</a></div><div class=\"ttdeci\">const uint8_t AAD_LENGTH</div><div class=\"ttdoc\">Number of bytes from last part of key that will be used for additional authenticated data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00073\">EnigmaIoTconfigAdvanced.h:73</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a27b8cf1e2d300318f7102b8bc0facef9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9\">CHECK_COMM_ERRORS</a></div><div class=\"ttdeci\">static const bool CHECK_COMM_ERRORS</div><div class=\"ttdoc\">Try to reconnect in case of communication errors.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00050\">EnigmaIoTconfigAdvanced.h:50</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a986a0e97c281fc18f135d159caba672c\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c\">COMMS_QUEUE_SIZE</a></div><div class=\"ttdeci\">static const uint8_t COMMS_QUEUE_SIZE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00028\">EnigmaIoTconfigAdvanced.h:28</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a2ec716b4c6aeedb3d1eb957b02d69dc1\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">BROADCAST_NONE_NAME</a></div><div class=\"ttdeci\">static const char BROADCAST_NONE_NAME[]</div><div class=\"ttdoc\">Name to reference broadcast node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00027\">EnigmaIoTconfigAdvanced.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a863ca9be67da8cdc5fb9447378021e07\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a></div><div class=\"ttdeci\">const uint8_t KEY_LENGTH</div><div class=\"ttdoc\">Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00070\">EnigmaIoTconfigAdvanced.h:70</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a4e22033bdc1560ca309e9a14073c2282\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a></div><div class=\"ttdeci\">static const uint8_t BROADCAST_ADDRESS[]</div><div class=\"ttdoc\">Broadcast address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00026\">EnigmaIoTconfigAdvanced.h:26</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a68fd5dd70eb1fa10fa1878e044d14cb0\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">RTC_ADDRESS</a></div><div class=\"ttdeci\">static const uint32_t RTC_ADDRESS</div><div class=\"ttdoc\">RTC memory address where to store context. Modify it if you need place to store your own data during ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00052\">EnigmaIoTconfigAdvanced.h:52</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a75ba0ac6d6287a6b8d580cd65038a77a\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a\">WEB_API_PORT</a></div><div class=\"ttdeci\">const int WEB_API_PORT</div><div class=\"ttdoc\">TCP port where Web API will listen through.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00077\">EnigmaIoTconfigAdvanced.h:77</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a0ae6c4c749724e380b6e717a6535bed6\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">IV_LENGTH</a></div><div class=\"ttdeci\">const uint8_t IV_LENGTH</div><div class=\"ttdoc\">Initalization vector length used by selected crypto algorythm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00071\">EnigmaIoTconfigAdvanced.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a21ccf12c2b61e8c6eeef4b41326d0020\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020\">HA_DISCOVERY_PREFIX</a></div><div class=\"ttdeci\">static const char HA_DISCOVERY_PREFIX[]</div><div class=\"ttdoc\">Used to build HomeAssistant discovery message topic.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00041\">EnigmaIoTconfigAdvanced.h:41</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIoTconfig_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIoTconfig.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIoTconfig.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Parameter configuration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;Arduino.h&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h_source.html\">EnigmaIoTconfigAdvanced.h</a>&quot;</code><br />\n</div>\n<p><a href=\"EnigmaIoTconfig_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a77cde0d6b3da9d409d46bdc85147724a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a\">TZINFO</a>&#160;&#160;&#160;&quot;CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00&quot;</td></tr>\n<tr class=\"memdesc:a77cde0d6b3da9d409d46bdc85147724a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Time zone.  <a href=\"EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a\">More...</a><br /></td></tr>\n<tr class=\"separator:a77cde0d6b3da9d409d46bdc85147724a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2cbd556e432924a29a3efa1d13668af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ad2cbd556e432924a29a3efa1d13668af\">NTP_SERVER_1</a>&#160;&#160;&#160;&quot;pool.ntp.org&quot;</td></tr>\n<tr class=\"separator:ad2cbd556e432924a29a3efa1d13668af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a562447c925663fec9c7e923f6c46fa7d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a562447c925663fec9c7e923f6c46fa7d\">NTP_SERVER_2</a>&#160;&#160;&#160;&quot;time.nist.gov&quot;</td></tr>\n<tr class=\"separator:a562447c925663fec9c7e923f6c46fa7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ace3e2bfbccf2b3dafab4775343471413\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ace3e2bfbccf2b3dafab4775343471413\">ENABLE_STATUS_MESSAGES</a>&#160;&#160;&#160;1</td></tr>\n<tr class=\"memdesc:ace3e2bfbccf2b3dafab4775343471413\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enable sending status message after every data message.  <a href=\"EnigmaIoTconfig_8h.html#ace3e2bfbccf2b3dafab4775343471413\">More...</a><br /></td></tr>\n<tr class=\"separator:ace3e2bfbccf2b3dafab4775343471413\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3be8ceb481b00916205f536e6028e2f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a3be8ceb481b00916205f536e6028e2f5\">CONNECT_TO_WIFI_AP</a>&#160;&#160;&#160;1</td></tr>\n<tr class=\"memdesc:a3be8ceb481b00916205f536e6028e2f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">In projects where gateway should not be connected to WiFi (for instance a data logger to SD) it may be useful to disable WiFi setting this to 0. Set it to 1 otherwise.  <a href=\"EnigmaIoTconfig_8h.html#a3be8ceb481b00916205f536e6028e2f5\">More...</a><br /></td></tr>\n<tr class=\"separator:a3be8ceb481b00916205f536e6028e2f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad736e65e20072f63bc4d21d745949962\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ad736e65e20072f63bc4d21d745949962\">ENABLE_WEB_API</a>&#160;&#160;&#160;1</td></tr>\n<tr class=\"memdesc:ad736e65e20072f63bc4d21d745949962\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enable Web API support on gateway.  <a href=\"EnigmaIoTconfig_8h.html#ad736e65e20072f63bc4d21d745949962\">More...</a><br /></td></tr>\n<tr class=\"separator:ad736e65e20072f63bc4d21d745949962\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59484fb7e3490df6600b5add60badbb7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7\">DEBUG_ESP_PORT</a>&#160;&#160;&#160;Serial</td></tr>\n<tr class=\"memdesc:a59484fb7e3490df6600b5add60badbb7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Stream to output debug info. It will normally be <code>Serial</code>  <a href=\"EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7\">More...</a><br /></td></tr>\n<tr class=\"separator:a59484fb7e3490df6600b5add60badbb7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac2d33ccaf63f5d5b66552b95426c0137\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ac2d33ccaf63f5d5b66552b95426c0137\">DEBUG_LEVEL</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a271d8f7f52be750e5c744a394ec71344\">WARN</a></td></tr>\n<tr class=\"memdesc:ac2d33ccaf63f5d5b66552b95426c0137\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Possible values VERBOSE, DBG, INFO, WARN, ERROR, NONE.  <a href=\"EnigmaIoTconfig_8h.html#ac2d33ccaf63f5d5b66552b95426c0137\">More...</a><br /></td></tr>\n<tr class=\"separator:ac2d33ccaf63f5d5b66552b95426c0137\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a9c45ffb63a64a645032b9c132f86c821\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a> [3] = { 0,9,8 }</td></tr>\n<tr class=\"memdesc:a9c45ffb63a64a645032b9c132f86c821\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">EnitmaIoT Version.  <a href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">More...</a><br /></td></tr>\n<tr class=\"separator:a9c45ffb63a64a645032b9c132f86c821\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af561a36a9d4be8596b2187252342ffdf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">DEFAULT_CHANNEL</a> = 3</td></tr>\n<tr class=\"memdesc:af561a36a9d4be8596b2187252342ffdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">WiFi channel to be used on ESP-NOW.  <a href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">More...</a><br /></td></tr>\n<tr class=\"separator:af561a36a9d4be8596b2187252342ffdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a152501c4de4fad4ccdc6dffa8b47c349\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a> = 30</td></tr>\n<tr class=\"memdesc:a152501c4de4fad4ccdc6dffa8b47c349\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Time that led keeps on during flash in ms.  <a href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">More...</a><br /></td></tr>\n<tr class=\"separator:a152501c4de4fad4ccdc6dffa8b47c349\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59cb3b60750ca326ee647918af7a4d0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b\">RESET_PIN_DURATION</a> = 5000</td></tr>\n<tr class=\"memdesc:a59cb3b60750ca326ee647918af7a4d0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Number of milliseconds that reset pin has to be grounded to produce a configuration reset.  <a href=\"EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b\">More...</a><br /></td></tr>\n<tr class=\"separator:a59cb3b60750ca326ee647918af7a4d0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aadcc5d2ec146be476018bdfc71d04f79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">MAX_KEY_VALIDITY</a> = 172800000U</td></tr>\n<tr class=\"memdesc:aadcc5d2ec146be476018bdfc71d04f79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">After this time (in ms) a node is unregistered. Setting this to 0 means imfinite.  <a href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">More...</a><br /></td></tr>\n<tr class=\"separator:aadcc5d2ec146be476018bdfc71d04f79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a718f713933a902050be33c5651800011\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011\">MAX_NODE_INACTIVITY</a> = 86400000U</td></tr>\n<tr class=\"memdesc:a718f713933a902050be33c5651800011\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">After this time (in ms) a node is marked as gone. Setting this to 0 means imfinite.  <a href=\"EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011\">More...</a><br /></td></tr>\n<tr class=\"separator:a718f713933a902050be33c5651800011\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a78ee44942fc7c28441d0cd502d1d3d3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">MAX_MQTT_QUEUE_SIZE</a> = 3</td></tr>\n<tr class=\"memdesc:a78ee44942fc7c28441d0cd502d1d3d3d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum number of MQTT messages to be sent.  <a href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">More...</a><br /></td></tr>\n<tr class=\"separator:a78ee44942fc7c28441d0cd502d1d3d3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af320072fb51a344213679450cacb3d6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#af320072fb51a344213679450cacb3d6a\">RATE_AVE_ORDER</a> = 5</td></tr>\n<tr class=\"memdesc:af320072fb51a344213679450cacb3d6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Message rate filter order.  <a href=\"EnigmaIoTconfig_8h.html#af320072fb51a344213679450cacb3d6a\">More...</a><br /></td></tr>\n<tr class=\"separator:af320072fb51a344213679450cacb3d6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2909f9f6e8ecc4dfd6947911e4eb2d96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a2909f9f6e8ecc4dfd6947911e4eb2d96\">MAX_INPUT_QUEUE_SIZE</a> = 3</td></tr>\n<tr class=\"memdesc:a2909f9f6e8ecc4dfd6947911e4eb2d96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Input queue size for EnigmaIOT messages. Acts as a buffer to be able to handle messages during high load.  <a href=\"EnigmaIoTconfig_8h.html#a2909f9f6e8ecc4dfd6947911e4eb2d96\">More...</a><br /></td></tr>\n<tr class=\"separator:a2909f9f6e8ecc4dfd6947911e4eb2d96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a71ee5004618cb61a934f136d7c2f45e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a> = 35</td></tr>\n<tr class=\"memdesc:a71ee5004618cb61a934f136d7c2f45e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum number of nodes that this gateway can handle.  <a href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">More...</a><br /></td></tr>\n<tr class=\"separator:a71ee5004618cb61a934f136d7c2f45e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b8712b5d25abc82bd371e652eae5826\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const int16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">RECONNECTION_PERIOD</a> = 1500</td></tr>\n<tr class=\"memdesc:a0b8712b5d25abc82bd371e652eae5826\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Time to retry Gateway connection.  <a href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">More...</a><br /></td></tr>\n<tr class=\"separator:a0b8712b5d25abc82bd371e652eae5826\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a52ec03c6ad068419f98e52f60718626e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e\">DOWNLINK_WAIT_TIME</a> = 350</td></tr>\n<tr class=\"memdesc:a52ec03c6ad068419f98e52f60718626e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Time to wait for downlink message before sleep. Setting less than 180 ms causes ESP-NOW errors due to lack of ACK processing.  <a href=\"EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e\">More...</a><br /></td></tr>\n<tr class=\"separator:a52ec03c6ad068419f98e52f60718626e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4400d84e20bfd15aed72aa991dd87d4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f\">DEFAULT_SLEEP_TIME</a> = 10</td></tr>\n<tr class=\"memdesc:a4400d84e20bfd15aed72aa991dd87d4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default sleep time if it was not set.  <a href=\"EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f\">More...</a><br /></td></tr>\n<tr class=\"separator:a4400d84e20bfd15aed72aa991dd87d4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a27132ec0215933e4201ee048b43916a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5\">IDENTIFY_TIMEOUT</a> = 10000</td></tr>\n<tr class=\"memdesc:a27132ec0215933e4201ee048b43916a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">How long LED will be flashing during identification.  <a href=\"EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5\">More...</a><br /></td></tr>\n<tr class=\"separator:a27132ec0215933e4201ee048b43916a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2f387a44ed85c58ad43c40dbc632699c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c\">TIME_SYNC_PERIOD</a> = 30000</td></tr>\n<tr class=\"memdesc:a2f387a44ed85c58ad43c40dbc632699c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Period of clock synchronization request.  <a href=\"EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c\">More...</a><br /></td></tr>\n<tr class=\"separator:a2f387a44ed85c58ad43c40dbc632699c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a446963c57800cd34607bcc6fa1e933e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const unsigned int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">QUICK_SYNC_TIME</a> = 5000</td></tr>\n<tr class=\"memdesc:a446963c57800cd34607bcc6fa1e933e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Period of clock synchronization request in case of resync is needed.  <a href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">More...</a><br /></td></tr>\n<tr class=\"separator:a446963c57800cd34607bcc6fa1e933e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a122e04d1d7956015ed3e7d349fa34a6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a\">PRE_REG_DELAY</a> = 5000</td></tr>\n<tr class=\"memdesc:a122e04d1d7956015ed3e7d349fa34a6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Time to wait before registration so that other nodes have time to communicate. Real delay is a random lower than this value.  <a href=\"EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a\">More...</a><br /></td></tr>\n<tr class=\"separator:a122e04d1d7956015ed3e7d349fa34a6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a198819f64ca0424df0b0fc930b85caed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed\">POST_REG_DELAY</a> = 1500</td></tr>\n<tr class=\"memdesc:a198819f64ca0424df0b0fc930b85caed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Time to wait before sending data after registration so that other nodes have time to finish their registration. Real delay is a random lower than this value.  <a href=\"EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed\">More...</a><br /></td></tr>\n<tr class=\"separator:a198819f64ca0424df0b0fc930b85caed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a700642be35601636c1af04d831f177c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5\">COMM_ERRORS_BEFORE_SCAN</a> = 2</td></tr>\n<tr class=\"memdesc:a700642be35601636c1af04d831f177c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> will search for a gateway if this number of communication errors have happened.  <a href=\"EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5\">More...</a><br /></td></tr>\n<tr class=\"separator:a700642be35601636c1af04d831f177c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Parameter configuration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a3be8ceb481b00916205f536e6028e2f5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3be8ceb481b00916205f536e6028e2f5\">&#9670;&nbsp;</a></span>CONNECT_TO_WIFI_AP</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define CONNECT_TO_WIFI_AP&#160;&#160;&#160;1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>In projects where gateway should not be connected to WiFi (for instance a data logger to SD) it may be useful to disable WiFi setting this to 0. Set it to 1 otherwise. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00035\">35</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a59484fb7e3490df6600b5add60badbb7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a59484fb7e3490df6600b5add60badbb7\">&#9670;&nbsp;</a></span>DEBUG_ESP_PORT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define DEBUG_ESP_PORT&#160;&#160;&#160;Serial</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Stream to output debug info. It will normally be <code>Serial</code> </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00058\">58</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac2d33ccaf63f5d5b66552b95426c0137\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac2d33ccaf63f5d5b66552b95426c0137\">&#9670;&nbsp;</a></span>DEBUG_LEVEL</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define DEBUG_LEVEL&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a271d8f7f52be750e5c744a394ec71344\">WARN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Possible values VERBOSE, DBG, INFO, WARN, ERROR, NONE. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00062\">62</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ace3e2bfbccf2b3dafab4775343471413\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ace3e2bfbccf2b3dafab4775343471413\">&#9670;&nbsp;</a></span>ENABLE_STATUS_MESSAGES</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define ENABLE_STATUS_MESSAGES&#160;&#160;&#160;1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Enable sending status message after every data message. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00028\">28</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad736e65e20072f63bc4d21d745949962\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad736e65e20072f63bc4d21d745949962\">&#9670;&nbsp;</a></span>ENABLE_WEB_API</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define ENABLE_WEB_API&#160;&#160;&#160;1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Enable Web API support on gateway. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00054\">54</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad2cbd556e432924a29a3efa1d13668af\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad2cbd556e432924a29a3efa1d13668af\">&#9670;&nbsp;</a></span>NTP_SERVER_1</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define NTP_SERVER_1&#160;&#160;&#160;&quot;pool.ntp.org&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00021\">21</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a562447c925663fec9c7e923f6c46fa7d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a562447c925663fec9c7e923f6c46fa7d\">&#9670;&nbsp;</a></span>NTP_SERVER_2</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define NTP_SERVER_2&#160;&#160;&#160;&quot;time.nist.gov&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00022\">22</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a77cde0d6b3da9d409d46bdc85147724a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a77cde0d6b3da9d409d46bdc85147724a\">&#9670;&nbsp;</a></span>TZINFO</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define TZINFO&#160;&#160;&#160;&quot;CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Time zone. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00020\">20</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a700642be35601636c1af04d831f177c5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a700642be35601636c1af04d831f177c5\">&#9670;&nbsp;</a></span>COMM_ERRORS_BEFORE_SCAN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t COMM_ERRORS_BEFORE_SCAN = 2</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> will search for a gateway if this number of communication errors have happened. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00051\">51</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af561a36a9d4be8596b2187252342ffdf\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af561a36a9d4be8596b2187252342ffdf\">&#9670;&nbsp;</a></span>DEFAULT_CHANNEL</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t DEFAULT_CHANNEL = 3</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>WiFi channel to be used on ESP-NOW. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00017\">17</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4400d84e20bfd15aed72aa991dd87d4f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4400d84e20bfd15aed72aa991dd87d4f\">&#9670;&nbsp;</a></span>DEFAULT_SLEEP_TIME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint32_t DEFAULT_SLEEP_TIME = 10</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Default sleep time if it was not set. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00041\">41</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a52ec03c6ad068419f98e52f60718626e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a52ec03c6ad068419f98e52f60718626e\">&#9670;&nbsp;</a></span>DOWNLINK_WAIT_TIME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint16_t DOWNLINK_WAIT_TIME = 350</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Time to wait for downlink message before sleep. Setting less than 180 ms causes ESP-NOW errors due to lack of ACK processing. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00040\">40</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a9c45ffb63a64a645032b9c132f86c821\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9c45ffb63a64a645032b9c132f86c821\">&#9670;&nbsp;</a></span>ENIGMAIOT_PROT_VERS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t ENIGMAIOT_PROT_VERS[3] = { 0,9,8 }</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>EnitmaIoT Version. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00016\">16</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a152501c4de4fad4ccdc6dffa8b47c349\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a152501c4de4fad4ccdc6dffa8b47c349\">&#9670;&nbsp;</a></span>FLASH_LED_TIME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint32_t FLASH_LED_TIME = 30</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Time that led keeps on during flash in ms. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00018\">18</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a27132ec0215933e4201ee048b43916a5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a27132ec0215933e4201ee048b43916a5\">&#9670;&nbsp;</a></span>IDENTIFY_TIMEOUT</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const time_t IDENTIFY_TIMEOUT = 10000</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>How long LED will be flashing during identification. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00042\">42</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2909f9f6e8ecc4dfd6947911e4eb2d96\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2909f9f6e8ecc4dfd6947911e4eb2d96\">&#9670;&nbsp;</a></span>MAX_INPUT_QUEUE_SIZE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int MAX_INPUT_QUEUE_SIZE = 3</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Input queue size for EnigmaIOT messages. Acts as a buffer to be able to handle messages during high load. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00030\">30</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aadcc5d2ec146be476018bdfc71d04f79\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aadcc5d2ec146be476018bdfc71d04f79\">&#9670;&nbsp;</a></span>MAX_KEY_VALIDITY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const unsigned int MAX_KEY_VALIDITY = 172800000U</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>After this time (in ms) a node is unregistered. Setting this to 0 means imfinite. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00025\">25</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a78ee44942fc7c28441d0cd502d1d3d3d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a78ee44942fc7c28441d0cd502d1d3d3d\">&#9670;&nbsp;</a></span>MAX_MQTT_QUEUE_SIZE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const size_t MAX_MQTT_QUEUE_SIZE = 3</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Maximum number of MQTT messages to be sent. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00027\">27</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a718f713933a902050be33c5651800011\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a718f713933a902050be33c5651800011\">&#9670;&nbsp;</a></span>MAX_NODE_INACTIVITY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const unsigned int MAX_NODE_INACTIVITY = 86400000U</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>After this time (in ms) a node is marked as gone. Setting this to 0 means imfinite. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00026\">26</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a71ee5004618cb61a934f136d7c2f45e2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a71ee5004618cb61a934f136d7c2f45e2\">&#9670;&nbsp;</a></span>NUM_NODES</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int NUM_NODES = 35</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Maximum number of nodes that this gateway can handle. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00032\">32</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a198819f64ca0424df0b0fc930b85caed\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a198819f64ca0424df0b0fc930b85caed\">&#9670;&nbsp;</a></span>POST_REG_DELAY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint32_t POST_REG_DELAY = 1500</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Time to wait before sending data after registration so that other nodes have time to finish their registration. Real delay is a random lower than this value. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00050\">50</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a122e04d1d7956015ed3e7d349fa34a6a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a122e04d1d7956015ed3e7d349fa34a6a\">&#9670;&nbsp;</a></span>PRE_REG_DELAY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint32_t PRE_REG_DELAY = 5000</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Time to wait before registration so that other nodes have time to communicate. Real delay is a random lower than this value. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00048\">48</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a446963c57800cd34607bcc6fa1e933e9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a446963c57800cd34607bcc6fa1e933e9\">&#9670;&nbsp;</a></span>QUICK_SYNC_TIME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const unsigned int QUICK_SYNC_TIME = 5000</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Period of clock synchronization request in case of resync is needed. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00046\">46</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af320072fb51a344213679450cacb3d6a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af320072fb51a344213679450cacb3d6a\">&#9670;&nbsp;</a></span>RATE_AVE_ORDER</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int RATE_AVE_ORDER = 5</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Message rate filter order. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00029\">29</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0b8712b5d25abc82bd371e652eae5826\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0b8712b5d25abc82bd371e652eae5826\">&#9670;&nbsp;</a></span>RECONNECTION_PERIOD</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int16_t RECONNECTION_PERIOD = 1500</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Time to retry Gateway connection. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00039\">39</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a59cb3b60750ca326ee647918af7a4d0b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a59cb3b60750ca326ee647918af7a4d0b\">&#9670;&nbsp;</a></span>RESET_PIN_DURATION</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const int RESET_PIN_DURATION = 5000</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Number of milliseconds that reset pin has to be grounded to produce a configuration reset. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00019\">19</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2f387a44ed85c58ad43c40dbc632699c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2f387a44ed85c58ad43c40dbc632699c\">&#9670;&nbsp;</a></span>TIME_SYNC_PERIOD</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint32_t TIME_SYNC_PERIOD = 30000</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Period of clock synchronization request. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html#l00044\">44</a> of file <a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/EnigmaIoTconfig_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/EnigmaIoTconfig.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIoTconfig.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"EnigmaIoTconfig_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _CONFIG_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _CONFIG_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html\">EnigmaIoTconfigAdvanced.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160; </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Global configuration. Physical layer settings</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">   16</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[3] = { 0,9,8 }; </div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">   17</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">DEFAULT_CHANNEL</a> = 3; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">   18</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint32_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a> = 30; </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b\">   19</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b\">RESET_PIN_DURATION</a> = 5000; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a\">   20</a></span>&#160;<span class=\"preprocessor\">#define TZINFO &quot;CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00&quot; </span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#ad2cbd556e432924a29a3efa1d13668af\">   21</a></span>&#160;<span class=\"preprocessor\">#define NTP_SERVER_1 &quot;pool.ntp.org&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a562447c925663fec9c7e923f6c46fa7d\">   22</a></span>&#160;<span class=\"preprocessor\">#define NTP_SERVER_2 &quot;time.nist.gov&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160; </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"comment\">// Gateway configuration</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">   25</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">MAX_KEY_VALIDITY</a> = 172800000U; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011\">   26</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011\">MAX_NODE_INACTIVITY</a> = 86400000U; </div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">   27</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">MAX_MQTT_QUEUE_SIZE</a> = 3; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#ace3e2bfbccf2b3dafab4775343471413\">   28</a></span>&#160;<span class=\"preprocessor\">#define ENABLE_STATUS_MESSAGES 1 </span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#af320072fb51a344213679450cacb3d6a\">   29</a></span>&#160;<span class=\"preprocessor\">static const int RATE_AVE_ORDER = 5; </span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a2909f9f6e8ecc4dfd6947911e4eb2d96\">   30</a></span>&#160;<span class=\"preprocessor\">static const int MAX_INPUT_QUEUE_SIZE = 3; </span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#ifndef NUM_NODES</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">   32</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a> = 35; </div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#endif //NUM_NODES</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#ifndef CONNECT_TO_WIFI_AP</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a3be8ceb481b00916205f536e6028e2f5\">   35</a></span>&#160;<span class=\"preprocessor\">#define CONNECT_TO_WIFI_AP 1 </span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#endif //CONNECT_TO_WIFI_AP</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160; </div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"comment\">// Node configuration</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">   39</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> int16_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">RECONNECTION_PERIOD</a> = 1500; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e\">   40</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint16_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e\">DOWNLINK_WAIT_TIME</a> = 350; </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f\">   41</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint32_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f\">DEFAULT_SLEEP_TIME</a> = 10; </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5\">   42</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> time_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5\">IDENTIFY_TIMEOUT</a> = 10000; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#ifndef TIME_SYNC_PERIOD</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c\">   44</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint32_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c\">TIME_SYNC_PERIOD</a> = 30000; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#endif // TIME_SYNC_PERIOD</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">   46</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">QUICK_SYNC_TIME</a> = 5000; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#ifndef PRE_REG_DELAY</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a\">   48</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint32_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a\">PRE_REG_DELAY</a> = 5000; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#endif // PRE_REG_DELAY</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed\">   50</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint32_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed\">POST_REG_DELAY</a> = 1500; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5\">   51</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5\">COMM_ERRORS_BEFORE_SCAN</a> = 2; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"comment\">//Web API</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#ad736e65e20072f63bc4d21d745949962\">   54</a></span>&#160;<span class=\"preprocessor\">#define ENABLE_WEB_API 1 </span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\"></span> </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"comment\">//Debug</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#ifndef DEBUG_ESP_PORT</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7\">   58</a></span>&#160;<span class=\"preprocessor\">#define DEBUG_ESP_PORT Serial </span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">#endif // DEBUG_ESP_PORT</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#ifndef DEBUG_LEVEL</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"comment\">// DON&#39;T ENABLE DEBUG IF YOU CAN ONLY DO OTA UPDATE. YOU MAY BE UNABLE TO DO OTA UPDATE ANYMORE UNTIL YOU FLASH THE NODE THROUGH WIRE</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"EnigmaIoTconfig_8h.html#ac2d33ccaf63f5d5b66552b95426c0137\">   62</a></span>&#160;<span class=\"preprocessor\">#define DEBUG_LEVEL WARN </span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#endif //DEBUG_LEVEL</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160; </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a718f713933a902050be33c5651800011\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011\">MAX_NODE_INACTIVITY</a></div><div class=\"ttdeci\">static const unsigned int MAX_NODE_INACTIVITY</div><div class=\"ttdoc\">After this time (in ms) a node is marked as gone. Setting this to 0 means imfinite.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00026\">EnigmaIoTconfig.h:26</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a27132ec0215933e4201ee048b43916a5\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5\">IDENTIFY_TIMEOUT</a></div><div class=\"ttdeci\">static const time_t IDENTIFY_TIMEOUT</div><div class=\"ttdoc\">How long LED will be flashing during identification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00042\">EnigmaIoTconfig.h:42</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html\">EnigmaIoTconfigAdvanced.h</a></div><div class=\"ttdoc\">Parameter configuration.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a700642be35601636c1af04d831f177c5\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5\">COMM_ERRORS_BEFORE_SCAN</a></div><div class=\"ttdeci\">static const uint8_t COMM_ERRORS_BEFORE_SCAN</div><div class=\"ttdoc\">Node will search for a gateway if this number of communication errors have happened.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00051\">EnigmaIoTconfig.h:51</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a9c45ffb63a64a645032b9c132f86c821\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a></div><div class=\"ttdeci\">static const uint8_t ENIGMAIOT_PROT_VERS[3]</div><div class=\"ttdoc\">EnitmaIoT Version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00016\">EnigmaIoTconfig.h:16</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a2f387a44ed85c58ad43c40dbc632699c\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c\">TIME_SYNC_PERIOD</a></div><div class=\"ttdeci\">static const uint32_t TIME_SYNC_PERIOD</div><div class=\"ttdoc\">Period of clock synchronization request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00044\">EnigmaIoTconfig.h:44</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a446963c57800cd34607bcc6fa1e933e9\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">QUICK_SYNC_TIME</a></div><div class=\"ttdeci\">static const unsigned int QUICK_SYNC_TIME</div><div class=\"ttdoc\">Period of clock synchronization request in case of resync is needed.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00046\">EnigmaIoTconfig.h:46</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a71ee5004618cb61a934f136d7c2f45e2\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a></div><div class=\"ttdeci\">static const int NUM_NODES</div><div class=\"ttdoc\">Maximum number of nodes that this gateway can handle.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00032\">EnigmaIoTconfig.h:32</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a122e04d1d7956015ed3e7d349fa34a6a\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a\">PRE_REG_DELAY</a></div><div class=\"ttdeci\">static const uint32_t PRE_REG_DELAY</div><div class=\"ttdoc\">Time to wait before registration so that other nodes have time to communicate. Real delay is a random...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00048\">EnigmaIoTconfig.h:48</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a198819f64ca0424df0b0fc930b85caed\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed\">POST_REG_DELAY</a></div><div class=\"ttdeci\">static const uint32_t POST_REG_DELAY</div><div class=\"ttdoc\">Time to wait before sending data after registration so that other nodes have time to finish their reg...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00050\">EnigmaIoTconfig.h:50</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_aadcc5d2ec146be476018bdfc71d04f79\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">MAX_KEY_VALIDITY</a></div><div class=\"ttdeci\">static const unsigned int MAX_KEY_VALIDITY</div><div class=\"ttdoc\">After this time (in ms) a node is unregistered. Setting this to 0 means imfinite.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00025\">EnigmaIoTconfig.h:25</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a0b8712b5d25abc82bd371e652eae5826\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">RECONNECTION_PERIOD</a></div><div class=\"ttdeci\">static const int16_t RECONNECTION_PERIOD</div><div class=\"ttdoc\">Time to retry Gateway connection.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00039\">EnigmaIoTconfig.h:39</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a52ec03c6ad068419f98e52f60718626e\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e\">DOWNLINK_WAIT_TIME</a></div><div class=\"ttdeci\">static const uint16_t DOWNLINK_WAIT_TIME</div><div class=\"ttdoc\">Time to wait for downlink message before sleep. Setting less than 180 ms causes ESP-NOW errors due to...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00040\">EnigmaIoTconfig.h:40</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_af561a36a9d4be8596b2187252342ffdf\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">DEFAULT_CHANNEL</a></div><div class=\"ttdeci\">static const uint8_t DEFAULT_CHANNEL</div><div class=\"ttdoc\">WiFi channel to be used on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00017\">EnigmaIoTconfig.h:17</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a59cb3b60750ca326ee647918af7a4d0b\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b\">RESET_PIN_DURATION</a></div><div class=\"ttdeci\">static const int RESET_PIN_DURATION</div><div class=\"ttdoc\">Number of milliseconds that reset pin has to be grounded to produce a configuration reset.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00019\">EnigmaIoTconfig.h:19</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a152501c4de4fad4ccdc6dffa8b47c349\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a></div><div class=\"ttdeci\">static const uint32_t FLASH_LED_TIME</div><div class=\"ttdoc\">Time that led keeps on during flash in ms.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00018\">EnigmaIoTconfig.h:18</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a78ee44942fc7c28441d0cd502d1d3d3d\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">MAX_MQTT_QUEUE_SIZE</a></div><div class=\"ttdeci\">static const size_t MAX_MQTT_QUEUE_SIZE</div><div class=\"ttdoc\">Maximum number of MQTT messages to be sent.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00027\">EnigmaIoTconfig.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a4400d84e20bfd15aed72aa991dd87d4f\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f\">DEFAULT_SLEEP_TIME</a></div><div class=\"ttdeci\">static const uint32_t DEFAULT_SLEEP_TIME</div><div class=\"ttdoc\">Default sleep time if it was not set.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00041\">EnigmaIoTconfig.h:41</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/Filter_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/Filter.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Filter.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Filter to process message rate or other values.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>&quot;</code><br />\n</div>\n<p><a href=\"Filter_8cpp_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Filter to process message rate or other values. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/Filter_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/Filter.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Filter.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"Filter_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"Filter_8h.html\">Filter.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">   12</a></span>&#160;<span class=\"keywordtype\">float</span> <a class=\"code\" href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">FilterClass::addValue</a> (<span class=\"keywordtype\">float</span> value) {</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;    <span class=\"keywordflow\">switch</span> (<a class=\"code\" href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">_filterType</a>) {</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\">AVERAGE_FILTER</a>:</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">aveFilter</a> (value);</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\">MEDIAN_FILTER</a>:</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">medianFilter</a> (value);</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keywordflow\">return</span> value;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160; </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">   25</a></span>&#160;<span class=\"keywordtype\">float</span> <a class=\"code\" href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">FilterClass::addWeigth</a> (<span class=\"keywordtype\">float</span> coeff) {</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;    <span class=\"keywordtype\">float</span> sumWeight = 0;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - 1; i &gt; 0; i--) {</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a>[i] = <a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a>[i - 1];</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a>[0] = coeff;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160; </div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        sumWeight += <a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a>[i];</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160; </div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    <span class=\"comment\">//DEBUG_VERBOSE (&quot;SumWeight: %f&quot;, sumWeight);</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;    <span class=\"keywordflow\">return</span> sumWeight;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160; </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">   43</a></span>&#160;<span class=\"keywordtype\">float</span> <a class=\"code\" href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">FilterClass::aveFilter</a> (<span class=\"keywordtype\">float</span> value) {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;    <span class=\"keywordtype\">float</span> sumValue = 0;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <span class=\"keywordtype\">float</span> sumWeight = 0;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    <span class=\"keywordtype\">float</span> procValue;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    <span class=\"keywordtype\">int</span> left, right;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - 1; i++) {</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[i] = <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[i + 1];</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[<a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - 1] = value;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Value: %f\\n&quot;</span>, value);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Raw values:&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot; %f&quot;</span>, <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[i]);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160; </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Coeffs:&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot; %f&quot;</span>, <a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a>[i]);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a> &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>) {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a>++;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        left = <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - <a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        right = <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - 1;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;    }   <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        left = 0;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        right = <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - 1;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Index: %d , left: %d , right: %d\\n&quot;</span>, <a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a>, left, right);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = left; i &lt;= right; i++) {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        sumValue += <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[i] * <a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a>[i];</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        sumWeight += <a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a>[i];</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"comment\">//DBG_OUTPUT_PORT.printf(&quot;Raw value %d: %f\\n&quot;, (i + 1), _rawValues[_order - (i+1)]);</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Sum: %f&quot;</span>, sumValue);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot; SumWeight: %f\\n&quot;</span>, sumWeight);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160; </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    procValue = sumValue / sumWeight;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Average: %f\\n&quot;</span>, procValue);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160; </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    <span class=\"keywordflow\">return</span> procValue;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">   91</a></span>&#160;<span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">FilterClass::divide</a> (<span class=\"keywordtype\">float</span>* array, <span class=\"keywordtype\">int</span> start, <span class=\"keywordtype\">int</span> end) {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    <span class=\"keywordtype\">int</span> left;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    <span class=\"keywordtype\">int</span> right;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    <span class=\"keywordtype\">float</span> pivot;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    <span class=\"keywordtype\">float</span> temp;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;    pivot = array[start];</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    left = start;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    right = end;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    <span class=\"comment\">// While indexes do not cross</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    <span class=\"keywordflow\">while</span> (left &lt; right) {</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"keywordflow\">while</span> (array[right] &gt; pivot) {</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;            right--;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160; </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"keywordflow\">while</span> ((left &lt; right) &amp;&amp; (array[left] &lt;= pivot)) {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;            left++;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160; </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"comment\">// If indexes have not crossed yet we continue doing exchanges</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keywordflow\">if</span> (left &lt; right) {</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;            temp = array[left];</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;            array[left] = array[right];</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;            array[right] = temp;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <span class=\"comment\">// Indexes have crossed. We put the pivot on place</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    temp = array[right];</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    array[right] = array[start];</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    array[start] = temp;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160; </div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <span class=\"comment\">// NEw pivot position</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <span class=\"keywordflow\">return</span> right;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160; </div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">  128</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">FilterClass::clear</a> () {</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[i] = 0;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a>[i] = 0;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"comment\">//_weightValues[i] = 1;</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a> = 0;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160; </div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619\">  137</a></span>&#160;<a class=\"code\" href=\"classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619\">FilterClass::~FilterClass</a> () {</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    free (<a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    free (<a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a>);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    free (<a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a>);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160; </div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">  143</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">FilterClass::quicksort</a> (<span class=\"keywordtype\">float</span>* array, <span class=\"keywordtype\">int</span> start, <span class=\"keywordtype\">int</span> end) {</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    <span class=\"keywordtype\">float</span> pivot;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160; </div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    <span class=\"keywordflow\">if</span> (start &lt; end) {</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        pivot = <a class=\"code\" href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">divide</a> (array, start, end);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160; </div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"comment\">// Ordeno la lista de los menores</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">quicksort</a> (array, start, pivot - 1);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <span class=\"comment\">// Ordeno la lista de los mayores</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">quicksort</a> (array, pivot + 1, end);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160; </div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">  157</a></span>&#160;<span class=\"keywordtype\">float</span> <a class=\"code\" href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">FilterClass::medianFilter</a> (<span class=\"keywordtype\">float</span> value) {</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    <span class=\"keywordtype\">float</span> procValue;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;    <span class=\"keywordtype\">int</span> medianIdx;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    <span class=\"keywordtype\">int</span> left, right, tempidx;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    <span class=\"keywordtype\">bool</span> even;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160; </div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a> &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>) {</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a>++;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        left = <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - <a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a>;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        right = <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - 1;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        even = ((right - left) % 2) == 1;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;%d: &quot;</span>, (right - left) % 2);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keywordflow\">if</span> (even) {</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;            tempidx = (right - left - 1) / 2;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;even\\n&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        }       <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;            tempidx = (right - left) / 2;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;odd\\n&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        medianIdx = right - <a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a> + 1 + tempidx;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;    }   <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        left = 0;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        right = <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - 1;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        even = (<a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> % 2) == 0;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keywordflow\">if</span> (even)</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;            tempidx = (right - 1) / 2;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;            tempidx = right / 2;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        medianIdx = right - <a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a> + 1 + tempidx;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Index: %d , left: %d , right: %d , even: %s , tempidx: %d , medianidx: %d\\n&quot;</span>, <a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a>, left, right, (even ? <span class=\"stringliteral\">&quot;even&quot;</span> : <span class=\"stringliteral\">&quot;odd&quot;</span>), tempidx, medianIdx);</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160; </div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;    <span class=\"comment\">// Shift raw values</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - 1; i++) {</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[i] = <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[i + 1];</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    <span class=\"comment\">// Add new raw value</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[<a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> - 1] = value;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160; </div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Raw values:&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot; %f&quot;</span>, <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[i]);</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160; </div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;    <span class=\"comment\">// copy to array before ordering</span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a>[i] = <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[i];</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160; </div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;    <span class=\"comment\">// order values</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">quicksort</a> (<a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a>, left, right);</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160; </div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Ordered values:&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot; %f&quot;</span>, <a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a>[i]);</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160; </div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;    <span class=\"comment\">// select median value</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;    <span class=\"keywordflow\">if</span> (!even) {</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;        procValue = <a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a>[medianIdx];</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;    }   <span class=\"keywordflow\">else</span> { <span class=\"comment\">// there is no center value</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;        procValue = (<a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a>[medianIdx] + <a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a>[medianIdx + 1]) / 2.0F;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160; </div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Median: %f\\n&quot;</span>, procValue);</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;    <span class=\"keywordflow\">return</span> procValue; <span class=\"comment\">// return mid value</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160; </div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd\">  225</a></span>&#160;<a class=\"code\" href=\"classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd\">FilterClass::FilterClass</a> (<a class=\"code\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a> type, uint8_t order) {</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">_filterType</a> = type;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160; </div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;    <span class=\"keywordflow\">if</span> (order &lt; <a class=\"code\" href=\"Filter_8h.html#ab08dffec08ac450d78d4c062b571939e\">MAX_ORDER</a>)</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        <span class=\"keywordflow\">if</span> (order &gt; 1)</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;            <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> = order;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;        <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;            <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> = <a class=\"code\" href=\"Filter_8h.html#a23bae2b7cd4008c90256be146e21cccf\">MIN_ORDER</a>;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;    <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> = <a class=\"code\" href=\"Filter_8h.html#ab08dffec08ac450d78d4c062b571939e\">MAX_ORDER</a>;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160; </div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a> = (<span class=\"keywordtype\">float</span>*)malloc (<a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> * <span class=\"keyword\">sizeof</span> (<span class=\"keywordtype\">float</span>));</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>[i] = 0;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160; </div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a> = (<span class=\"keywordtype\">float</span>*)malloc (<a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> * <span class=\"keyword\">sizeof</span> (<span class=\"keywordtype\">float</span>));</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a>[i] = 0;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160; </div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a> = (<span class=\"keywordtype\">float</span>*)malloc (<a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a> * <span class=\"keyword\">sizeof</span> (<span class=\"keywordtype\">float</span>));</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;        <a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a>[i] = 1;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160; </div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassFilterClass_html_acad3de8f5f8b3565168ef3850eaf528d\"><div class=\"ttname\"><a href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">FilterClass::medianFilter</a></div><div class=\"ttdeci\">float medianFilter(float value)</div><div class=\"ttdoc\">Median filter calculation of next value.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00157\">Filter.cpp:157</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a82e30fcd22d7d4d4815124e63a4902e1\"><div class=\"ttname\"><a href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">FilterClass::_order</a></div><div class=\"ttdeci\">uint8_t _order</div><div class=\"ttdoc\">Filter order. Numbre of samples to store for calculations.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00032\">Filter.h:32</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html_a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\"><div class=\"ttname\"><a href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\">MEDIAN_FILTER</a></div><div class=\"ttdeci\">@ MEDIAN_FILTER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00025\">Filter.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_aa6e318ba33cab0094c7b6528e3e50337\"><div class=\"ttname\"><a href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">FilterClass::addValue</a></div><div class=\"ttdeci\">float addValue(float value)</div><div class=\"ttdoc\">Pushes a new value for calculation. Until the buffer is filled up to filter order,...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00012\">Filter.cpp:12</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a5706c0daaecd8f616630dc9aac4eb619\"><div class=\"ttname\"><a href=\"classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619\">FilterClass::~FilterClass</a></div><div class=\"ttdeci\">~FilterClass()</div><div class=\"ttdoc\">Frees up dynamic memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00137\">Filter.cpp:137</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a84d72a35e083c33a5acad7d05c553dcd\"><div class=\"ttname\"><a href=\"classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd\">FilterClass::FilterClass</a></div><div class=\"ttdeci\">FilterClass(FilterType_t type, uint8_t order)</div><div class=\"ttdoc\">Creates a new filter class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00225\">Filter.cpp:225</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html_a0c87b1dd8bef5bbb8464d1652f929ff7\"><div class=\"ttname\"><a href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a></div><div class=\"ttdeci\">FilterType_t</div><div class=\"ttdoc\">Type of filter.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00024\">Filter.h:24</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a2236fab04bae686f3a30006ab0259c4f\"><div class=\"ttname\"><a href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">FilterClass::addWeigth</a></div><div class=\"ttdeci\">float addWeigth(float coeff)</div><div class=\"ttdoc\">Adds a new weighting value. It is pushed on the array so latest value will be used for older data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00025\">Filter.cpp:25</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a8571bc0e05f848a4372c3b40f7598a78\"><div class=\"ttname\"><a href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">FilterClass::aveFilter</a></div><div class=\"ttdeci\">float aveFilter(float value)</div><div class=\"ttdoc\">Average filter calculation of next value.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00043\">Filter.cpp:43</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a29933bc3e2094170afd380cee3763d95\"><div class=\"ttname\"><a href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">FilterClass::clear</a></div><div class=\"ttdeci\">void clear()</div><div class=\"ttdoc\">Resets state of the filter to an initial value.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00128\">Filter.cpp:128</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html_ab08dffec08ac450d78d4c062b571939e\"><div class=\"ttname\"><a href=\"Filter_8h.html#ab08dffec08ac450d78d4c062b571939e\">MAX_ORDER</a></div><div class=\"ttdeci\">#define MAX_ORDER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00018\">Filter.h:18</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html_a23bae2b7cd4008c90256be146e21cccf\"><div class=\"ttname\"><a href=\"Filter_8h.html#a23bae2b7cd4008c90256be146e21cccf\">MIN_ORDER</a></div><div class=\"ttdeci\">#define MIN_ORDER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00019\">Filter.h:19</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_af7fa09578d556d8289807f25faf148f7\"><div class=\"ttname\"><a href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">FilterClass::quicksort</a></div><div class=\"ttdeci\">void quicksort(float *array, int start, int end)</div><div class=\"ttdoc\">Sorting function that uses QuickSort algorythm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00143\">Filter.cpp:143</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a4b639a7fc53bdd0f1a82c41208414180\"><div class=\"ttname\"><a href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">FilterClass::_orderedValues</a></div><div class=\"ttdeci\">float * _orderedValues</div><div class=\"ttdoc\">Values ordered for median calculation.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00034\">Filter.h:34</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a99497784c6f8a22e89c19200132797b9\"><div class=\"ttname\"><a href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">FilterClass::divide</a></div><div class=\"ttdeci\">int divide(float *array, int start, int end)</div><div class=\"ttdoc\">Divide function to be used on Quick Sort.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00091\">Filter.cpp:91</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTdebug_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a></div><div class=\"ttdoc\">Auxiliary functions for debugging over Serial.</div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a5c265b773551343bcc7659e0253b525c\"><div class=\"ttname\"><a href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">FilterClass::_index</a></div><div class=\"ttdeci\">uint _index</div><div class=\"ttdoc\">Used to point latest entered value while number of values less than order.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00036\">Filter.h:36</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a1522216f9bbb9a5f7813809cb3a79ac7\"><div class=\"ttname\"><a href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">FilterClass::_weightValues</a></div><div class=\"ttdeci\">float * _weightValues</div><div class=\"ttdoc\">Weight values for average calculation. By default all them have value of 1 for arithmetic average.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00035\">Filter.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a3d19e1f2d25502aefed9fa272e2b576b\"><div class=\"ttname\"><a href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">FilterClass::_filterType</a></div><div class=\"ttdeci\">FilterType_t _filterType</div><div class=\"ttdoc\">Filter type from FilterType_t.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00031\">Filter.h:31</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html_a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\"><div class=\"ttname\"><a href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\">AVERAGE_FILTER</a></div><div class=\"ttdeci\">@ AVERAGE_FILTER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00027\">Filter.h:26</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a50254c631b3e05583890f63c6f0149bc\"><div class=\"ttname\"><a href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">FilterClass::_rawValues</a></div><div class=\"ttdeci\">float * _rawValues</div><div class=\"ttdoc\">Raw values store.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00033\">Filter.h:33</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html\"><div class=\"ttname\"><a href=\"Filter_8h.html\">Filter.h</a></div><div class=\"ttdoc\">Filter to process message rate or other values.</div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/Filter_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/Filter.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#enum-members\">Enumerations</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Filter.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Filter to process message rate or other values.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n</div>\n<p><a href=\"Filter_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:ab08dffec08ac450d78d4c062b571939e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"Filter_8h.html#ab08dffec08ac450d78d4c062b571939e\">MAX_ORDER</a>&#160;&#160;&#160;20</td></tr>\n<tr class=\"separator:ab08dffec08ac450d78d4c062b571939e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23bae2b7cd4008c90256be146e21cccf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"Filter_8h.html#a23bae2b7cd4008c90256be146e21cccf\">MIN_ORDER</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:a23bae2b7cd4008c90256be146e21cccf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:a0c87b1dd8bef5bbb8464d1652f929ff7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a> { <a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\">MEDIAN_FILTER</a>, \n<a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\">AVERAGE_FILTER</a>\n }</td></tr>\n<tr class=\"memdesc:a0c87b1dd8bef5bbb8464d1652f929ff7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type of filter.  <a href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">More...</a><br /></td></tr>\n<tr class=\"separator:a0c87b1dd8bef5bbb8464d1652f929ff7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Filter to process message rate or other values. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"ab08dffec08ac450d78d4c062b571939e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab08dffec08ac450d78d4c062b571939e\">&#9670;&nbsp;</a></span>MAX_ORDER</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define MAX_ORDER&#160;&#160;&#160;20</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8h_source.html#l00018\">18</a> of file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a23bae2b7cd4008c90256be146e21cccf\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23bae2b7cd4008c90256be146e21cccf\">&#9670;&nbsp;</a></span>MIN_ORDER</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define MIN_ORDER&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8h_source.html#l00019\">19</a> of file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a id=\"a0c87b1dd8bef5bbb8464d1652f929ff7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0c87b1dd8bef5bbb8464d1652f929ff7\">&#9670;&nbsp;</a></span>FilterType_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type of filter. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\"></a>MEDIAN_FILTER&#160;</td><td class=\"fielddoc\"><p>Median filter </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\"></a>AVERAGE_FILTER&#160;</td><td class=\"fielddoc\"><p>Average filter </p>\n</td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8h_source.html#l00024\">24</a> of file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/Filter_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/Filter.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Filter.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"Filter_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _FILTER_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _FILTER_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\"><a class=\"line\" href=\"Filter_8h.html#ab08dffec08ac450d78d4c062b571939e\">   18</a></span>&#160;<span class=\"preprocessor\">#define MAX_ORDER 20</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"Filter_8h.html#a23bae2b7cd4008c90256be146e21cccf\">   19</a></span>&#160;<span class=\"preprocessor\">#define MIN_ORDER 2</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160; </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">   24</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> {</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\">   25</a></span>&#160;    <a class=\"code\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\">MEDIAN_FILTER</a>, </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;    <a class=\"code\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\">AVERAGE_FILTER</a> </div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\">   27</a></span>&#160;} <a class=\"code\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160; </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html\">   29</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classFilterClass.html\">FilterClass</a> {</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">   31</a></span>&#160;    <a class=\"code\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a> <a class=\"code\" href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">_filterType</a>; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">   32</a></span>&#160;    uint8_t <a class=\"code\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a>; </div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">   33</a></span>&#160;    <span class=\"keywordtype\">float</span>* <a class=\"code\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a>; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">   34</a></span>&#160;    <span class=\"keywordtype\">float</span>* <a class=\"code\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a>; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">   35</a></span>&#160;    <span class=\"keywordtype\">float</span>* <a class=\"code\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a>; </div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">   36</a></span>&#160;    uint <a class=\"code\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a> = 0;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">aveFilter</a> (<span class=\"keywordtype\">float</span> value);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">divide</a> (<span class=\"keywordtype\">float</span>* array, <span class=\"keywordtype\">int</span> start, <span class=\"keywordtype\">int</span> end);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">quicksort</a> (<span class=\"keywordtype\">float</span>* array, <span class=\"keywordtype\">int</span> start, <span class=\"keywordtype\">int</span> end);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">medianFilter</a> (<span class=\"keywordtype\">float</span> value);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160; </div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd\">FilterClass</a> (<a class=\"code\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a> type, uint8_t order);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">addWeigth</a> (<span class=\"keywordtype\">float</span> coeff);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160; </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">addValue</a> (<span class=\"keywordtype\">float</span> value);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160; </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">clear</a> ();</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    <a class=\"code\" href=\"classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619\">~FilterClass</a> ();</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassFilterClass_html_acad3de8f5f8b3565168ef3850eaf528d\"><div class=\"ttname\"><a href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">FilterClass::medianFilter</a></div><div class=\"ttdeci\">float medianFilter(float value)</div><div class=\"ttdoc\">Median filter calculation of next value.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00157\">Filter.cpp:157</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a82e30fcd22d7d4d4815124e63a4902e1\"><div class=\"ttname\"><a href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">FilterClass::_order</a></div><div class=\"ttdeci\">uint8_t _order</div><div class=\"ttdoc\">Filter order. Numbre of samples to store for calculations.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00032\">Filter.h:32</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html_a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\"><div class=\"ttname\"><a href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\">MEDIAN_FILTER</a></div><div class=\"ttdeci\">@ MEDIAN_FILTER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00025\">Filter.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_aa6e318ba33cab0094c7b6528e3e50337\"><div class=\"ttname\"><a href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">FilterClass::addValue</a></div><div class=\"ttdeci\">float addValue(float value)</div><div class=\"ttdoc\">Pushes a new value for calculation. Until the buffer is filled up to filter order,...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00012\">Filter.cpp:12</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a5706c0daaecd8f616630dc9aac4eb619\"><div class=\"ttname\"><a href=\"classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619\">FilterClass::~FilterClass</a></div><div class=\"ttdeci\">~FilterClass()</div><div class=\"ttdoc\">Frees up dynamic memory.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00137\">Filter.cpp:137</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html\"><div class=\"ttname\"><a href=\"classFilterClass.html\">FilterClass</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00029\">Filter.h:29</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a84d72a35e083c33a5acad7d05c553dcd\"><div class=\"ttname\"><a href=\"classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd\">FilterClass::FilterClass</a></div><div class=\"ttdeci\">FilterClass(FilterType_t type, uint8_t order)</div><div class=\"ttdoc\">Creates a new filter class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00225\">Filter.cpp:225</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html_a0c87b1dd8bef5bbb8464d1652f929ff7\"><div class=\"ttname\"><a href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a></div><div class=\"ttdeci\">FilterType_t</div><div class=\"ttdoc\">Type of filter.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00024\">Filter.h:24</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a2236fab04bae686f3a30006ab0259c4f\"><div class=\"ttname\"><a href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">FilterClass::addWeigth</a></div><div class=\"ttdeci\">float addWeigth(float coeff)</div><div class=\"ttdoc\">Adds a new weighting value. It is pushed on the array so latest value will be used for older data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00025\">Filter.cpp:25</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a8571bc0e05f848a4372c3b40f7598a78\"><div class=\"ttname\"><a href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">FilterClass::aveFilter</a></div><div class=\"ttdeci\">float aveFilter(float value)</div><div class=\"ttdoc\">Average filter calculation of next value.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00043\">Filter.cpp:43</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a29933bc3e2094170afd380cee3763d95\"><div class=\"ttname\"><a href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">FilterClass::clear</a></div><div class=\"ttdeci\">void clear()</div><div class=\"ttdoc\">Resets state of the filter to an initial value.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00128\">Filter.cpp:128</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_af7fa09578d556d8289807f25faf148f7\"><div class=\"ttname\"><a href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">FilterClass::quicksort</a></div><div class=\"ttdeci\">void quicksort(float *array, int start, int end)</div><div class=\"ttdoc\">Sorting function that uses QuickSort algorythm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00143\">Filter.cpp:143</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a4b639a7fc53bdd0f1a82c41208414180\"><div class=\"ttname\"><a href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">FilterClass::_orderedValues</a></div><div class=\"ttdeci\">float * _orderedValues</div><div class=\"ttdoc\">Values ordered for median calculation.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00034\">Filter.h:34</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a99497784c6f8a22e89c19200132797b9\"><div class=\"ttname\"><a href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">FilterClass::divide</a></div><div class=\"ttdeci\">int divide(float *array, int start, int end)</div><div class=\"ttdoc\">Divide function to be used on Quick Sort.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00091\">Filter.cpp:91</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a5c265b773551343bcc7659e0253b525c\"><div class=\"ttname\"><a href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">FilterClass::_index</a></div><div class=\"ttdeci\">uint _index</div><div class=\"ttdoc\">Used to point latest entered value while number of values less than order.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00036\">Filter.h:36</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a1522216f9bbb9a5f7813809cb3a79ac7\"><div class=\"ttname\"><a href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">FilterClass::_weightValues</a></div><div class=\"ttdeci\">float * _weightValues</div><div class=\"ttdoc\">Weight values for average calculation. By default all them have value of 1 for arithmetic average.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00035\">Filter.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a3d19e1f2d25502aefed9fa272e2b576b\"><div class=\"ttname\"><a href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">FilterClass::_filterType</a></div><div class=\"ttdeci\">FilterType_t _filterType</div><div class=\"ttdoc\">Filter type from FilterType_t.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00031\">Filter.h:31</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html_a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\"><div class=\"ttname\"><a href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\">AVERAGE_FILTER</a></div><div class=\"ttdeci\">@ AVERAGE_FILTER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00027\">Filter.h:26</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a50254c631b3e05583890f63c6f0149bc\"><div class=\"ttname\"><a href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">FilterClass::_rawValues</a></div><div class=\"ttdeci\">float * _rawValues</div><div class=\"ttdoc\">Raw values store.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00033\">Filter.h:33</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GatewayAPI_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/GatewayAPI.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GatewayAPI.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>API web server to control EnigmaIOT Gateway.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"GatewayAPI_8h_source.html\">GatewayAPI.h</a>&quot;</code><br />\n<code>#include &lt;functional&gt;</code><br />\n</div>\n<p><a href=\"GatewayAPI_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a444bff15005e31fc8680af5c3a822984\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a444bff15005e31fc8680af5c3a822984\">methodToString</a> (WebRequestMethodComposite method)</td></tr>\n<tr class=\"separator:a444bff15005e31fc8680af5c3a822984\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a1840a76ce647f7367adbe0738848153c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a1840a76ce647f7367adbe0738848153c\">getNodeNumberUri</a> = &quot;/api/gw/nodenumber&quot;</td></tr>\n<tr class=\"separator:a1840a76ce647f7367adbe0738848153c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9e381857b19a19f4b04b22466373d7df\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a9e381857b19a19f4b04b22466373d7df\">getMaxNodesUri</a> = &quot;/api/gw/maxnodes&quot;</td></tr>\n<tr class=\"separator:a9e381857b19a19f4b04b22466373d7df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acfd88e792c95d773692f0f5b3160ddbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#acfd88e792c95d773692f0f5b3160ddbf\">getNodesUri</a> = &quot;/api/gw/nodes&quot;</td></tr>\n<tr class=\"separator:acfd88e792c95d773692f0f5b3160ddbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a43838d21da06df9ccc48b56d5bab438d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a43838d21da06df9ccc48b56d5bab438d\">getNodeUri</a> = &quot;/api/node/node&quot;</td></tr>\n<tr class=\"separator:a43838d21da06df9ccc48b56d5bab438d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4a9a0e6476327e4b48e47962e42a5b72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a4a9a0e6476327e4b48e47962e42a5b72\">getGwInfoUri</a> = &quot;/api/gw/info&quot;</td></tr>\n<tr class=\"separator:a4a9a0e6476327e4b48e47962e42a5b72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4a669b0dba2a947822ae13ed5cbdad36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a4a669b0dba2a947822ae13ed5cbdad36\">getGwRestartUri</a> = &quot;/api/gw/restart&quot;</td></tr>\n<tr class=\"separator:a4a669b0dba2a947822ae13ed5cbdad36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a44442f4218442b3ac5d6bfb5aa457eb4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a44442f4218442b3ac5d6bfb5aa457eb4\">getGwResettUri</a> = &quot;/api/gw/reset&quot;</td></tr>\n<tr class=\"separator:a44442f4218442b3ac5d6bfb5aa457eb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a55ba46dd79121e3af6c3e3dc06e76b2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a55ba46dd79121e3af6c3e3dc06e76b2b\">getNodeRestartUri</a> = &quot;/api/node/restart&quot;</td></tr>\n<tr class=\"separator:a55ba46dd79121e3af6c3e3dc06e76b2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:affc0d6e756f8b8eb7c21751494b5e8b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#affc0d6e756f8b8eb7c21751494b5e8b2\">nodeIdParam</a> = &quot;nodeid&quot;</td></tr>\n<tr class=\"separator:affc0d6e756f8b8eb7c21751494b5e8b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a89f10f640dc72117118bf9ab01f7e04a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a> = &quot;nodename&quot;</td></tr>\n<tr class=\"separator:a89f10f640dc72117118bf9ab01f7e04a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad9a0cbae2e14a9562307948b2ac1434a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#ad9a0cbae2e14a9562307948b2ac1434a\">nodeAddrParam</a> = &quot;nodeaddr&quot;</td></tr>\n<tr class=\"separator:ad9a0cbae2e14a9562307948b2ac1434a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3fab167b11bfa83a179e904d89a38d95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a3fab167b11bfa83a179e904d89a38d95\">confirmParam</a> = &quot;confirm&quot;</td></tr>\n<tr class=\"separator:a3fab167b11bfa83a179e904d89a38d95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a69f499591af56509cd3540f09207f091\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html#a69f499591af56509cd3540f09207f091\">GwAPI</a></td></tr>\n<tr class=\"memdesc:a69f499591af56509cd3540f09207f091\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">API instance.  <a href=\"GatewayAPI_8cpp.html#a69f499591af56509cd3540f09207f091\">More...</a><br /></td></tr>\n<tr class=\"separator:a69f499591af56509cd3540f09207f091\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>API web server to control EnigmaIOT Gateway. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n</div><h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a444bff15005e31fc8680af5c3a822984\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a444bff15005e31fc8680af5c3a822984\">&#9670;&nbsp;</a></span>methodToString()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">String methodToString </td>\n          <td>(</td>\n          <td class=\"paramtype\">WebRequestMethodComposite&#160;</td>\n          <td class=\"paramname\"><em>method</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00358\">358</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a3fab167b11bfa83a179e904d89a38d95\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3fab167b11bfa83a179e904d89a38d95\">&#9670;&nbsp;</a></span>confirmParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* confirmParam = &quot;confirm&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00026\">26</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4a9a0e6476327e4b48e47962e42a5b72\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4a9a0e6476327e4b48e47962e42a5b72\">&#9670;&nbsp;</a></span>getGwInfoUri</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* getGwInfoUri = &quot;/api/gw/info&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00019\">19</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a44442f4218442b3ac5d6bfb5aa457eb4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a44442f4218442b3ac5d6bfb5aa457eb4\">&#9670;&nbsp;</a></span>getGwResettUri</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* getGwResettUri = &quot;/api/gw/reset&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00021\">21</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4a669b0dba2a947822ae13ed5cbdad36\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4a669b0dba2a947822ae13ed5cbdad36\">&#9670;&nbsp;</a></span>getGwRestartUri</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* getGwRestartUri = &quot;/api/gw/restart&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00020\">20</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a9e381857b19a19f4b04b22466373d7df\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9e381857b19a19f4b04b22466373d7df\">&#9670;&nbsp;</a></span>getMaxNodesUri</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* getMaxNodesUri = &quot;/api/gw/maxnodes&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00016\">16</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a1840a76ce647f7367adbe0738848153c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1840a76ce647f7367adbe0738848153c\">&#9670;&nbsp;</a></span>getNodeNumberUri</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* getNodeNumberUri = &quot;/api/gw/nodenumber&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00015\">15</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a55ba46dd79121e3af6c3e3dc06e76b2b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a55ba46dd79121e3af6c3e3dc06e76b2b\">&#9670;&nbsp;</a></span>getNodeRestartUri</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* getNodeRestartUri = &quot;/api/node/restart&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00022\">22</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"acfd88e792c95d773692f0f5b3160ddbf\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acfd88e792c95d773692f0f5b3160ddbf\">&#9670;&nbsp;</a></span>getNodesUri</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* getNodesUri = &quot;/api/gw/nodes&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00017\">17</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a43838d21da06df9ccc48b56d5bab438d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a43838d21da06df9ccc48b56d5bab438d\">&#9670;&nbsp;</a></span>getNodeUri</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* getNodeUri = &quot;/api/node/node&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00018\">18</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a69f499591af56509cd3540f09207f091\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a69f499591af56509cd3540f09207f091\">&#9670;&nbsp;</a></span>GwAPI</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a> GwAPI</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>API instance. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00391\">391</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad9a0cbae2e14a9562307948b2ac1434a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad9a0cbae2e14a9562307948b2ac1434a\">&#9670;&nbsp;</a></span>nodeAddrParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* nodeAddrParam = &quot;nodeaddr&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00025\">25</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"affc0d6e756f8b8eb7c21751494b5e8b2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#affc0d6e756f8b8eb7c21751494b5e8b2\">&#9670;&nbsp;</a></span>nodeIdParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* nodeIdParam = &quot;nodeid&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00023\">23</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a89f10f640dc72117118bf9ab01f7e04a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a89f10f640dc72117118bf9ab01f7e04a\">&#9670;&nbsp;</a></span>nodeNameParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* nodeNameParam = &quot;nodename&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00024\">24</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GatewayAPI_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/GatewayAPI.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GatewayAPI.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"GatewayAPI_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"GatewayAPI_8h.html\">GatewayAPI.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"keyword\">using namespace </span>std;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"keyword\">using namespace </span>placeholders;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160; </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#a1840a76ce647f7367adbe0738848153c\">   15</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#a1840a76ce647f7367adbe0738848153c\">getNodeNumberUri</a> = <span class=\"stringliteral\">&quot;/api/gw/nodenumber&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#a9e381857b19a19f4b04b22466373d7df\">   16</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#a9e381857b19a19f4b04b22466373d7df\">getMaxNodesUri</a> = <span class=\"stringliteral\">&quot;/api/gw/maxnodes&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#acfd88e792c95d773692f0f5b3160ddbf\">   17</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#acfd88e792c95d773692f0f5b3160ddbf\">getNodesUri</a> = <span class=\"stringliteral\">&quot;/api/gw/nodes&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#a43838d21da06df9ccc48b56d5bab438d\">   18</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#a43838d21da06df9ccc48b56d5bab438d\">getNodeUri</a> = <span class=\"stringliteral\">&quot;/api/node/node&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#a4a9a0e6476327e4b48e47962e42a5b72\">   19</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#a4a9a0e6476327e4b48e47962e42a5b72\">getGwInfoUri</a> = <span class=\"stringliteral\">&quot;/api/gw/info&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#a4a669b0dba2a947822ae13ed5cbdad36\">   20</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#a4a669b0dba2a947822ae13ed5cbdad36\">getGwRestartUri</a> = <span class=\"stringliteral\">&quot;/api/gw/restart&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#a44442f4218442b3ac5d6bfb5aa457eb4\">   21</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#a44442f4218442b3ac5d6bfb5aa457eb4\">getGwResettUri</a> = <span class=\"stringliteral\">&quot;/api/gw/reset&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#a55ba46dd79121e3af6c3e3dc06e76b2b\">   22</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#a55ba46dd79121e3af6c3e3dc06e76b2b\">getNodeRestartUri</a> = <span class=\"stringliteral\">&quot;/api/node/restart&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#affc0d6e756f8b8eb7c21751494b5e8b2\">   23</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#affc0d6e756f8b8eb7c21751494b5e8b2\">nodeIdParam</a> = <span class=\"stringliteral\">&quot;nodeid&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">   24</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a> = <span class=\"stringliteral\">&quot;nodename&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#ad9a0cbae2e14a9562307948b2ac1434a\">   25</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#ad9a0cbae2e14a9562307948b2ac1434a\">nodeAddrParam</a> = <span class=\"stringliteral\">&quot;nodeaddr&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8cpp.html#a3fab167b11bfa83a179e904d89a38d95\">   26</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GatewayAPI_8cpp.html#a3fab167b11bfa83a179e904d89a38d95\">confirmParam</a> = <span class=\"stringliteral\">&quot;confirm&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">   28</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">GatewayAPI::begin</a> () {</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    <span class=\"comment\">//if (!gw) {</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;    <span class=\"comment\">//  return;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;    <span class=\"comment\">//}</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;    <span class=\"comment\">//gateway = gw;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    server = <span class=\"keyword\">new</span> AsyncWebServer (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a\">WEB_API_PORT</a>);</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;    server-&gt;on (<a class=\"code\" href=\"GatewayAPI_8cpp.html#a1840a76ce647f7367adbe0738848153c\">getNodeNumberUri</a>, HTTP_GET, std::bind (&amp;<a class=\"code\" href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">GatewayAPI::getNodeNumber</a>, <span class=\"keyword\">this</span>, _1));</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    server-&gt;on (<a class=\"code\" href=\"GatewayAPI_8cpp.html#a9e381857b19a19f4b04b22466373d7df\">getMaxNodesUri</a>, HTTP_GET, std::bind (&amp;<a class=\"code\" href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">GatewayAPI::getMaxNodes</a>, <span class=\"keyword\">this</span>, _1));</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    server-&gt;on (<a class=\"code\" href=\"GatewayAPI_8cpp.html#acfd88e792c95d773692f0f5b3160ddbf\">getNodesUri</a>, HTTP_GET, std::bind (&amp;<a class=\"code\" href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">GatewayAPI::getNodes</a>, <span class=\"keyword\">this</span>, _1));</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    server-&gt;on (<a class=\"code\" href=\"GatewayAPI_8cpp.html#a43838d21da06df9ccc48b56d5bab438d\">getNodeUri</a>, HTTP_GET | HTTP_DELETE, std::bind (&amp;<a class=\"code\" href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">GatewayAPI::nodeOp</a>, <span class=\"keyword\">this</span>, _1));</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;    server-&gt;on (<a class=\"code\" href=\"GatewayAPI_8cpp.html#a4a9a0e6476327e4b48e47962e42a5b72\">getGwInfoUri</a>, HTTP_GET, std::bind (&amp;<a class=\"code\" href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">GatewayAPI::getGwInfo</a>, <span class=\"keyword\">this</span>, _1));</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;    server-&gt;on (<a class=\"code\" href=\"GatewayAPI_8cpp.html#a4a669b0dba2a947822ae13ed5cbdad36\">getGwRestartUri</a>, HTTP_PUT, std::bind (&amp;<a class=\"code\" href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">GatewayAPI::restartGw</a>, <span class=\"keyword\">this</span>, _1));</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    server-&gt;on (<a class=\"code\" href=\"GatewayAPI_8cpp.html#a44442f4218442b3ac5d6bfb5aa457eb4\">getGwResettUri</a>, HTTP_PUT, std::bind (&amp;<a class=\"code\" href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">GatewayAPI::resetGw</a>, <span class=\"keyword\">this</span>, _1));</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    server-&gt;on (<a class=\"code\" href=\"GatewayAPI_8cpp.html#a55ba46dd79121e3af6c3e3dc06e76b2b\">getNodeRestartUri</a>, HTTP_PUT, std::bind (&amp;<a class=\"code\" href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">GatewayAPI::restartNode</a>, <span class=\"keyword\">this</span>, _1));</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;    server-&gt;onNotFound (std::bind (&amp;<a class=\"code\" href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">GatewayAPI::onNotFound</a>, <span class=\"keyword\">this</span>, _1));</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    server-&gt;begin ();</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160; </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">   46</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">GatewayAPI::getNodeNumber</a> (AsyncWebServerRequest* request) {</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    <span class=\"keywordtype\">char</span> response[25];</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    snprintf (response, 25, <span class=\"stringliteral\">&quot;{\\&quot;nodeNumber\\&quot;:%d}&quot;</span>, <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">getActiveNodesNumber</a> ());</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Response: %s&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;    request-&gt;send (200, <span class=\"stringliteral\">&quot;application/json&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f\">   54</a></span>&#160;<span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f\">GatewayAPI::buildGwInfo</a> (<span class=\"keywordtype\">char</span>* gwInfo, <span class=\"keywordtype\">size_t</span> len) {</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Build Gateway Info&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    <span class=\"comment\">//resultCode = 200;</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    <span class=\"comment\">//time_t currentMillis = millis ();</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    snprintf (gwInfo, len, <span class=\"stringliteral\">&quot;{\\&quot;version\\&quot;:\\&quot;%d.%d.%d\\&quot;,\\&quot;network\\&quot;:\\&quot;%s\\&quot;,\\&quot;addresses\\&quot;:{\\&quot;AP\\&quot;:\\&quot;%s\\&quot;,\\&quot;STA\\&quot;:\\&quot;%s\\&quot;},&quot;</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;              <span class=\"stringliteral\">&quot;\\&quot;channel\\&quot;:%d,\\&quot;ap\\&quot;:\\&quot;%s\\&quot;,\\&quot;bssid\\&quot;:\\&quot;%s\\&quot;,\\&quot;rssi\\&quot;:%d,&quot;</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;#ifdef ESP32</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;              <span class=\"stringliteral\">&quot;\\&quot;txpower\\&quot;:%.1f,&quot;</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;#endif</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;              <span class=\"stringliteral\">&quot;\\&quot;dns\\&quot;:\\&quot;%s\\&quot;,\\&quot;mem\\&quot;:%d}&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;              <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[0], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[1], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[2],</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;              <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">getNetworkName</a> (),</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;              WiFi.macAddress ().c_str (), WiFi.softAPmacAddress ().c_str (),</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;              WiFi.channel (), WiFi.SSID ().c_str (), WiFi.BSSIDstr ().c_str (), WiFi.RSSI (),</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;#ifdef ESP32</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;              (<span class=\"keywordtype\">float</span>)(WiFi.getTxPower ()) / 4,</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;#endif</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;              WiFi.dnsIP ().toString ().c_str (),</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;              ESP.getFreeHeap ()</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    );</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;GwInfo: %s&quot;</span>, gwInfo);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    <span class=\"keywordflow\">return</span> gwInfo;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160; </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">   78</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">GatewayAPI::getGwInfo</a> (AsyncWebServerRequest* request) {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    <span class=\"keywordtype\">int</span> resultCode = 404;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    <span class=\"keywordtype\">char</span> response[<a class=\"code\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a>];</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* strTemp = buildGwInfo (response, <a class=\"code\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    <span class=\"keywordflow\">if</span> (strTemp) {</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        resultCode = 200;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    <span class=\"keywordflow\">if</span> (resultCode == 404) {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        snprintf (response, <a class=\"code\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a>, <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;not found\\&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Response: %d --&gt; %s&quot;</span>, resultCode, response);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    request-&gt;send (resultCode, <span class=\"stringliteral\">&quot;application/json&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2\">   92</a></span>&#160;<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2\">GatewayAPI::getNodeFromParam</a> (AsyncWebServerRequest* request) {</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* node = NULL;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    <span class=\"keywordtype\">int</span> params = request-&gt;params ();</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    <span class=\"keywordtype\">int</span> nodeIndex = -1;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; params; i++) {</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        AsyncWebParameter* p = request-&gt;getParam (i);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"keywordflow\">if</span> (p-&gt;name () == <a class=\"code\" href=\"GatewayAPI_8cpp.html#affc0d6e756f8b8eb7c21751494b5e8b2\">nodeIdParam</a>) {</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a> (p-&gt;value ())) {</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                nodeIndex = atoi (p-&gt;value ().c_str ());</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Node to process is %d&quot;</span>, nodeIndex);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                node = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">getNodeFromID</a> (nodeIndex);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"keywordflow\">if</span> (p-&gt;name () == <a class=\"code\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a>) {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;            <span class=\"keywordflow\">if</span> (strcmp (p-&gt;value ().c_str (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">BROADCAST_NONE_NAME</a>)) {</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                node = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">getNodeFromName</a> (p-&gt;value ().c_str ());</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Node to process is %s&quot;</span>, node ? node-&gt;<a class=\"code\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">getNodeName</a> () : <span class=\"stringliteral\">&quot;NULL&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Wrong node name %s&quot;</span>, p-&gt;value ().c_str ());</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        <span class=\"keywordflow\">if</span> (p-&gt;name () == <a class=\"code\" href=\"GatewayAPI_8cpp.html#ad9a0cbae2e14a9562307948b2ac1434a\">nodeAddrParam</a>) {</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;            uint8_t addr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;            uint8_t* addrResult = <a class=\"code\" href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a> (p-&gt;value ().c_str (), addr);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;            <span class=\"keywordflow\">if</span> (addrResult) {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                <span class=\"keywordflow\">if</span> (memcmp (addr, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>)) {</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                    node = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">getNodeFromMAC</a> (addr);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                    DEBUG_INFO (<span class=\"stringliteral\">&quot;Node to process is %s&quot;</span>, p ? p-&gt;value ().c_str () : <span class=\"stringliteral\">&quot;NULL&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Parameter %s = %s&quot;</span>, p-&gt;name ().c_str (), p ? p-&gt;value ().c_str () : <span class=\"stringliteral\">&quot;NULL&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160; </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;NodeId = %d, node: %p&quot;</span>, nodeIndex, node);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160; </div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    <span class=\"keywordflow\">if</span> (node) {</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        <span class=\"keywordflow\">if</span> (node-&gt;<a class=\"code\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">isRegistered</a> ()) {</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;            <span class=\"keywordflow\">return</span> node;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    <span class=\"keywordflow\">return</span> node;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9\">  140</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9\">GatewayAPI::deleteNode</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node, <span class=\"keywordtype\">int</span>&amp; resultCode) {</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    <span class=\"keywordflow\">if</span> (node) {</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node %d is %p&quot;</span>, node-&gt;<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> (), node);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keywordflow\">if</span> (node-&gt;<a class=\"code\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">isRegistered</a> ()) {</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Node %d is registered&quot;</span>, node-&gt;<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ());</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;            resultCode = 200;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;            <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (node, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\">KICKED</a>);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;ok\\&quot;}&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Node %d is not registered&quot;</span>, node-&gt;<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ());</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f\">  155</a></span>&#160;<span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f\">GatewayAPI::getNodeInfo</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node, <span class=\"keywordtype\">int</span>&amp; resultCode, <span class=\"keywordtype\">char</span>* nodeInfo, <span class=\"keywordtype\">size_t</span> len) {</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    <span class=\"keywordflow\">if</span> (node) {</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node %d is %p&quot;</span>, node-&gt;<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> (), node);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keywordflow\">if</span> (node-&gt;<a class=\"code\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">isRegistered</a> ()) {</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Node %d is registered&quot;</span>, node-&gt;<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ());</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;            resultCode = 200;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;            time_t currentMillis = millis ();</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;            uint8_t* version = node-&gt;<a class=\"code\" href=\"classNode.html#a628b04339453635be34148c9fbe66506\">getVersion</a> ();</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;            <span class=\"keywordtype\">size_t</span> index;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;            index = snprintf (nodeInfo, len,</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                              <span class=\"stringliteral\">&quot;{\\&quot;version\\&quot;:\\&quot;%d.%d.%d\\&quot;,\\&quot;node_id\\&quot;:%d,\\&quot;address\\&quot;:\\&quot;&quot;</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a> <span class=\"stringliteral\">&quot;\\&quot;,&quot;</span>\\</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                              <span class=\"stringliteral\">&quot;\\&quot;keyValidSince\\&quot;:%lld,\\&quot;lastMessageTime\\&quot;:%lld,\\&quot;sleepy\\&quot;:%s,&quot;</span>\\</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;                              <span class=\"stringliteral\">&quot;\\&quot;Broadcast\\&quot;:%s,\\&quot;TimeSync\\&quot;:%s,\\&quot;rssi\\&quot;:%d,\\&quot;packetsHour\\&quot;:%f,\\&quot;per\\&quot;:%f&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                      version[0], version[1], version[2],</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                      node-&gt;<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> (),</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;                      MAC2STR (node-&gt;<a class=\"code\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">getMacAddress</a> ()),</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                      currentMillis - node-&gt;<a class=\"code\" href=\"classNode.html#a30a8e0aaad582a1baa269c6641150586\">getKeyValidFrom</a> (),</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                      currentMillis - node-&gt;<a class=\"code\" href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">getLastMessageTime</a> (),</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;                      node-&gt;<a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> () ? <span class=\"stringliteral\">&quot;True&quot;</span> : <span class=\"stringliteral\">&quot;False&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                      node-&gt;<a class=\"code\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">broadcastIsEnabled</a> () ? <span class=\"stringliteral\">&quot;True&quot;</span> : <span class=\"stringliteral\">&quot;False&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;                      node-&gt;<a class=\"code\" href=\"classNode.html#a4bb77cd04f77b857935836284c5e41af\">useTimeSync</a> () ? <span class=\"stringliteral\">&quot;True&quot;</span> : <span class=\"stringliteral\">&quot;False&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;                      node-&gt;<a class=\"code\" href=\"classNode.html#ac9cb809cbf8a76bda02e2c92731b213b\">getRSSI</a> (),</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                      node-&gt;<a class=\"code\" href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">packetsHour</a>,</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;                      node-&gt;<a class=\"code\" href=\"classNode.html#a2f8f6419cc10c972285178991b2cec78\">per</a></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;            );</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;            <span class=\"keywordtype\">char</span>* nodeName = node-&gt;<a class=\"code\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">getNodeName</a> ();</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;            <span class=\"keywordflow\">if</span> (nodeName &amp;&amp; strlen (nodeName)) {</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                index = index + snprintf (nodeInfo + index, len - index, <span class=\"stringliteral\">&quot;,\\&quot;Name\\&quot;:\\&quot;%s\\&quot;&quot;</span>, nodeName);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;            snprintf (nodeInfo + index, len - index, <span class=\"stringliteral\">&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;NodeInfo: %s&quot;</span>, nodeInfo);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;            <span class=\"keywordflow\">return</span> nodeInfo;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Node %d is not registered&quot;</span>, node-&gt;<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ());</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;    <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160; </div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#ac4244196077eddbed077df9d163198ea\">  194</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayAPI.html#ac4244196077eddbed077df9d163198ea\">GatewayAPI::restartNodeRequest</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node) {</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">sendDownstream</a> (node-&gt;<a class=\"code\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">getMacAddress</a> (), NULL, 0, <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">RESTART_NODE</a>);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160; </div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">  198</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">GatewayAPI::restartNode</a> (AsyncWebServerRequest* request) {</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* node;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;    <span class=\"keywordtype\">int</span> resultCode = 404;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;    <span class=\"keywordtype\">char</span> response[<a class=\"code\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a>];</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160; </div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;    node = getNodeFromParam (request);</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160; </div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Send restart command to node %p&quot;</span>, node);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160; </div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;    <span class=\"keywordtype\">bool</span> result = restartNodeRequest (node);</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;    <span class=\"keywordflow\">if</span> (result) {</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        snprintf (response, 30, <span class=\"stringliteral\">&quot;{\\&quot;node_restart\\&quot;:\\&quot;processed\\&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        resultCode = 200;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;    <span class=\"keywordflow\">if</span> (resultCode == 404) {</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        snprintf (response, 25, <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;not found\\&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Response: %d --&gt; %s&quot;</span>, resultCode, response);</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;    request-&gt;send (resultCode, <span class=\"stringliteral\">&quot;application/json&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160; </div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">  219</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">GatewayAPI::nodeOp</a> (AsyncWebServerRequest* request) {</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* node;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;    <span class=\"keywordtype\">int</span> resultCode = 404;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;    <span class=\"keywordtype\">char</span> response[<a class=\"code\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a>];</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160; </div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;    node = getNodeFromParam (request);</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160; </div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;    WebRequestMethodComposite method = request-&gt;method ();</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Method: %s&quot;</span>, <a class=\"code\" href=\"GatewayAPI_8cpp.html#a444bff15005e31fc8680af5c3a822984\">methodToString</a> (request-&gt;method ()).c_str ());</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160; </div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;    <span class=\"keywordflow\">if</span> (method == HTTP_DELETE) {</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Delete node %p&quot;</span>, node);</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* strTemp = deleteNode (node, resultCode);</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;        <span class=\"keywordflow\">if</span> (strTemp) {</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;            strncpy (response, strTemp, <a class=\"code\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (method == HTTP_GET) {</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Info node %p&quot;</span>, node);</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* strTemp = getNodeInfo (node, resultCode, response, <a class=\"code\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;strTemp = %p&quot;</span>, strTemp);</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;        <span class=\"keywordflow\">if</span> (!strTemp) {</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;            <span class=\"comment\">//strncpy (response, strTemp, 200);</span></div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;            resultCode = 404;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;    <span class=\"keywordflow\">if</span> (resultCode == 404) {</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;        snprintf (response, 25, <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;not found\\&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Response: %d --&gt; %s&quot;</span>, resultCode, response);</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;    request-&gt;send (resultCode, <span class=\"stringliteral\">&quot;application/json&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160; </div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">  251</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">GatewayAPI::getMaxNodes</a> (AsyncWebServerRequest* request) {</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;    <span class=\"keywordtype\">char</span> response[25];</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160; </div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;    snprintf (response, 25, <span class=\"stringliteral\">&quot;{\\&quot;maxNodes\\&quot;:%d}&quot;</span>, <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Response: %s&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;    request-&gt;send (200, <span class=\"stringliteral\">&quot;application/json&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160; </div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">  259</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">GatewayAPI::restartGw</a> (AsyncWebServerRequest* request) {</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;    <span class=\"keywordtype\">char</span> response[30];</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;    <span class=\"keywordtype\">bool</span> confirm = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;    <span class=\"keywordtype\">int</span> resultCode = 404;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160; </div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;    <span class=\"keywordtype\">int</span> params = request-&gt;params ();</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160; </div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; params; i++) {</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;        AsyncWebParameter* p = request-&gt;getParam (i);</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        <span class=\"keywordflow\">if</span> (p-&gt;name () == <a class=\"code\" href=\"GatewayAPI_8cpp.html#a3fab167b11bfa83a179e904d89a38d95\">confirmParam</a>) {</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;            <span class=\"keywordflow\">if</span> (p-&gt;value () == <span class=\"stringliteral\">&quot;1&quot;</span>) {</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;                confirm = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;                resultCode = 200;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;                <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160; </div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;    <span class=\"keywordflow\">if</span> (confirm) {</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;        snprintf (response, 30, <span class=\"stringliteral\">&quot;{\\&quot;gw_restart\\&quot;:\\&quot;processed\\&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;        request-&gt;send (resultCode, <span class=\"stringliteral\">&quot;application/json&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;        snprintf (response, 25, <span class=\"stringliteral\">&quot;{\\&quot;gw_restart\\&quot;:\\&quot;fail\\&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;        request-&gt;send (resultCode, <span class=\"stringliteral\">&quot;application/json&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160; </div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Response: %s&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160; </div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;    <span class=\"keywordflow\">if</span> (confirm &amp;&amp; <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">notifyRestartRequested</a>) {</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">notifyRestartRequested</a> ();</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160; </div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">  292</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">GatewayAPI::resetGw</a> (AsyncWebServerRequest* request) {</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;    <span class=\"keywordtype\">char</span> response[30];</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;    <span class=\"keywordtype\">bool</span> confirm = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;    <span class=\"keywordtype\">int</span> resultCode = 404;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160; </div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;    <span class=\"keywordtype\">int</span> params = request-&gt;params ();</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160; </div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; params; i++) {</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;        AsyncWebParameter* p = request-&gt;getParam (i);</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <span class=\"keywordflow\">if</span> (p-&gt;name () == <a class=\"code\" href=\"GatewayAPI_8cpp.html#a3fab167b11bfa83a179e904d89a38d95\">confirmParam</a>) {</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;            <span class=\"keywordflow\">if</span> (p-&gt;value () == <span class=\"stringliteral\">&quot;1&quot;</span>) {</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;                confirm = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;                resultCode = 200;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;                <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160; </div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;    <span class=\"keywordflow\">if</span> (confirm) {</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        snprintf (response, 30, <span class=\"stringliteral\">&quot;{\\&quot;gw_reset\\&quot;:\\&quot;processed\\&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;        request-&gt;send (resultCode, <span class=\"stringliteral\">&quot;application/json&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        snprintf (response, 25, <span class=\"stringliteral\">&quot;{\\&quot;gw_reset\\&quot;:\\&quot;fail\\&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;        request-&gt;send (resultCode, <span class=\"stringliteral\">&quot;application/json&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160; </div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Response: %s&quot;</span>, response);</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;    <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">doResetConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160; </div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160; </div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160; </div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">  325</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">GatewayAPI::getNodes</a> (AsyncWebServerRequest* request) {</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* node = NULL;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160; </div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;    AsyncResponseStream* response = request-&gt;beginResponseStream (<span class=\"stringliteral\">&quot;application/json&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;    response-&gt;setCode (200);</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160; </div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;    response-&gt;print (<span class=\"stringliteral\">&quot;{\\&quot;nodes\\&quot;:[&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;    <span class=\"keywordflow\">do</span> {</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;        <span class=\"keywordtype\">bool</span> first = (node == NULL);</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        node = <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a>.<a class=\"code\" href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">getNextActiveNode</a> (node);</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keywordflow\">if</span> (node &amp;&amp; !first) {</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;First is %s, node is %p&quot;</span>, first ? <span class=\"stringliteral\">&quot;true&quot;</span> : <span class=\"stringliteral\">&quot;false&quot;</span>, node);</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;            response-&gt;print (<span class=\"charliteral\">&#39;,&#39;</span>);</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;        <span class=\"keywordflow\">if</span> (node) {</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;LastNode: %u, node: %p&quot;</span>, node-&gt;<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> (), node);</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        <span class=\"keywordflow\">if</span> (node) {</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Got node. NodeId -&gt; %u&quot;</span>, node-&gt;<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ());</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;            response-&gt;printf (<span class=\"stringliteral\">&quot;{\\&quot;nodeId\\&quot;:%u,\\&quot;address\\&quot;:\\&quot;&quot;</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a> <span class=\"stringliteral\">&quot;\\&quot;&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;                              node-&gt;<a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> (),</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;                              MAC2STR (node-&gt;<a class=\"code\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">getMacAddress</a> ()));</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;            <span class=\"keywordtype\">char</span>* nodeName = node-&gt;<a class=\"code\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">getNodeName</a> ();</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;            <span class=\"keywordflow\">if</span> (nodeName &amp;&amp; strlen (nodeName)) {</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;                response-&gt;printf (<span class=\"stringliteral\">&quot;, \\&quot;name\\&quot;:\\&quot;%s\\&quot;&quot;</span>, node-&gt;<a class=\"code\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">getNodeName</a> ());            </div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;            response-&gt;print (<span class=\"stringliteral\">&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;    } <span class=\"keywordflow\">while</span> (node != NULL);</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;    response-&gt;print (<span class=\"stringliteral\">&quot;]}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;    request-&gt;send (response);</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160; </div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8h.html#a444bff15005e31fc8680af5c3a822984\">  358</a></span>&#160;String <a class=\"code\" href=\"GatewayAPI_8cpp.html#a444bff15005e31fc8680af5c3a822984\">methodToString</a> (WebRequestMethodComposite method) {</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;    <span class=\"keywordflow\">switch</span> (method) {</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;    <span class=\"keywordflow\">case</span> HTTP_GET:</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;        <span class=\"keywordflow\">return</span> String (<span class=\"stringliteral\">&quot;GET&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;    <span class=\"keywordflow\">case</span> HTTP_POST:</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;        <span class=\"keywordflow\">return</span> String (<span class=\"stringliteral\">&quot;POST&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;    <span class=\"keywordflow\">case</span> HTTP_DELETE:</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;        <span class=\"keywordflow\">return</span> String (<span class=\"stringliteral\">&quot;DELETE&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;    <span class=\"keywordflow\">case</span> HTTP_PUT:</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        <span class=\"keywordflow\">return</span> String (<span class=\"stringliteral\">&quot;PUT&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;    <span class=\"keywordflow\">case</span> HTTP_PATCH:</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;        <span class=\"keywordflow\">return</span> String (<span class=\"stringliteral\">&quot;PATCH&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;    <span class=\"keywordflow\">case</span> HTTP_HEAD:</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        <span class=\"keywordflow\">return</span> String (<span class=\"stringliteral\">&quot;HEAD&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;    <span class=\"keywordflow\">case</span> HTTP_OPTIONS:</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;        <span class=\"keywordflow\">return</span> String (<span class=\"stringliteral\">&quot;OPTIONS&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160; </div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">  378</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">GatewayAPI::onNotFound</a> (AsyncWebServerRequest* request) {</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;404 Not found: %s&quot;</span>, request-&gt;url ().c_str ());</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Method: %s&quot;</span>, <a class=\"code\" href=\"GatewayAPI_8cpp.html#a444bff15005e31fc8680af5c3a822984\">methodToString</a> (request-&gt;method ()).c_str ());</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;    <span class=\"keywordtype\">int</span> params = request-&gt;params ();</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; params; i++) {</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= INFO</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;        AsyncWebParameter* p = request-&gt;getParam (i);</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Parameter %s = %s&quot;</span>, p-&gt;name ().c_str (), p-&gt;value ().c_str ());</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;    request-&gt;send (404, <span class=\"stringliteral\">&quot;text/plain&quot;</span>, <span class=\"stringliteral\">&quot;Not Found&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160; </div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8h.html#a69f499591af56509cd3540f09207f091\">  391</a></span>&#160;<a class=\"code\" href=\"classGatewayAPI.html\">GatewayAPI</a> <a class=\"code\" href=\"GatewayAPI_8cpp.html#a69f499591af56509cd3540f09207f091\">GwAPI</a>;</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_af0168b2c02e399884441f2ce9534eaef\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">GatewayAPI::onNotFound</a></div><div class=\"ttdeci\">void onNotFound(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes unknown entry points or methods.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00378\">GatewayAPI.cpp:378</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a4a8fee82bf25fa412846a5ffa2a3cbbb\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">EnigmaIOTGatewayClass::getActiveNodesNumber</a></div><div class=\"ttdeci\">int getActiveNodesNumber()</div><div class=\"ttdoc\">Gets number of active nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00592\">EnigmaIOTGateway.h:592</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ac241f6c48c82d297389d78ec338ddb33\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">EnigmaIOTGatewayClass::invalidateKey</a></div><div class=\"ttdeci\">bool invalidateKey(Node *node, gwInvalidateReason_t reason)</div><div class=\"ttdoc\">Creates an InvalidateKey message and sned it. This trigger a new key agreement to start on related no...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l01624\">EnigmaIOTGateway.cpp:1624</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a4a669b0dba2a947822ae13ed5cbdad36\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a4a669b0dba2a947822ae13ed5cbdad36\">getGwRestartUri</a></div><div class=\"ttdeci\">const char * getGwRestartUri</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00020\">GatewayAPI.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ae91f344eeae1900179ab65a247e38eda\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">EnigmaIOTGatewayClass::doResetConfig</a></div><div class=\"ttdeci\">static void doResetConfig(void)</div><div class=\"ttdoc\">Activates a flag that signals that configuration has to be saved.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00047\">EnigmaIOTGateway.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">RESTART_NODE</a></div><div class=\"ttdeci\">@ RESTART_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00065\">NodeList.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a08caf502661a3bf1b75ba6860eb1bebe\"><div class=\"ttname\"><a href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">NodeList::getNodeFromName</a></div><div class=\"ttdeci\">Node * getNodeFromName(const char *name)</div><div class=\"ttdoc\">Gets node that correspond with given node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00174\">NodeList.cpp:174</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_affc0d6e756f8b8eb7c21751494b5e8b2\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#affc0d6e756f8b8eb7c21751494b5e8b2\">nodeIdParam</a></div><div class=\"ttdeci\">const char * nodeIdParam</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00023\">GatewayAPI.cpp:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_acdc60e8f65bd9c74951bed1c951fbc8c\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">GatewayAPI::getMaxNodes</a></div><div class=\"ttdeci\">void getMaxNodes(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes max node number request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00251\">GatewayAPI.cpp:251</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html\"><div class=\"ttname\"><a href=\"classGatewayAPI.html\">GatewayAPI</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8h_source.html#l00025\">GatewayAPI.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a628b04339453635be34148c9fbe66506\"><div class=\"ttname\"><a href=\"classNode.html#a628b04339453635be34148c9fbe66506\">Node::getVersion</a></div><div class=\"ttdeci\">uint8_t * getVersion()</div><div class=\"ttdoc\">Gets node EnigmaIOT version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00449\">NodeList.h:449</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a69f499591af56509cd3540f09207f091\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a69f499591af56509cd3540f09207f091\">GwAPI</a></div><div class=\"ttdeci\">GatewayAPI GwAPI</div><div class=\"ttdoc\">API instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00391\">GatewayAPI.cpp:391</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae6768d968b8f72fb12001fa3895a4670\"><div class=\"ttname\"><a href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">Node::broadcastIsEnabled</a></div><div class=\"ttdeci\">bool broadcastIsEnabled()</div><div class=\"ttdoc\">Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted b...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00373\">NodeList.h:373</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a4a9a0e6476327e4b48e47962e42a5b72\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a4a9a0e6476327e4b48e47962e42a5b72\">getGwInfoUri</a></div><div class=\"ttdeci\">const char * getGwInfoUri</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00019\">GatewayAPI.cpp:19</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a02961b325403161b54533152d242696a\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a></div><div class=\"ttdeci\">uint8_t * str2mac(const char *macAddrString, uint8_t *macBytes)</div><div class=\"ttdoc\">Debug helper function that creates MAC address byte array from text representation.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00104\">helperFunctions.cpp:104</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a08530d06e81c160b346047e37839ee7d\"><div class=\"ttname\"><a href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">NodeList::getNodeFromMAC</a></div><div class=\"ttdeci\">Node * getNodeFromMAC(const uint8_t *mac)</div><div class=\"ttdoc\">Gets node that correspond with given address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00142\">NodeList.cpp:142</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_aac43275cab1febf267c3be296ff39de2\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2\">GatewayAPI::getNodeFromParam</a></div><div class=\"ttdeci\">Node * getNodeFromParam(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Gets node reference from request parameters.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00092\">GatewayAPI.cpp:92</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_afc1233fa434d46abbf2a427090d0e1d9\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">GatewayAPI::resetGw</a></div><div class=\"ttdeci\">void resetGw(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes gateway configuration reset request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00292\">GatewayAPI.cpp:292</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a9c45ffb63a64a645032b9c132f86c821\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a></div><div class=\"ttdeci\">static const uint8_t ENIGMAIOT_PROT_VERS[3]</div><div class=\"ttdoc\">EnitmaIoT Version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00016\">EnigmaIoTconfig.h:16</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a29ed1ba0c2a04911013795cb11ff13e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">EnigmaIOTGatewayClass::getNetworkName</a></div><div class=\"ttdeci\">char * getNetworkName()</div><div class=\"ttdoc\">Gets EnigmaIOT network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00349\">EnigmaIOTGateway.h:349</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\">KICKED</a></div><div class=\"ttdeci\">@ KICKED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00083\">EnigmaIOTGateway.h:82</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a444bff15005e31fc8680af5c3a822984\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a444bff15005e31fc8680af5c3a822984\">methodToString</a></div><div class=\"ttdeci\">String methodToString(WebRequestMethodComposite method)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00358\">GatewayAPI.cpp:358</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_ac4244196077eddbed077df9d163198ea\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#ac4244196077eddbed077df9d163198ea\">GatewayAPI::restartNodeRequest</a></div><div class=\"ttdeci\">bool restartNodeRequest(Node *node)</div><div class=\"ttdoc\">Sends restart node message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00194\">GatewayAPI.cpp:194</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_ac0e84242a98c65b55dd8365f1e43db68\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">GatewayAPI::getNodes</a></div><div class=\"ttdeci\">void getNodes(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes node list request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00325\">GatewayAPI.cpp:325</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a44442f4218442b3ac5d6bfb5aa457eb4\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a44442f4218442b3ac5d6bfb5aa457eb4\">getGwResettUri</a></div><div class=\"ttdeci\">const char * getGwResettUri</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00021\">GatewayAPI.cpp:21</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_ad9a0cbae2e14a9562307948b2ac1434a\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#ad9a0cbae2e14a9562307948b2ac1434a\">nodeAddrParam</a></div><div class=\"ttdeci\">const char * nodeAddrParam</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00025\">GatewayAPI.cpp:25</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a5bf02d202c9cb76831de89e4d1ef8893\"><div class=\"ttname\"><a href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">Node::getSleepy</a></div><div class=\"ttdeci\">bool getSleepy()</div><div class=\"ttdoc\">Gets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sl...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00363\">NodeList.h:363</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a9f121c9f733353f210aa9725375fae4b\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">EnigmaIOTGatewayClass::notifyRestartRequested</a></div><div class=\"ttdeci\">simpleEventHandler_t notifyRestartRequested</div><div class=\"ttdoc\">Callback function that will be invoked when a hardware restart is requested.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00138\">EnigmaIOTGateway.h:138</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a6a8626b2221280938b28f4963df8daec\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">GatewayAPI::nodeOp</a></div><div class=\"ttdeci\">void nodeOp(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes node information request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00219\">GatewayAPI.cpp:219</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8h_html\"><div class=\"ttname\"><a href=\"GatewayAPI_8h.html\">GatewayAPI.h</a></div><div class=\"ttdoc\">API web server to control EnigmaIOT Gateway.</div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a2563f7f556d09035dbbf042656d4fa3a\"><div class=\"ttname\"><a href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">Node::getNodeId</a></div><div class=\"ttdeci\">uint16_t getNodeId()</div><div class=\"ttdoc\">Gets Node identifier.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00136\">NodeList.h:136</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a15877a320c33f77402c5700774d936cc\"><div class=\"ttname\"><a href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">Node::getLastMessageTime</a></div><div class=\"ttdeci\">time_t getLastMessageTime()</div><div class=\"ttdoc\">Gets last time that node sent a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00203\">NodeList.h:203</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8h_html_a2a5378351aff40f2e0810db469c937df\"><div class=\"ttname\"><a href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a></div><div class=\"ttdeci\">const size_t RESPONSE_SIZE</div><div class=\"ttdoc\">Maximum API response size.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8h_source.html#l00021\">GatewayAPI.h:21</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a3fab167b11bfa83a179e904d89a38d95\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a3fab167b11bfa83a179e904d89a38d95\">confirmParam</a></div><div class=\"ttdeci\">const char * confirmParam</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00026\">GatewayAPI.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_acfd88e792c95d773692f0f5b3160ddbf\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#acfd88e792c95d773692f0f5b3160ddbf\">getNodesUri</a></div><div class=\"ttdeci\">const char * getNodesUri</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00017\">GatewayAPI.cpp:17</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_af7c82da248870648a385a112d298ed78\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">GatewayAPI::begin</a></div><div class=\"ttdeci\">void begin()</div><div class=\"ttdoc\">Starts REST API web server.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00028\">GatewayAPI.cpp:28</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_abc1ad898434142e44923f7220b6a2ae4\"><div class=\"ttname\"><a href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">Node::packetsHour</a></div><div class=\"ttdeci\">double packetsHour</div><div class=\"ttdoc\">Packet rate for a specific nope.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00472\">NodeList.h:472</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a586cbe445b206083b64ee0a3c5c9075c\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">GatewayAPI::getNodeNumber</a></div><div class=\"ttdeci\">void getNodeNumber(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes node number request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00046\">GatewayAPI.cpp:46</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a72dc59a4a4d32e2918b20038f2837ee2\"><div class=\"ttname\"><a href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">NodeList::getNextActiveNode</a></div><div class=\"ttdeci\">Node * getNextActiveNode(uint16_t nodeId)</div><div class=\"ttdoc\">Gets next active node by nodeId.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00295\">NodeList.cpp:295</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a71ee5004618cb61a934f136d7c2f45e2\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a></div><div class=\"ttdeci\">static const int NUM_NODES</div><div class=\"ttdoc\">Maximum number of nodes that this gateway can handle.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00032\">EnigmaIoTconfig.h:32</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a9e381857b19a19f4b04b22466373d7df\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a9e381857b19a19f4b04b22466373d7df\">getMaxNodesUri</a></div><div class=\"ttdeci\">const char * getMaxNodesUri</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00016\">GatewayAPI.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a41ac77b547570020ee4d0b3f98bb482f\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f\">GatewayAPI::getNodeInfo</a></div><div class=\"ttdeci\">char * getNodeInfo(Node *node, int &amp;resultCode, char *nodeInfo, size_t len)</div><div class=\"ttdoc\">Builds node info.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00155\">GatewayAPI.cpp:155</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a44142cbbb0cada714b77c6b707495e9b\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">GatewayAPI::restartNode</a></div><div class=\"ttdeci\">void restartNode(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes node information request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00198\">GatewayAPI.cpp:198</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a77ac9e909b9575916c42d4e2ff3233f9\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9\">GatewayAPI::deleteNode</a></div><div class=\"ttdeci\">const char * deleteNode(Node *node, int &amp;resultCode)</div><div class=\"ttdoc\">Processes node deletion request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00140\">GatewayAPI.cpp:140</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a1ef5d02770b1b3bf2acf0adf7b410a17\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">EnigmaIOTGatewayClass::nodelist</a></div><div class=\"ttdeci\">NodeList nodelist</div><div class=\"ttdoc\">Node database that keeps status and shared keys.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00126\">EnigmaIOTGateway.h:126</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_abcd4985de3ef6fbe1994af85093ca034\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a></div><div class=\"ttdeci\">EnigmaIOTGatewayClass EnigmaIOTGateway</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l02050\">EnigmaIOTGateway.cpp:2050</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a2ec716b4c6aeedb3d1eb957b02d69dc1\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">BROADCAST_NONE_NAME</a></div><div class=\"ttdeci\">static const char BROADCAST_NONE_NAME[]</div><div class=\"ttdoc\">Name to reference broadcast node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00027\">EnigmaIoTconfigAdvanced.h:27</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a5c665e844c5f7f121a72baae270a2ba7\"><div class=\"ttname\"><a href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">Node::getNodeName</a></div><div class=\"ttdeci\">char * getNodeName()</div><div class=\"ttdoc\">Gets Node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00152\">NodeList.h:152</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a4e22033bdc1560ca309e9a14073c2282\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a></div><div class=\"ttdeci\">static const uint8_t BROADCAST_ADDRESS[]</div><div class=\"ttdoc\">Broadcast address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00026\">EnigmaIoTconfigAdvanced.h:26</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_ad6e69a2870c8f219cc679677af110849\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a></div><div class=\"ttdeci\">#define MACSTR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00083\">helperFunctions.cpp:83</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html\"><div class=\"ttname\"><a href=\"classNode.html\">Node</a></div><div class=\"ttdoc\">Class definition for a single sensor Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00109\">NodeList.h:109</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a55ba46dd79121e3af6c3e3dc06e76b2b\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a55ba46dd79121e3af6c3e3dc06e76b2b\">getNodeRestartUri</a></div><div class=\"ttdeci\">const char * getNodeRestartUri</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00022\">GatewayAPI.cpp:22</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a0b809fd0304e6e55173ac1e6fa8d3dc8\"><div class=\"ttname\"><a href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">Node::isRegistered</a></div><div class=\"ttdeci\">bool isRegistered()</div><div class=\"ttdoc\">Gets registration state of this node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00292\">NodeList.h:292</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a4cefee4f9feaa563b8e8a725a847e9ac\"><div class=\"ttname\"><a href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">Node::getMacAddress</a></div><div class=\"ttdeci\">uint8_t * getMacAddress()</div><div class=\"ttdoc\">Gets address from Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00128\">NodeList.h:128</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a30a8e0aaad582a1baa269c6641150586\"><div class=\"ttname\"><a href=\"classNode.html#a30a8e0aaad582a1baa269c6641150586\">Node::getKeyValidFrom</a></div><div class=\"ttdeci\">time_t getKeyValidFrom()</div><div class=\"ttdoc\">Gets last time that key was agreed with gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00187\">NodeList.h:187</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_abdf2646841af0c08ab90b4bddb961b2f\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f\">GatewayAPI::buildGwInfo</a></div><div class=\"ttdeci\">char * buildGwInfo(char *gwInfo, size_t len)</div><div class=\"ttdoc\">Builds gateway info.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00054\">GatewayAPI.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a75ba0ac6d6287a6b8d580cd65038a77a\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a\">WEB_API_PORT</a></div><div class=\"ttdeci\">const int WEB_API_PORT</div><div class=\"ttdoc\">TCP port where Web API will listen through.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00077\">EnigmaIoTconfigAdvanced.h:77</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a5d5ce4312735008866cf84559bc645c4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">EnigmaIOTGatewayClass::sendDownstream</a></div><div class=\"ttdeci\">bool sendDownstream(uint8_t *mac, const uint8_t *data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t payload_type=RAW, char *nodeName=NULL)</div><div class=\"ttdoc\">Starts a downstream data message transmission.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00364\">EnigmaIOTGateway.cpp:364</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a988dd5005172de330ab5794e98ee6e6a\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">GatewayAPI::getGwInfo</a></div><div class=\"ttdeci\">void getGwInfo(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes gateway information request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00078\">GatewayAPI.cpp:78</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a1840a76ce647f7367adbe0738848153c\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a1840a76ce647f7367adbe0738848153c\">getNodeNumberUri</a></div><div class=\"ttdeci\">const char * getNodeNumberUri</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00015\">GatewayAPI.cpp:15</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a2f8f6419cc10c972285178991b2cec78\"><div class=\"ttname\"><a href=\"classNode.html#a2f8f6419cc10c972285178991b2cec78\">Node::per</a></div><div class=\"ttdeci\">double per</div><div class=\"ttdoc\">Current packet error rate of a specific node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00471\">NodeList.h:471</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_aab4a7f7971eeeb4c0fa3af8064006b79\"><div class=\"ttname\"><a href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">NodeList::getNodeFromID</a></div><div class=\"ttdeci\">Node * getNodeFromID(uint16_t nodeId)</div><div class=\"ttdoc\">Gets node that correspond with given nodeId.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00135\">NodeList.cpp:135</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a89f10f640dc72117118bf9ab01f7e04a\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">nodeNameParam</a></div><div class=\"ttdeci\">const char * nodeNameParam</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00024\">GatewayAPI.cpp:24</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a056461e3dc03dae2a442d419a6900314\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">GatewayAPI::restartGw</a></div><div class=\"ttdeci\">void restartGw(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes gateway restart request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00259\">GatewayAPI.cpp:259</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_aa76d044529f5f932eb6014b50047c02b\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a></div><div class=\"ttdeci\">bool isNumber(const char *input)</div><div class=\"ttdoc\">Checks if input string is numeric.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00169\">helperFunctions.cpp:169</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a4bb77cd04f77b857935836284c5e41af\"><div class=\"ttname\"><a href=\"classNode.html#a4bb77cd04f77b857935836284c5e41af\">Node::useTimeSync</a></div><div class=\"ttdeci\">bool useTimeSync()</div><div class=\"ttdoc\">Gets node info to check if it has requested time sync ever.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00434\">NodeList.h:434</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ac9cb809cbf8a76bda02e2c92731b213b\"><div class=\"ttname\"><a href=\"classNode.html#ac9cb809cbf8a76bda02e2c92731b213b\">Node::getRSSI</a></div><div class=\"ttdeci\">int8_t getRSSI()</div><div class=\"ttdoc\">Gets last RSSI measurement of Gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00418\">NodeList.h:418</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8cpp_html_a43838d21da06df9ccc48b56d5bab438d\"><div class=\"ttname\"><a href=\"GatewayAPI_8cpp.html#a43838d21da06df9ccc48b56d5bab438d\">getNodeUri</a></div><div class=\"ttdeci\">const char * getNodeUri</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00018\">GatewayAPI.cpp:18</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GatewayAPI_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/GatewayAPI.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GatewayAPI.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>API web server to control EnigmaIOT Gateway.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &lt;<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &quot;WProgram.h&quot;</code><br />\n</div>\n<p><a href=\"GatewayAPI_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a444bff15005e31fc8680af5c3a822984\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8h.html#a444bff15005e31fc8680af5c3a822984\">methodToString</a> (WebRequestMethodComposite method)</td></tr>\n<tr class=\"separator:a444bff15005e31fc8680af5c3a822984\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a2a5378351aff40f2e0810db469c937df\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a> = 250</td></tr>\n<tr class=\"memdesc:a2a5378351aff40f2e0810db469c937df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum API response size.  <a href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">More...</a><br /></td></tr>\n<tr class=\"separator:a2a5378351aff40f2e0810db469c937df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a69f499591af56509cd3540f09207f091\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8h.html#a69f499591af56509cd3540f09207f091\">GwAPI</a></td></tr>\n<tr class=\"memdesc:a69f499591af56509cd3540f09207f091\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">API instance.  <a href=\"GatewayAPI_8h.html#a69f499591af56509cd3540f09207f091\">More...</a><br /></td></tr>\n<tr class=\"separator:a69f499591af56509cd3540f09207f091\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>API web server to control EnigmaIOT Gateway. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"GatewayAPI_8h_source.html\">GatewayAPI.h</a>.</p>\n</div><h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a444bff15005e31fc8680af5c3a822984\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a444bff15005e31fc8680af5c3a822984\">&#9670;&nbsp;</a></span>methodToString()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">String methodToString </td>\n          <td>(</td>\n          <td class=\"paramtype\">WebRequestMethodComposite&#160;</td>\n          <td class=\"paramname\"><em>method</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00358\">358</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a69f499591af56509cd3540f09207f091\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a69f499591af56509cd3540f09207f091\">&#9670;&nbsp;</a></span>GwAPI</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a> GwAPI</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">extern</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>API instance. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00391\">391</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2a5378351aff40f2e0810db469c937df\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2a5378351aff40f2e0810db469c937df\">&#9670;&nbsp;</a></span>RESPONSE_SIZE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const size_t RESPONSE_SIZE = 250</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum API response size. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8h_source.html#l00021\">21</a> of file <a class=\"el\" href=\"GatewayAPI_8h_source.html\">GatewayAPI.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GatewayAPI_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/GatewayAPI.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GatewayAPI.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"GatewayAPI_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef GATEWAY_API_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define GATEWAY_API_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160; </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160; </div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">   21</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a> = 250;  </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;String <a class=\"code\" href=\"GatewayAPI_8h.html#a444bff15005e31fc8680af5c3a822984\">methodToString</a> (WebRequestMethodComposite method);</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160; </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html\">   25</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classGatewayAPI.html\">GatewayAPI</a> {</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayAPI.html#a7327209d50f6c17e3cd1ad67f2941e9a\">   27</a></span>&#160;    AsyncWebServer* <a class=\"code\" href=\"classGatewayAPI.html#a7327209d50f6c17e3cd1ad67f2941e9a\">server</a>; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;    <span class=\"comment\">//EnigmaIOTGatewayClass* gateway;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">getNodeNumber</a> (AsyncWebServerRequest* request);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">getMaxNodes</a> (AsyncWebServerRequest* request);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">getNodes</a> (AsyncWebServerRequest* request);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">nodeOp</a> (AsyncWebServerRequest* request);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">getGwInfo</a> (AsyncWebServerRequest* request);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">restartGw</a> (AsyncWebServerRequest* request);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">resetGw</a> (AsyncWebServerRequest* request);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">restartNode</a> (AsyncWebServerRequest* request);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    <span class=\"comment\">// TODO: Reset node</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    <span class=\"comment\">// TODO: Reset Gw</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">onNotFound</a> (AsyncWebServerRequest* request);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2\">getNodeFromParam</a> (AsyncWebServerRequest* request);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9\">deleteNode</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node, <span class=\"keywordtype\">int</span>&amp; resultCode);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f\">getNodeInfo</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node, <span class=\"keywordtype\">int</span>&amp; resultCode, <span class=\"keywordtype\">char</span>* nodeInfo, <span class=\"keywordtype\">size_t</span> len);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f\">buildGwInfo</a> (<span class=\"keywordtype\">char</span>* gwInfo, <span class=\"keywordtype\">size_t</span> len);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;     </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayAPI.html#ac4244196077eddbed077df9d163198ea\">restartNodeRequest</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160; </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">begin</a> ();</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160; </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"keyword\">extern</span> <a class=\"code\" href=\"classGatewayAPI.html\">GatewayAPI</a> <a class=\"code\" href=\"GatewayAPI_8h.html#a69f499591af56509cd3540f09207f091\">GwAPI</a>; </div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160; </div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">#endif // GATEWAY_API_h</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_af0168b2c02e399884441f2ce9534eaef\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">GatewayAPI::onNotFound</a></div><div class=\"ttdeci\">void onNotFound(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes unknown entry points or methods.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00378\">GatewayAPI.cpp:378</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_acdc60e8f65bd9c74951bed1c951fbc8c\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">GatewayAPI::getMaxNodes</a></div><div class=\"ttdeci\">void getMaxNodes(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes max node number request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00251\">GatewayAPI.cpp:251</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html\"><div class=\"ttname\"><a href=\"classGatewayAPI.html\">GatewayAPI</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8h_source.html#l00025\">GatewayAPI.h:25</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8h_html_a69f499591af56509cd3540f09207f091\"><div class=\"ttname\"><a href=\"GatewayAPI_8h.html#a69f499591af56509cd3540f09207f091\">GwAPI</a></div><div class=\"ttdeci\">GatewayAPI GwAPI</div><div class=\"ttdoc\">API instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00391\">GatewayAPI.cpp:391</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_aac43275cab1febf267c3be296ff39de2\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2\">GatewayAPI::getNodeFromParam</a></div><div class=\"ttdeci\">Node * getNodeFromParam(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Gets node reference from request parameters.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00092\">GatewayAPI.cpp:92</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_afc1233fa434d46abbf2a427090d0e1d9\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">GatewayAPI::resetGw</a></div><div class=\"ttdeci\">void resetGw(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes gateway configuration reset request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00292\">GatewayAPI.cpp:292</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_ac4244196077eddbed077df9d163198ea\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#ac4244196077eddbed077df9d163198ea\">GatewayAPI::restartNodeRequest</a></div><div class=\"ttdeci\">bool restartNodeRequest(Node *node)</div><div class=\"ttdoc\">Sends restart node message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00194\">GatewayAPI.cpp:194</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_ac0e84242a98c65b55dd8365f1e43db68\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">GatewayAPI::getNodes</a></div><div class=\"ttdeci\">void getNodes(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes node list request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00325\">GatewayAPI.cpp:325</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a6a8626b2221280938b28f4963df8daec\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">GatewayAPI::nodeOp</a></div><div class=\"ttdeci\">void nodeOp(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes node information request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00219\">GatewayAPI.cpp:219</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8h_html_a2a5378351aff40f2e0810db469c937df\"><div class=\"ttname\"><a href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">RESPONSE_SIZE</a></div><div class=\"ttdeci\">const size_t RESPONSE_SIZE</div><div class=\"ttdoc\">Maximum API response size.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8h_source.html#l00021\">GatewayAPI.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_af7c82da248870648a385a112d298ed78\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">GatewayAPI::begin</a></div><div class=\"ttdeci\">void begin()</div><div class=\"ttdoc\">Starts REST API web server.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00028\">GatewayAPI.cpp:28</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a586cbe445b206083b64ee0a3c5c9075c\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">GatewayAPI::getNodeNumber</a></div><div class=\"ttdeci\">void getNodeNumber(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes node number request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00046\">GatewayAPI.cpp:46</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a41ac77b547570020ee4d0b3f98bb482f\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f\">GatewayAPI::getNodeInfo</a></div><div class=\"ttdeci\">char * getNodeInfo(Node *node, int &amp;resultCode, char *nodeInfo, size_t len)</div><div class=\"ttdoc\">Builds node info.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00155\">GatewayAPI.cpp:155</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a44142cbbb0cada714b77c6b707495e9b\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">GatewayAPI::restartNode</a></div><div class=\"ttdeci\">void restartNode(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes node information request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00198\">GatewayAPI.cpp:198</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a77ac9e909b9575916c42d4e2ff3233f9\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9\">GatewayAPI::deleteNode</a></div><div class=\"ttdeci\">const char * deleteNode(Node *node, int &amp;resultCode)</div><div class=\"ttdoc\">Processes node deletion request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00140\">GatewayAPI.cpp:140</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html\"><div class=\"ttname\"><a href=\"classNode.html\">Node</a></div><div class=\"ttdoc\">Class definition for a single sensor Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00109\">NodeList.h:109</a></div></div>\n<div class=\"ttc\" id=\"aGatewayAPI_8h_html_a444bff15005e31fc8680af5c3a822984\"><div class=\"ttname\"><a href=\"GatewayAPI_8h.html#a444bff15005e31fc8680af5c3a822984\">methodToString</a></div><div class=\"ttdeci\">String methodToString(WebRequestMethodComposite method)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00358\">GatewayAPI.cpp:358</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_abdf2646841af0c08ab90b4bddb961b2f\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f\">GatewayAPI::buildGwInfo</a></div><div class=\"ttdeci\">char * buildGwInfo(char *gwInfo, size_t len)</div><div class=\"ttdoc\">Builds gateway info.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00054\">GatewayAPI.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a988dd5005172de330ab5794e98ee6e6a\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">GatewayAPI::getGwInfo</a></div><div class=\"ttdeci\">void getGwInfo(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes gateway information request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00078\">GatewayAPI.cpp:78</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a></div><div class=\"ttdoc\">Library to build a gateway for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a056461e3dc03dae2a442d419a6900314\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">GatewayAPI::restartGw</a></div><div class=\"ttdeci\">void restartGw(AsyncWebServerRequest *request)</div><div class=\"ttdoc\">Processes gateway restart request.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8cpp_source.html#l00259\">GatewayAPI.cpp:259</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayAPI_html_a7327209d50f6c17e3cd1ad67f2941e9a\"><div class=\"ttname\"><a href=\"classGatewayAPI.html#a7327209d50f6c17e3cd1ad67f2941e9a\">GatewayAPI::server</a></div><div class=\"ttdeci\">AsyncWebServer * server</div><div class=\"ttdoc\">Web server instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GatewayAPI_8h_source.html#l00027\">GatewayAPI.h:27</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GwOutput__dummy_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayDummy/GwOutput_dummy.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8b0ea9d4c22a99833616492a9ee0642b.html\">EnigmaIOTGatewayDummy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_dummy.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Dummy Gateway output module.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"GwOutput__dummy_8h_source.html\">GwOutput_dummy.h</a>&quot;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>&gt;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n</div>\n<p><a href=\"GwOutput__dummy_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:aea3ab74ce495f6e6d8c5916aab3aaa95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a></td></tr>\n<tr class=\"separator:aea3ab74ce495f6e6d8c5916aab3aaa95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Dummy Gateway output module. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin</dd></dl>\n<p>Module to serve as start boilerplate of EnigmaIOT gateway projects </p>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n</div><h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"aea3ab74ce495f6e6d8c5916aab3aaa95\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aea3ab74ce495f6e6d8c5916aab3aaa95\">&#9670;&nbsp;</a></span>GwOutput</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a> GwOutput</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00029\">29</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GwOutput__dummy_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayDummy/GwOutput_dummy.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8b0ea9d4c22a99833616492a9ee0642b.html\">EnigmaIOTGatewayDummy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_dummy.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"GwOutput__dummy_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"GwOutput__dummy_8h.html\">GwOutput_dummy.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160; </div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;esp_system.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;esp_event.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;esp_tls.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160; </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#afb58b5e941b1e87b27c59c51b730f631\">   29</a></span>&#160;<a class=\"code\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a> <a class=\"code\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160; </div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">   31</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">GatewayOutput_dummy::configManagerStart</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>* enigmaIotGw) {</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160; </div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">   35</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">GatewayOutput_dummy::saveConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">   39</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">GatewayOutput_dummy::loadConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">   43</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">GatewayOutput_dummy::configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">   47</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">GatewayOutput_dummy::begin</a> () {</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Begin&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">   53</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">GatewayOutput_dummy::loop</a> () {</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160; </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160; </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">   57</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">GatewayOutput_dummy::outputDataSend</a> (<span class=\"keywordtype\">char</span>* address, <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length, <a class=\"code\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a> type) {</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Output data send. Address %s. Data %.*s&quot;</span>, address, length, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">   62</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">GatewayOutput_dummy::outputControlSend</a> (<span class=\"keywordtype\">char</span>* address, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length) {</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Output control send. Address %s. Data %s&quot;</span>, address, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, length));</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">   67</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">GatewayOutput_dummy::newNodeSend</a> (<span class=\"keywordtype\">char</span>* address, uint16_t node_id) {</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;New node: %s NodeID: %d&quot;</span>, address, node_id);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">   72</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">GatewayOutput_dummy::nodeDisconnectedSend</a> (<span class=\"keywordtype\">char</span>* address, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Node %s disconnected. Reason %d&quot;</span>, address, reason);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a359bd95cdb353b885d4bd691239b64fa\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">GatewayOutput_dummy::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00039\">GwOutput_dummy.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_acc9d7df320e4b4fb7ce459eac0e6639d\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">GatewayOutput_dummy::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart(EnigmaIOTGatewayClass *enigmaIotGw)</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00031\">GwOutput_dummy.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></div><div class=\"ttdoc\">Main gateway class. Manages communication with nodes and sends data to upper layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00120\">EnigmaIOTGateway.h:120</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a3ae96525b5a48e7bea23a36cedca7949\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">GatewayOutput_dummy::nodeDisconnectedSend</a></div><div class=\"ttdeci\">bool nodeDisconnectedSend(char *address, gwInvalidateReason_t reason)</div><div class=\"ttdoc\">Send node disconnection notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00072\">GwOutput_dummy.cpp:72</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__dummy_8cpp_html_aea3ab74ce495f6e6d8c5916aab3aaa95\"><div class=\"ttname\"><a href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a></div><div class=\"ttdeci\">GatewayOutput_dummy GwOutput</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00029\">GwOutput_dummy.cpp:29</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a39a2abbde4e46e34c30e418b87e8d0b8\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">GatewayOutput_dummy::begin</a></div><div class=\"ttdeci\">bool begin()</div><div class=\"ttdoc\">Starts output module.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00047\">GwOutput_dummy.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_ad5def4e2c7a3e1de387bf16a3f5ad8d7\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">GatewayOutput_dummy::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">Should be called often for module management.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00053\">GwOutput_dummy.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_af0fdc3e06a73dc2c635eb6ed53963eb5\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">GatewayOutput_dummy::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig()</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00035\">GwOutput_dummy.cpp:35</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_ae57d8fc0470c3b2fd22201eb1e3da9d4\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">GatewayOutput_dummy::newNodeSend</a></div><div class=\"ttdeci\">bool newNodeSend(char *address, uint16_t node_id)</div><div class=\"ttdoc\">Send new node notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00067\">GwOutput_dummy.cpp:67</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_ab5119da5fbd459e355bdcb931bf92fbc\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a></div><div class=\"ttdeci\">enum GwOutput_data_type GwOutput_data_type_t</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a500819e2a3f4478adc06a72af00ebb9a\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">GatewayOutput_dummy::outputControlSend</a></div><div class=\"ttdeci\">bool outputControlSend(char *address, uint8_t *data, size_t length)</div><div class=\"ttdoc\">Send control data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00062\">GwOutput_dummy.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8h_source.html#l00021\">GwOutput_dummy.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_adac909737089f601e9ee3ea0ad521dc7\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">GatewayOutput_dummy::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00043\">GwOutput_dummy.cpp:43</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_aa2a2fb3ae886350f38e8d6d534278a00\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">GatewayOutput_dummy::outputDataSend</a></div><div class=\"ttdeci\">bool outputDataSend(char *address, char *data, size_t length, GwOutput_data_type_t type=data)</div><div class=\"ttdoc\">Send data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00057\">GwOutput_dummy.cpp:57</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></div><div class=\"ttdeci\">gwInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00075\">EnigmaIOTGateway.h:75</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTdebug_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a></div><div class=\"ttdoc\">Auxiliary functions for debugging over Serial.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__dummy_8h_html\"><div class=\"ttname\"><a href=\"GwOutput__dummy_8h.html\">GwOutput_dummy.h</a></div><div class=\"ttdoc\">Dummy Gateway output module.</div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GwOutput__dummy_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayDummy/GwOutput_dummy.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8b0ea9d4c22a99833616492a9ee0642b.html\">EnigmaIOTGatewayDummy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_dummy.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Dummy Gateway output module.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>&gt;</code><br />\n</div>\n<p><a href=\"GwOutput__dummy_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:aea3ab74ce495f6e6d8c5916aab3aaa95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__dummy_8h.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a></td></tr>\n<tr class=\"separator:aea3ab74ce495f6e6d8c5916aab3aaa95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Dummy Gateway output module. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"GwOutput__dummy_8h_source.html\">GwOutput_dummy.h</a>.</p>\n</div><h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"aea3ab74ce495f6e6d8c5916aab3aaa95\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aea3ab74ce495f6e6d8c5916aab3aaa95\">&#9670;&nbsp;</a></span>GwOutput</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a> GwOutput</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">extern</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00029\">29</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GwOutput__dummy_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayDummy/GwOutput_dummy.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8b0ea9d4c22a99833616492a9ee0642b.html\">EnigmaIOTGatewayDummy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_dummy.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"GwOutput__dummy_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _GWOUT_DUMMY_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _GWOUT_DUMMY_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"GwOutput__generic_8h.html\">GwOutput_generic.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160; </div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html\">   21</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a> {</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;    <span class=\"comment\">//EnigmaIOTGatewayClass* enigmaIotGateway; ///&lt; @brief Pointer to EnigmaIOT gateway instance</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;    <span class=\"comment\">//onDlData_t downlinkCb; ///&lt; @brief downlink processing function handle</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">saveConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    <span class=\"comment\">//String netName; ///&lt; @brief EnigmaIOT network name</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;    <span class=\"comment\">//String clientId; ///&lt; @brief clientId</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    <span class=\"comment\">//String gwTopic; ///&lt; @brief topic for gateway</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160; </div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    <span class=\"comment\">//virtual int send () = 0;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;    <span class=\"comment\">//virtual void onReveive () = 0;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">configManagerStart</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>* enigmaIotGw);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">begin</a> ();</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">loadConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">outputControlSend</a> (<span class=\"keywordtype\">char</span>* address, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160; </div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">newNodeSend</a> (<span class=\"keywordtype\">char</span>* address, uint16_t node_id);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160; </div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">nodeDisconnectedSend</a> (<span class=\"keywordtype\">char</span>* address, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a> (<span class=\"keywordtype\">char</span>* address, <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length, <a class=\"code\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a> type = <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">loop</a> ();</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">  108</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">setDlCallback</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a> cb) {</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <a class=\"code\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">downlinkCb</a> = cb;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"keyword\">extern</span> <a class=\"code\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a> <a class=\"code\" href=\"GwOutput__dummy_8h.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a>;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\">#endif // _GWOUT_DUMMY_h</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a359bd95cdb353b885d4bd691239b64fa\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">GatewayOutput_dummy::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00039\">GwOutput_dummy.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00031\">GwOutput_generic.h:31</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_acc9d7df320e4b4fb7ce459eac0e6639d\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">GatewayOutput_dummy::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart(EnigmaIOTGatewayClass *enigmaIotGw)</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00031\">GwOutput_dummy.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></div><div class=\"ttdoc\">Main gateway class. Manages communication with nodes and sends data to upper layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00120\">EnigmaIOTGateway.h:120</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html\">GwOutput_generic.h</a></div><div class=\"ttdoc\">Generic Gateway output module template.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a3ae96525b5a48e7bea23a36cedca7949\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">GatewayOutput_dummy::nodeDisconnectedSend</a></div><div class=\"ttdeci\">bool nodeDisconnectedSend(char *address, gwInvalidateReason_t reason)</div><div class=\"ttdoc\">Send node disconnection notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00072\">GwOutput_dummy.cpp:72</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__dummy_8h_html_aea3ab74ce495f6e6d8c5916aab3aaa95\"><div class=\"ttname\"><a href=\"GwOutput__dummy_8h.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput</a></div><div class=\"ttdeci\">GatewayOutput_dummy GwOutput</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00029\">GwOutput_dummy.cpp:29</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a39a2abbde4e46e34c30e418b87e8d0b8\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">GatewayOutput_dummy::begin</a></div><div class=\"ttdeci\">bool begin()</div><div class=\"ttdoc\">Starts output module.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00047\">GwOutput_dummy.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_ada169ba682e6632f72d62724887f92de\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">GatewayOutput_generic::downlinkCb</a></div><div class=\"ttdeci\">onDlData_t downlinkCb</div><div class=\"ttdoc\">downlink processing function handle</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00034\">GwOutput_generic.h:34</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_aeb1f7d47a18ad54ebbd74df743ff825b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a></div><div class=\"ttdeci\">std::function&lt; void(uint8_t *address, char *nodeName, control_message_type_t msgType, char *data, unsigned int len)&gt; onDlData_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00029\">GwOutput_generic.h:29</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_ad5def4e2c7a3e1de387bf16a3f5ad8d7\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">GatewayOutput_dummy::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">Should be called often for module management.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00053\">GwOutput_dummy.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_af0fdc3e06a73dc2c635eb6ed53963eb5\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">GatewayOutput_dummy::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig()</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00035\">GwOutput_dummy.cpp:35</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_ae57d8fc0470c3b2fd22201eb1e3da9d4\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">GatewayOutput_dummy::newNodeSend</a></div><div class=\"ttdeci\">bool newNodeSend(char *address, uint16_t node_id)</div><div class=\"ttdoc\">Send new node notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00067\">GwOutput_dummy.cpp:67</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_ab5119da5fbd459e355bdcb931bf92fbc\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a></div><div class=\"ttdeci\">enum GwOutput_data_type GwOutput_data_type_t</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a500819e2a3f4478adc06a72af00ebb9a\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">GatewayOutput_dummy::outputControlSend</a></div><div class=\"ttdeci\">bool outputControlSend(char *address, uint8_t *data, size_t length)</div><div class=\"ttdoc\">Send control data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00062\">GwOutput_dummy.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8h_source.html#l00021\">GwOutput_dummy.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_adac909737089f601e9ee3ea0ad521dc7\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">GatewayOutput_dummy::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00043\">GwOutput_dummy.cpp:43</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_aa2a2fb3ae886350f38e8d6d534278a00\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">GatewayOutput_dummy::outputDataSend</a></div><div class=\"ttdeci\">bool outputDataSend(char *address, char *data, size_t length, GwOutput_data_type_t type=data)</div><div class=\"ttdoc\">Send data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00057\">GwOutput_dummy.cpp:57</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a></div><div class=\"ttdoc\">Library to build a gateway for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></div><div class=\"ttdeci\">gwInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00075\">EnigmaIOTGateway.h:75</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__dummy_html_a6f9117dde5be2d5c40b41c3b44287dbd\"><div class=\"ttname\"><a href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">GatewayOutput_dummy::setDlCallback</a></div><div class=\"ttdeci\">void setDlCallback(onDlData_t cb)</div><div class=\"ttdoc\">Set data processing function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8h_source.html#l00108\">GwOutput_dummy.h:108</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GwOutput__generic_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/GwOutput_generic.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_generic.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Generic Gateway output module template.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &lt;<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>&gt;</code><br />\n<code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &lt;functional&gt;</code><br />\n</div>\n<p><a href=\"GwOutput__generic_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ab5119da5fbd459e355bdcb931bf92fbc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636\">GwOutput_data_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a></td></tr>\n<tr class=\"separator:ab5119da5fbd459e355bdcb931bf92fbc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aeb1f7d47a18ad54ebbd74df743ff825b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef std::function&lt; void(uint8_t *address, char *nodeName, <a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> msgType, char *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, unsigned int len)&gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a></td></tr>\n<tr class=\"separator:aeb1f7d47a18ad54ebbd74df743ff825b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:a0cab60406a9b7a79387a3ad8b212e636\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636\">GwOutput_data_type</a> { <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, \n<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">lostmessages</a>, \n<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>\n }</td></tr>\n<tr class=\"separator:a0cab60406a9b7a79387a3ad8b212e636\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Generic Gateway output module template. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin</dd></dl>\n<p>This is the interface that output module should implement to be used as Gateway Output </p>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>.</p>\n</div><h2 class=\"groupheader\">Typedef Documentation</h2>\n<a id=\"ab5119da5fbd459e355bdcb931bf92fbc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab5119da5fbd459e355bdcb931bf92fbc\">&#9670;&nbsp;</a></span>GwOutput_data_type_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636\">GwOutput_data_type</a> <a class=\"el\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"aeb1f7d47a18ad54ebbd74df743ff825b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aeb1f7d47a18ad54ebbd74df743ff825b\">&#9670;&nbsp;</a></span>onDlData_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef std::function&lt;void (uint8_t* address, char* nodeName, <a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> msgType, char* <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, unsigned int len)&gt; <a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__generic_8h_source.html#l00029\">29</a> of file <a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a id=\"a0cab60406a9b7a79387a3ad8b212e636\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0cab60406a9b7a79387a3ad8b212e636\">&#9670;&nbsp;</a></span>GwOutput_data_type</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636\">GwOutput_data_type</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"></a>data&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\"></a>lostmessages&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"></a>status&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__generic_8h_source.html#l00022\">22</a> of file <a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GwOutput__generic_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/GwOutput_generic.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_generic.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"GwOutput__generic_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#ifndef _GWOUT_GEN_h</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#define _GWOUT_GEN_h</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160; </div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636\">   22</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636\">GwOutput_data_type</a> {</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">   23</a></span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>,</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">   24</a></span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">lostmessages</a>,</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">   26</a></span>&#160;} <a class=\"code\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">   29</a></span>&#160;<span class=\"keyword\">typedef</span> std::function&lt;void (uint8_t* address, <span class=\"keywordtype\">char</span>* nodeName, <a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> msgType, <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> len)&gt; <a class=\"code\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160; </div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html\">   31</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a> {</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">   33</a></span>&#160;    <a class=\"code\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>* <a class=\"code\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a>; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">   34</a></span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a> <a class=\"code\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">downlinkCb</a>; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd\">   40</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd\">saveConfig</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160; </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">   43</a></span>&#160;    String <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>; </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">   44</a></span>&#160;    String <a class=\"code\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">clientId</a>; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">   45</a></span>&#160;    String <a class=\"code\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a>; </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    <span class=\"comment\">//virtual int send () = 0;</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    <span class=\"comment\">//virtual void onReveive () = 0;</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6\">   54</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6\">configManagerStart</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>* enigmaIotGw) = 0;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f\">   60</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f\">configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) = 0;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03\">   66</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03\">begin</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73\">   72</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73\">loadConfig</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160; </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07\">   81</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07\">outputControlSend</a> (<span class=\"keywordtype\">char</span>* address, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length) = 0;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160; </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b\">   89</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b\">newNodeSend</a> (<span class=\"keywordtype\">char</span>* address, uint16_t node_id) = 0;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58\">   97</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58\">nodeDisconnectedSend</a> (<span class=\"keywordtype\">char</span>* address, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason) = 0;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160; </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5\">  107</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5\">outputDataSend</a> (<span class=\"keywordtype\">char</span>* address, <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length, <a class=\"code\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a> type = <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) = 0;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160; </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343\">  112</a></span>&#160;    <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343\">loop</a> () = 0;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160; </div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">  118</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">setDlCallback</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a> cb) {</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <a class=\"code\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">downlinkCb</a> = cb;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160; </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#endif // _GWOUT_GEN_h</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00031\">GwOutput_generic.h:31</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></div><div class=\"ttdoc\">Main gateway class. Manages communication with nodes and sends data to upper layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00120\">EnigmaIOTGateway.h:120</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a050f9bea35a220be645be5d99fbc3a07\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07\">GatewayOutput_generic::outputControlSend</a></div><div class=\"ttdeci\">virtual bool outputControlSend(char *address, uint8_t *data, size_t length)=0</div><div class=\"ttdoc\">Send control data from nodes.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a0d3fe3f57535eb485910b5a460e6bb58\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58\">GatewayOutput_generic::nodeDisconnectedSend</a></div><div class=\"ttdeci\">virtual bool nodeDisconnectedSend(char *address, gwInvalidateReason_t reason)=0</div><div class=\"ttdoc\">Send node disconnection notification.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a7e5626e20f3decbb28d85acbf14e106b\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b\">GatewayOutput_generic::newNodeSend</a></div><div class=\"ttdeci\">virtual bool newNodeSend(char *address, uint16_t node_id)=0</div><div class=\"ttdoc\">Send new node notification.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636\">GwOutput_data_type</a></div><div class=\"ttdeci\">GwOutput_data_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00022\">GwOutput_generic.h:22</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_ada169ba682e6632f72d62724887f92de\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">GatewayOutput_generic::downlinkCb</a></div><div class=\"ttdeci\">onDlData_t downlinkCb</div><div class=\"ttdoc\">downlink processing function handle</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00034\">GwOutput_generic.h:34</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_adaa04f1d2d1285fc25c707adc49bc2e6\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6\">GatewayOutput_generic::configManagerStart</a></div><div class=\"ttdeci\">virtual void configManagerStart(EnigmaIOTGatewayClass *enigmaIotGw)=0</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_aeb1f7d47a18ad54ebbd74df743ff825b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a></div><div class=\"ttdeci\">std::function&lt; void(uint8_t *address, char *nodeName, control_message_type_t msgType, char *data, unsigned int len)&gt; onDlData_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00029\">GwOutput_generic.h:29</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a196d0cd14af1e99998681dc9f017823f\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f\">GatewayOutput_generic::configManagerExit</a></div><div class=\"ttdeci\">virtual void configManagerExit(bool status)=0</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_af234219fb72002629fbef3ea2301ef03\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03\">GatewayOutput_generic::begin</a></div><div class=\"ttdeci\">virtual bool begin()=0</div><div class=\"ttdoc\">Starts output module.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_ab5119da5fbd459e355bdcb931bf92fbc\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a></div><div class=\"ttdeci\">enum GwOutput_data_type GwOutput_data_type_t</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_ab8b6dc096f4f731c7d7dc8a6cb46f132\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">GatewayOutput_generic::clientId</a></div><div class=\"ttdeci\">String clientId</div><div class=\"ttdoc\">MQTT clientId.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00044\">GwOutput_generic.h:44</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a16e1aa9a995c69e87a4b2e5ecc536c73\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73\">GatewayOutput_generic::loadConfig</a></div><div class=\"ttdeci\">virtual bool loadConfig()=0</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a12bceac925f871d3f95d06c4f4332343\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343\">GatewayOutput_generic::loop</a></div><div class=\"ttdeci\">virtual void loop()=0</div><div class=\"ttdoc\">Should be called often for module management.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a0fe4ed2bd219b89e187770cb0ba9fdc3\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">GatewayOutput_generic::gwTopic</a></div><div class=\"ttdeci\">String gwTopic</div><div class=\"ttdoc\">MQTT topic for gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00045\">GwOutput_generic.h:45</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_aa4855724d46b50a35735f9900494b889\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">GatewayOutput_generic::enigmaIotGateway</a></div><div class=\"ttdeci\">EnigmaIOTGatewayClass * enigmaIotGateway</div><div class=\"ttdoc\">Pointer to EnigmaIOT gateway instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00033\">GwOutput_generic.h:33</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a93d8b7a91fb2d99aef4a441713da0f86\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">GatewayOutput_generic::setDlCallback</a></div><div class=\"ttdeci\">void setDlCallback(onDlData_t cb)</div><div class=\"ttdoc\">Set data processing function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00118\">GwOutput_generic.h:118</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a6c0e416d09397b930b94f05967389cbd\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd\">GatewayOutput_generic::saveConfig</a></div><div class=\"ttdeci\">virtual bool saveConfig()=0</div><div class=\"ttdoc\">Saves output module configuration.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a088ff06222b9cbc391f2c216b8c689fa\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">GatewayOutput_generic::netName</a></div><div class=\"ttdeci\">String netName</div><div class=\"ttdoc\">EnigmaIOT network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00043\">GwOutput_generic.h:43</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">lostmessages</a></div><div class=\"ttdeci\">@ lostmessages</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00024\">GwOutput_generic.h:24</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a8a61150a6388caee08a1092def5bdce5\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5\">GatewayOutput_generic::outputDataSend</a></div><div class=\"ttdeci\">virtual bool outputDataSend(char *address, char *data, size_t length, GwOutput_data_type_t type=data)=0</div><div class=\"ttdoc\">Send data from nodes.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a></div><div class=\"ttdoc\">Library to build a gateway for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></div><div class=\"ttdeci\">gwInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00075\">EnigmaIOTGateway.h:75</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_ac5c28a5827b5a3b34222c13589adeba7\"><div class=\"ttname\"><a href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a></div><div class=\"ttdeci\">enum control_message_type control_message_type_t</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GwOutput__mqtt_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayMQTT/GwOutput_mqtt.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\">EnigmaIOTGatewayMQTT</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_mqtt.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>MQTT Gateway output module.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>&quot;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>&gt;</code><br />\n<code>#include &lt;PubSubClient.h&gt;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n</div>\n<p><a href=\"GwOutput__mqtt_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:aee4f7d364dbe6c4b29c462b3306bebe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#aee4f7d364dbe6c4b29c462b3306bebe7\">getTopicAddress</a> (char *topic, unsigned int &amp;len)</td></tr>\n<tr class=\"separator:aee4f7d364dbe6c4b29c462b3306bebe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a57969f4236bd72eca4fa83155a025085\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#a57969f4236bd72eca4fa83155a025085\">checkMsgType</a> (String <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>)</td></tr>\n<tr class=\"separator:a57969f4236bd72eca4fa83155a025085\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ad2a145294a0b58f6e5b5e3d8ad542f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#a0ad2a145294a0b58f6e5b5e3d8ad542f\">getTopicType</a> (char *topic, char *&amp;userCommand)</td></tr>\n<tr class=\"separator:a0ad2a145294a0b58f6e5b5e3d8ad542f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:afb58b5e941b1e87b27c59c51b730f631\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput</a></td></tr>\n<tr class=\"separator:afb58b5e941b1e87b27c59c51b730f631\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>MQTT Gateway output module. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin</dd></dl>\n<p>Module to send and receive EnigmaIOT information from MQTT broker </p>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n</div><h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a57969f4236bd72eca4fa83155a025085\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a57969f4236bd72eca4fa83155a025085\">&#9670;&nbsp;</a></span>checkMsgType()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> checkMsgType </td>\n          <td>(</td>\n          <td class=\"paramtype\">String&#160;</td>\n          <td class=\"paramname\"><em>data</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00316\">316</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aee4f7d364dbe6c4b29c462b3306bebe7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aee4f7d364dbe6c4b29c462b3306bebe7\">&#9670;&nbsp;</a></span>getTopicAddress()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char* getTopicAddress </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>topic</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int &amp;&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00293\">293</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0ad2a145294a0b58f6e5b5e3d8ad542f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0ad2a145294a0b58f6e5b5e3d8ad542f\">&#9670;&nbsp;</a></span>getTopicType()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> getTopicType </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>topic</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&amp;&#160;</td>\n          <td class=\"paramname\"><em>userCommand</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00354\">354</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"afb58b5e941b1e87b27c59c51b730f631\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afb58b5e941b1e87b27c59c51b730f631\">&#9670;&nbsp;</a></span>GwOutput</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a> GwOutput</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00041\">41</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GwOutput__mqtt_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayMQTT/GwOutput_mqtt.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\">EnigmaIOTGatewayMQTT</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_mqtt.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"GwOutput__mqtt_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"GwOutput__mqtt_8h.html\">GwOutput_mqtt.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;PubSubClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160; </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;AsyncTCP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;esp_system.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;esp_event.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;mqtt_client.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;esp_tls.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncTCP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &lt;SPI.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &lt;WiFiClientSecure.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;WiFiClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#endif // SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160; </div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160; </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8cpp.html#afb58b5e941b1e87b27c59c51b730f631\">   41</a></span>&#160;<a class=\"code\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a> <a class=\"code\" href=\"GwOutput__mqtt_8cpp.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput</a>;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">   43</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">GwOutput_MQTT::configManagerStart</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>* enigmaIotGw) {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;    <a class=\"code\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a> = enigmaIotGw;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">mqttServerParam</a> = <span class=\"keyword\">new</span> AsyncWiFiManagerParameter (<span class=\"stringliteral\">&quot;mqttserver&quot;</span>, <span class=\"stringliteral\">&quot;MQTT Server&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a>, 41, <span class=\"stringliteral\">&quot;required type=\\&quot;text\\&quot; maxlength=40&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    <span class=\"keywordtype\">char</span> port[10];</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    itoa (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqtt_port</a>, port, 10);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">mqttPortParam</a> = <span class=\"keyword\">new</span> AsyncWiFiManagerParameter (<span class=\"stringliteral\">&quot;mqttport&quot;</span>, <span class=\"stringliteral\">&quot;MQTT Port&quot;</span>, port, 6, <span class=\"stringliteral\">&quot;required type=\\&quot;number\\&quot; min=\\&quot;0\\&quot; max=\\&quot;65535\\&quot; step=\\&quot;1\\&quot;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">mqttUserParam</a> = <span class=\"keyword\">new</span> AsyncWiFiManagerParameter (<span class=\"stringliteral\">&quot;mqttuser&quot;</span>, <span class=\"stringliteral\">&quot;MQTT User&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqtt_user</a>, 21, <span class=\"stringliteral\">&quot;required type=\\&quot;text\\&quot; maxlength=20&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">mqttPassParam</a> = <span class=\"keyword\">new</span> AsyncWiFiManagerParameter (<span class=\"stringliteral\">&quot;mqttpass&quot;</span>, <span class=\"stringliteral\">&quot;MQTT Password&quot;</span>, <span class=\"stringliteral\">&quot;&quot;</span>, 41, <span class=\"stringliteral\">&quot;type=\\&quot;password\\&quot; maxlength=40&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <a class=\"code\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">addWiFiManagerParameter</a> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">mqttServerParam</a>);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    <a class=\"code\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">addWiFiManagerParameter</a> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">mqttPortParam</a>);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    <a class=\"code\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">addWiFiManagerParameter</a> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">mqttUserParam</a>);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    <a class=\"code\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">addWiFiManagerParameter</a> (<a class=\"code\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">mqttPassParam</a>);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160; </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160; </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">   59</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">GwOutput_MQTT::saveConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;    <span class=\"keywordflow\">if</span> (!FILESYSTEM.begin ()) {</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error opening filesystem&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Filesystem opened&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160; </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;    File configFile = FILESYSTEM.open (<a class=\"code\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>, <span class=\"stringliteral\">&quot;w&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    <span class=\"keywordflow\">if</span> (!configFile) {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Failed to open config file %s for writing&quot;</span>, <a class=\"code\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;%s opened for writting&quot;</span>, <a class=\"code\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160; </div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (4) + 110;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    DynamicJsonDocument doc (capacity);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    doc[<span class=\"stringliteral\">&quot;mqtt_server&quot;</span>] = <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a>;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    doc[<span class=\"stringliteral\">&quot;mqtt_port&quot;</span>] = <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqtt_port</a>;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    doc[<span class=\"stringliteral\">&quot;mqtt_user&quot;</span>] = <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqtt_user</a>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    doc[<span class=\"stringliteral\">&quot;mqtt_pass&quot;</span>] = <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a>;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160; </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    <span class=\"keywordflow\">if</span> (serializeJson (doc, configFile) == 0) {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Failed to write to file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        configFile.close ();</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"comment\">//FILESYSTEM.remove (CONFIG_FILE); // Testing only</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160; </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    String output;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    serializeJsonPretty (doc, output);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;%s&quot;</span>, output.c_str ());</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160; </div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    configFile.flush ();</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    <span class=\"comment\">//size_t size = configFile.size ();</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    configFile.close ();</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Gateway configuration saved to flash. %u bytes&quot;</span>, configFile.size ());</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">  101</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">GwOutput_MQTT::loadConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    <span class=\"comment\">//FILESYSTEM.remove (CONFIG_FILE); // Only for testing</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    <span class=\"keywordtype\">bool</span> json_correct = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160; </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    <span class=\"keywordflow\">if</span> (!FILESYSTEM.begin ()) {</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error starting filesystem. Formatting&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        FILESYSTEM.format ();</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        WiFi.disconnect ();</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160; </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    <span class=\"keywordflow\">if</span> (FILESYSTEM.exists (<a class=\"code\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>)) {</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Opening %s file&quot;</span>, <a class=\"code\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        File configFile = FILESYSTEM.open (<a class=\"code\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>, <span class=\"stringliteral\">&quot;r&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keywordflow\">if</span> (configFile) {</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;            <span class=\"comment\">//size_t size = configFile.size ();</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;%s opened. %u bytes&quot;</span>, <a class=\"code\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>, configFile.size ());</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;            <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (4) + 110;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;            DynamicJsonDocument doc (capacity);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160; </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;            DeserializationError error = deserializeJson (doc, configFile);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160; </div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;            <span class=\"keywordflow\">if</span> (error) {</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Failed to parse file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;JSON file parsed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160; </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;            <span class=\"keywordflow\">if</span> (doc.containsKey (<span class=\"stringliteral\">&quot;mqtt_server&quot;</span>) &amp;&amp; doc.containsKey (<span class=\"stringliteral\">&quot;mqtt_port&quot;</span>)</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                &amp;&amp; doc.containsKey (<span class=\"stringliteral\">&quot;mqtt_user&quot;</span>) &amp;&amp; doc.containsKey (<span class=\"stringliteral\">&quot;mqtt_pass&quot;</span>)) {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                json_correct = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;            strncpy (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a>, doc[<span class=\"stringliteral\">&quot;mqtt_server&quot;</span>] | <span class=\"stringliteral\">&quot;&quot;</span>, sizeof (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a>));</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;            <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqtt_port</a> = doc[<span class=\"stringliteral\">&quot;mqtt_port&quot;</span>].as&lt;<span class=\"keywordtype\">int</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;            strncpy (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqtt_user</a>, doc[<span class=\"stringliteral\">&quot;mqtt_user&quot;</span>] | <span class=\"stringliteral\">&quot;&quot;</span>, sizeof (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqtt_user</a>));</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;            strncpy (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a>, doc[<span class=\"stringliteral\">&quot;mqtt_pass&quot;</span>] | <span class=\"stringliteral\">&quot;&quot;</span>, sizeof (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a>));</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;            configFile.close ();</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;            <span class=\"keywordflow\">if</span> (json_correct) {</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;MQTT output module configuration successfuly read&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;==== MQTT Configuration ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;MQTT server: %s&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a>);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;MQTT port: %d&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqtt_port</a>);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;MQTT user: %s&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqtt_user</a>);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;            DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;MQTT password: %s&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a>);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160; </div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;            String output;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;            serializeJsonPretty (doc, output);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160; </div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;JSON file %s&quot;</span>, output.c_str ());</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error opening %s&quot;</span>, <a class=\"code\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;%s do not exist&quot;</span>, <a class=\"code\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160; </div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    <span class=\"keywordflow\">return</span> json_correct;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160; </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160; </div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">  166</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">GwOutput_MQTT::configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== Config Portal MQTTGW result ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;MQTT server: %s&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">mqttServerParam</a>-&gt;getValue ());</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;MQTT port: %s&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">mqttPortParam</a>-&gt;getValue ());</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;MQTT user: %s&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">mqttUserParam</a>-&gt;getValue ());</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;MQTT password: %s&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">mqttPassParam</a>-&gt;getValue ());</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Status: %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> ? <span class=\"stringliteral\">&quot;true&quot;</span> : <span class=\"stringliteral\">&quot;false&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160; </div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> &amp;&amp; <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">getShouldSave</a> ()) {</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        memcpy (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">mqttServerParam</a>-&gt;getValue (), <a class=\"code\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">mqttServerParam</a>-&gt;getValueLength ());</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a>[<a class=\"code\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">mqttServerParam</a>-&gt;getValueLength ()] = <span class=\"charliteral\">&#39;\\0&#39;</span>;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;MQTT Server: %s&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a>);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqtt_port</a> = atoi (<a class=\"code\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">mqttPortParam</a>-&gt;getValue ());</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        memcpy (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqtt_user</a>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">mqttUserParam</a>-&gt;getValue (), <a class=\"code\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">mqttUserParam</a>-&gt;getValueLength ());</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* mqtt_pass = <a class=\"code\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">mqttPassParam</a>-&gt;getValue ();</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keywordflow\">if</span> (mqtt_pass &amp;&amp; (mqtt_pass[0] != <span class=\"charliteral\">&#39;\\0&#39;</span>)) {<span class=\"comment\">// If password is empty, keep the old one</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;            memcpy (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a>, mqtt_pass, <a class=\"code\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">mqttPassParam</a>-&gt;getValueLength ());</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;            <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a>[<a class=\"code\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">mqttPassParam</a>-&gt;getValueLength ()] = <span class=\"charliteral\">&#39;\\0&#39;</span>;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;MQTT password field empty. Keeping the old one&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;MQTT pass: %s&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a>);</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">saveConfig</a> ()) {</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error writting MQTT config to filesystem.&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Configuration stored&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Configuration does not need to be saved&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160; </div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;    <span class=\"keyword\">delete</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">mqttServerParam</a>);</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;    <span class=\"keyword\">delete</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">mqttPortParam</a>);</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;    <span class=\"keyword\">delete</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">mqttUserParam</a>);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;    <span class=\"keyword\">delete</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">mqttPassParam</a>);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160; </div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">  203</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">GwOutput_MQTT::begin</a> () {</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;    <span class=\"comment\">//this-&gt;mqtt_queue = new EnigmaIOTRingBuffer&lt;mqtt_queue_item_t&gt; (MAX_MQTT_QUEUE_SIZE);</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"preprocessor\">#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;    randomSeed (micros ());</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">espClient</a>.setCACert (DSTroot_CA);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">espClient</a>.setTrustAnchors (&amp;certificate);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;CA store set&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"preprocessor\">#endif // SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.setServer (<a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqtt_port</a>);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Set MQTT server %s - port %d&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqtt_port</a>);</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.setBufferSize (<a class=\"code\" href=\"GwOutput__mqtt_8h.html#a4f9d3fafe897148f4e44e0db74816a9c\">MQTT_BUFFER_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;    <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a> = String (<a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">getNetworkName</a> ());</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160; </div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;    uint64_t chipid = ESP.getEfuseMac ();</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;    <a class=\"code\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">clientId</a> = <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a> + String ((uint32_t)chipid, HEX);</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"preprocessor\">#elif defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;    <a class=\"code\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">clientId</a> = <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a> + String (ESP.getChipId (), HEX);</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;    configTime (0, 0, <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#ad2cbd556e432924a29a3efa1d13668af\">NTP_SERVER_1</a>, <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a562447c925663fec9c7e923f6c46fa7d\">NTP_SERVER_2</a>);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;    setenv (<span class=\"stringliteral\">&quot;TZ&quot;</span>, <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a\">TZINFO</a>, 1);</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;    tzset ();</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160; </div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;    <a class=\"code\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a> = <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a> + <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a13c1b13340e4cfcf8fa233d3f941853e\">GW_STATUS</a>;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">reconnect</a> ();</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160; </div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">  235</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">GwOutput_MQTT::reconnect</a> () {</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;    <span class=\"comment\">// Loop until we&#39;re reconnected</span></div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;    <span class=\"keywordflow\">while</span> (!<a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.connected ()) {</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        <span class=\"comment\">// TODO: startConnectionFlash (500);</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;Attempting MQTT connection...&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 1; i &lt; 5; i++) {</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Connecting to WiFi %s&quot;</span>, WiFi.SSID ().c_str ());</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;            delay (1000);</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;            <span class=\"keywordflow\">if</span> (WiFi.isConnected ()) {</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;WiFi is connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;                <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;                WiFi.begin ();</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        <span class=\"comment\">// Create a random client ID</span></div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        <span class=\"comment\">// Attempt to connect</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"comment\">//#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        <a class=\"code\" href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">setClock</a> ();</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;<span class=\"comment\">//#endif</span></div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Clock set.&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Connect to MQTT server: user %s, pass %s, topic %s&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;                   <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqtt_user</a>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a>.c_str ());</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;        <span class=\"comment\">//client.setServer (mqttgw_config.mqtt_server, mqttgw_config.mqtt_port);</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.connect (<a class=\"code\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">clientId</a>.c_str (), <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqtt_user</a>, <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>.<a class=\"code\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a>.c_str (), 0, <span class=\"keyword\">true</span>, <span class=\"stringliteral\">&quot;0&quot;</span>, <span class=\"keyword\">true</span>)) {</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;MQTT connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;            <span class=\"comment\">// Once connected, publish an announcement...</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;            <a class=\"code\" href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">publishMQTT</a> (<a class=\"code\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a>.c_str (), <span class=\"stringliteral\">&quot;1&quot;</span>, 1, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;            <span class=\"comment\">// ... and resubscribe</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;            String dlTopic = <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a> + String (<span class=\"stringliteral\">&quot;/+/set/#&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;            <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.subscribe (dlTopic.c_str ());</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;            dlTopic = <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a> + String (<span class=\"stringliteral\">&quot;/+/get/#&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;            <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.subscribe (dlTopic.c_str ());</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;            <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.setCallback (<a class=\"code\" href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">onDlData</a>);</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;            <span class=\"comment\">// TODO: stopConnectionFlash ();</span></div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;            <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.disconnect ();</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;failed, rc=%d try again in 5 seconds&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.state ());</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;<span class=\"preprocessor\">#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;            <span class=\"keywordtype\">char</span> error[100];</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;            <span class=\"keywordtype\">int</span> errorCode = <a class=\"code\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">espClient</a>.getLastSSLError (error, 100);</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;            <span class=\"keywordtype\">int</span> errorCode = <a class=\"code\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">espClient</a>.lastError (error, 100);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Connect error %d: %s&quot;</span>, errorCode, error);</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;            <span class=\"comment\">// Wait 5 seconds before retrying</span></div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;            <span class=\"keyword\">const</span> TickType_t xDelay = 5000 / portTICK_PERIOD_MS;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;            vTaskDelay (xDelay);</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;            delay (5000);</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160; </div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8cpp.html#aee4f7d364dbe6c4b29c462b3306bebe7\">  293</a></span>&#160;<span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GwOutput__mqtt_8cpp.html#aee4f7d364dbe6c4b29c462b3306bebe7\">getTopicAddress</a> (<span class=\"keywordtype\">char</span>* topic, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>&amp; len) {</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;    <span class=\"keywordflow\">if</span> (!topic)</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">nullptr</span>;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160; </div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;    <span class=\"keywordtype\">char</span>* start = strchr (topic, <span class=\"charliteral\">&#39;/&#39;</span>) + 1;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;    <span class=\"keywordtype\">char</span>* end;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160; </div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;    <span class=\"keywordflow\">if</span> (start) {</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        end = strchr (start, <span class=\"charliteral\">&#39;/&#39;</span>);</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">nullptr</span>;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;    <span class=\"comment\">//DEBUG_INFO (&quot;Start %p : %d&quot;, start, start - topic);</span></div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;    <span class=\"comment\">//DEBUG_INFO (&quot;End %p : %d&quot;, end, end - topic);</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;    <span class=\"keywordflow\">if</span> (end) {</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;        len = end - start;</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        len = strlen (topic) - (start - topic);</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160; </div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;    <span class=\"keywordflow\">return</span> start;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160; </div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8cpp.html#a57969f4236bd72eca4fa83155a025085\">  316</a></span>&#160;<a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> <a class=\"code\" href=\"GwOutput__mqtt_8cpp.html#a57969f4236bd72eca4fa83155a025085\">checkMsgType</a> (String <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Type topic: %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>.c_str ());</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#ae9ef65fac5a6e3c6594811a7c8ee2291\">GET_VERSION</a>) {</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">control_message_type::VERSION</a>;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a8fa3ce9af2986feed0592ad3f82b0e8a\">GET_SLEEP</a>) {</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">control_message_type::SLEEP_GET</a>;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a0ffae85da5eb98e796fd818c50ac147a\">SET_SLEEP</a>) {</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">control_message_type::SLEEP_SET</a>;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a03d78690a77ad7c71da69356e13f4111\">SET_OTA</a>) {</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">control_message_type::OTA</a>;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a523454d3069bcc08356f43906870a8eb\">SET_IDENTIFY</a>) {</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;IDENTIFY MESSAGE %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>.c_str ());</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">control_message_type::IDENTIFY</a>;</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a9ed6c45eceed73f4dc32d6147957fed5\">SET_RESET_CONFIG</a>) {</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;RESET CONFIG MESSAGE %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>.c_str ());</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">control_message_type::RESET</a>;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#ae274ed0194e5685c280ab9148dbcba69\">GET_RSSI</a>) {</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;GET RSSI MESSAGE %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>.c_str ());</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">control_message_type::RSSI_GET</a>;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#ad7c2efab8087395f360a163faecc66eb\">SET_USER_DATA</a>) {</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;USER DATA %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>.c_str ());</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">control_message_type::USERDATA_SET</a>;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#ac6dad41b3de63cebfef84fc4677cded8\">GET_USER_DATA</a>) {</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;USER DATA %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>.c_str ());</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">control_message_type::USERDATA_GET</a>;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#af8bca12527bac4b474e2ccb5acd8691e\">GET_NAME</a>) {</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;GET NODE NAME AND ADDRESS&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">control_message_type::NAME_GET</a>;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a947ddc46cf5393a05a60422574c68dd0\">SET_NAME</a>) {</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;SET NODE NAME %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>.c_str ());</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">control_message_type::NAME_SET</a>;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> == <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a2e46d7b49d143e76a290f06fc6892aa3\">SET_RESTART_MCU</a>) {</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;RESET MCU&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">control_message_type::RESTART_NODE</a>;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;    } <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">control_message_type::INVALID</a>;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160; </div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8cpp.html#a0ad2a145294a0b58f6e5b5e3d8ad542f\">  354</a></span>&#160;<a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> <a class=\"code\" href=\"GwOutput__mqtt_8cpp.html#a0ad2a145294a0b58f6e5b5e3d8ad542f\">getTopicType</a> (<span class=\"keywordtype\">char</span>* topic, <span class=\"keywordtype\">char</span>*&amp; userCommand) {</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;    <span class=\"keywordflow\">if</span> (!topic)</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">control_message_type::INVALID</a>;</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160; </div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;    String command;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160; </div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;    <span class=\"comment\">//Discard address</span></div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;    <span class=\"keywordtype\">char</span>* start = strchr (topic, <span class=\"charliteral\">&#39;/&#39;</span>) + 1;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;    <span class=\"keywordflow\">if</span> (start)</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;        start = strchr (start, <span class=\"charliteral\">&#39;/&#39;</span>) + 1;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;    <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">control_message_type::INVALID</a>;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;    <span class=\"comment\">//DEBUG_INFO (&quot;Second Start %p&quot;, start);</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;    <span class=\"keywordflow\">if</span> ((<span class=\"keywordtype\">int</span>)start &gt; 0x01) { <span class=\"comment\">// TODO: Why this condition ????</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        command = String (start);</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;        userCommand = start;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">control_message_type::INVALID</a>;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;    <span class=\"comment\">//DEBUG_INFO (&quot;Start %p : %d&quot;, start, start - topic);</span></div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;    <span class=\"comment\">//DEBUG_INFO (&quot;Command %s&quot;, command.c_str());</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160; </div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> msgType = <a class=\"code\" href=\"GwOutput__mqtt_8cpp.html#a57969f4236bd72eca4fa83155a025085\">checkMsgType</a> (command);</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160; </div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;    <span class=\"keywordflow\">return</span> msgType;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160; </div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160; </div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">  382</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">GwOutput_MQTT::onDlData</a> (<span class=\"keywordtype\">char</span>* topic, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> len) {</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;    uint8_t addr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;    <span class=\"keywordtype\">char</span>* addressStr;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> msgType;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;    <span class=\"keywordtype\">char</span>* userCommand;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;    <span class=\"keywordtype\">char</span>* nodeName = <span class=\"keyword\">nullptr</span>;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160; </div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160; </div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Topic %s&quot;</span>, topic);</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160; </div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;    <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> addressLen;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160; </div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;    addressStr = <a class=\"code\" href=\"GwOutput__mqtt_8cpp.html#aee4f7d364dbe6c4b29c462b3306bebe7\">getTopicAddress</a> (topic, addressLen);</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160; </div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;    <span class=\"keywordflow\">if</span> (addressStr) {</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;        <span class=\"comment\">//DEBUG_INFO (&quot;Len: %u&quot;, addressLen);</span></div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Address %.*s&quot;</span>, addressLen, addressStr);</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a> (addressStr, addr)) {</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Not a mac address. Treating it as a node name&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;            <span class=\"keywordflow\">if</span> (addressLen) {</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;                nodeName = (<span class=\"keywordtype\">char</span>*)calloc (addressLen + 1, <span class=\"keyword\">sizeof</span> (<span class=\"keywordtype\">char</span>));</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;                memcpy (nodeName, addressStr, addressLen);</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Invalid address&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;                <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Hex Address = %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (addr, 6));</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;    } <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160; </div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;    msgType = <a class=\"code\" href=\"GwOutput__mqtt_8cpp.html#a0ad2a145294a0b58f6e5b5e3d8ad542f\">getTopicType</a> (topic, userCommand);</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160; </div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160; </div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;User command: %s&quot;</span>, userCommand);</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;MsgType 0x%02X&quot;</span>, msgType);</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Data: %.*s\\n&quot;</span>, len, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>);</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160; </div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;    <span class=\"keywordflow\">if</span> (msgType != <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">control_message_type_t::INVALID</a>) {</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;        <a class=\"code\" href=\"GwOutput__mqtt_8cpp.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput</a>.<a class=\"code\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">downlinkCb</a> (addr, nodeName, msgType, (<span class=\"keywordtype\">char</span>*)<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Invalid message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160; </div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;    <span class=\"keywordflow\">if</span> (nodeName) {</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;        free (nodeName);</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;        nodeName = NULL;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160; </div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">  433</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">GwOutput_MQTT::loop</a> () {</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160; </div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.loop ();</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.connected ()) {</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;        <a class=\"code\" href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">reconnect</a> ();</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;        <a class=\"code\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a>* message;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;        <span class=\"keyword\">static</span> time_t statusLastUpdated;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160; </div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">empty</a> ()) {</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;            message = <a class=\"code\" href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">getMQTTqueue</a> ();</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">publishMQTT</a> (message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">topic</a>, message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">payload</a>, message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">payload_len</a>, message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570\">retain</a>)) {</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;                DEBUG_DBG (<span class=\"stringliteral\">&quot;MQTT published. %s %.*s&quot;</span>, message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">topic</a>, message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">payload_len</a>, message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">payload</a>);</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;                <a class=\"code\" href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">popMQTTqueue</a> ();</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;        <span class=\"keywordflow\">if</span> (millis () - statusLastUpdated &gt; <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a0c2feee288af6e6c9d13de8804a94128\">STATUS_SEND_PERIOD</a>) {</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;            statusLastUpdated = millis ();</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;            <a class=\"code\" href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">publishMQTT</a> (<a class=\"code\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a>.c_str (), <span class=\"stringliteral\">&quot;1&quot;</span>, 1, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160; </div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">  456</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">GwOutput_MQTT::publishMQTT</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* topic, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload, <span class=\"keywordtype\">size_t</span> len, <span class=\"keywordtype\">bool</span> retain) {</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Publish MQTT. %s : %.*s&quot;</span>, topic, len, payload);</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.connected ()) {</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>.publish (topic, (uint8_t*)payload, len, retain);</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;MQTT client not connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160; </div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;<span class=\"comment\">//#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">  467</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">GwOutput_MQTT::setClock</a> () {</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= INFO</span></div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;\\nWaiting for NTP time sync: &quot;</span>);</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;    time_t now = time (<span class=\"keyword\">nullptr</span>);</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;    <span class=\"keywordflow\">while</span> (now &lt; 8 * 3600 * 2) {</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;        delay (500);</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;        Serial.print (<span class=\"stringliteral\">&quot;.&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;        now = time (<span class=\"keyword\">nullptr</span>);</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;    <span class=\"comment\">//Serial.println (&quot;&quot;);</span></div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;    <span class=\"keyword\">struct </span>tm timeinfo;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;    gmtime_r (&amp;now, &amp;timeinfo);</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Current time: %s&quot;</span>, asctime (&amp;timeinfo));</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;<span class=\"comment\">//#endif</span></div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160; </div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">  484</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">GwOutput_MQTT::addMQTTqueue</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* topic, <span class=\"keywordtype\">char</span>* payload, <span class=\"keywordtype\">size_t</span> len, <span class=\"keywordtype\">bool</span> retain) {</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;    <a class=\"code\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a> message;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160; </div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> () &gt;= <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">MAX_MQTT_QUEUE_SIZE</a>) {</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;        <a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">pop</a> ();</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160; </div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;    <span class=\"comment\">//message.topic = (char*)malloc (strlen (topic) + 1);</span></div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;    strncpy (message.<a class=\"code\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">topic</a>, topic, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">MAX_MQTT_TOPIC_LEN</a>);</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;    message.<a class=\"code\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">payload_len</a> = len &lt; <a class=\"code\" href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">MAX_MQTT_PLD_LEN</a> ? len : <a class=\"code\" href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">MAX_MQTT_PLD_LEN</a>;</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;    <span class=\"comment\">//message-&gt;payload = (char*)malloc (len);</span></div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;    memcpy (message.<a class=\"code\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">payload</a>, payload, message.<a class=\"code\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">payload_len</a>);</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;    message.<a class=\"code\" href=\"structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570\">retain</a> = retain;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160; </div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">push</a> (&amp;message);</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;%d MQTT messages queued Len:%d %s %.*s&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> (),</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;               len,</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;               message.<a class=\"code\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">topic</a>,</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;               message.<a class=\"code\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">payload_len</a>, message.<a class=\"code\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">payload</a>);</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160; </div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160; </div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">  507</a></span>&#160;<a class=\"code\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a>* <a class=\"code\" href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">GwOutput_MQTT::getMQTTqueue</a> () {</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> ()) {</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;MQTT message got from queue&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">front</a> ();</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">nullptr</span>;</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160; </div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">  515</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">GwOutput_MQTT::popMQTTqueue</a> () {</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> ()) {</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;        <a class=\"code\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a>* message;</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160; </div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;        message = <a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">front</a> ();</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;        <span class=\"keywordflow\">if</span> (message) {</div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;            <span class=\"keywordflow\">if</span> (message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">topic</a>) {</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;                <span class=\"comment\">//delete(message-&gt;topic);</span></div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;                message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">topic</a>[0] = 0;</div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;            <span class=\"keywordflow\">if</span> (message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">payload</a>) {</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;                <span class=\"comment\">//delete(message-&gt;payload);</span></div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;                message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">payload</a>[0] = 0;</div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;            message-&gt;<a class=\"code\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">payload_len</a> = 0;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;            <span class=\"comment\">//delete message;</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;        <a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">pop</a> ();</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;MQTT message pop. Size %d&quot;</span>, <a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> ());</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160; </div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;<span class=\"keywordtype\">bool</span> GwOutput_MQTT::rawMsgSend (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* topic, <span class=\"keywordtype\">char</span>* payload, <span class=\"keywordtype\">size_t</span> len, <span class=\"keywordtype\">bool</span> retain) {</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;    <span class=\"keywordtype\">bool</span> result;</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;    <span class=\"keywordflow\">if</span> ((result = <a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, payload, len, retain))) {</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;MQTT queued %s. Length %d&quot;</span>, topic, len);</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error queuing MQTT %s&quot;</span>, topic);</div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;    <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160; </div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160; </div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">  551</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">GwOutput_MQTT::outputDataSend</a> (<span class=\"keywordtype\">char</span>* address, <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length, <a class=\"code\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a> type) {</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> TOPIC_SIZE = 64;</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;    <span class=\"keywordtype\">char</span> topic[TOPIC_SIZE];</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;    <span class=\"keywordtype\">bool</span> result;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;    <span class=\"keywordflow\">switch</span> (type) {</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">GwOutput_data_type::data</a>:</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;        snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/%s&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#af1dcc05117b1f2ccb5922611c540e241\">NODE_DATA</a>);</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">GwOutput_data_type::lostmessages</a>:</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;        snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/%s&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a2aa30d8c4ad4f2895fefd1b1d425ee66\">LOST_MESSAGES</a>);</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">GwOutput_data_type::status</a>:</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;        snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/%s&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a82ea7d9552d7d2c2d977c578587e94dc\">NODE_STATUS</a>);</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;    <span class=\"keywordflow\">if</span> ((result = <a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, length))) {</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;MQTT queued %s. Length %d&quot;</span>, topic, length);</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error queuing MQTT %s&quot;</span>, topic);</div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;    <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160; </div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">  574</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">GwOutput_MQTT::outputControlSend</a> (<span class=\"keywordtype\">char</span>* address, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length) {</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> TOPIC_SIZE = 64;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> PAYLOAD_SIZE = 512;</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;    <span class=\"keywordtype\">char</span> topic[TOPIC_SIZE];</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;    <span class=\"keywordtype\">char</span> payload[PAYLOAD_SIZE];</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;    <span class=\"keywordtype\">size_t</span> pld_size = 0;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;    <span class=\"keywordtype\">bool</span> result = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160; </div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;    <span class=\"keywordflow\">switch</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0]) {</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">control_message_type::VERSION_ANS</a>:</div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;        snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/%s&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a1bbd404f93aed82bc0d713238fa2bf6b\">GET_VERSION_ANS</a>);</div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;        <span class=\"keywordflow\">if</span> (length &gt;= 4) {</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;            pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;version\\&quot;:\\&quot;%d.%d.%d\\&quot;}&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1], <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[2], <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[3]);</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, payload, pld_size)) {</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT %s %s&quot;</span>, topic, payload);</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;            result = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">control_message_type::SLEEP_ANS</a>:</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;        uint32_t sleepTime;</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;        memcpy (&amp;sleepTime, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 1, <span class=\"keyword\">sizeof</span> (sleepTime));</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;        snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/%s&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a8d48508893d087bd76ac4061b112cce7\">GET_SLEEP_ANS</a>);</div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;        pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;sleeptime\\&quot;:%u}&quot;</span>, sleepTime);</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, payload, pld_size)) {</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT %s %s&quot;</span>, topic, payload);</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;            result = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\">control_message_type::RESET_ANS</a>:</div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;        snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/%s&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a7e8363a72c676c15de7221529988ee48\">SET_RESET_ANS</a>);</div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;        pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;OK\\&quot;}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, payload, pld_size)) {</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT %s %s&quot;</span>, topic, payload);</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;            result = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\">control_message_type::RSSI_ANS</a>:</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;        snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/%s&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a44bf9b184af7520ec127c6b705991c8f\">GET_RSSI_ANS</a>);</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;        pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;rssi\\&quot;:%d,\\&quot;channel\\&quot;:%u}&quot;</span>, (int8_t)<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1], <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[2]);</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">getNodes</a> ()-&gt;<a class=\"code\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">getNodeFromName</a> (address)-&gt;<a class=\"code\" href=\"classNode.html#aa14110f23c8cfe73c44e1a87382a1081\">setRSSI</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1]);</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, payload, pld_size)) {</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT %s %s&quot;</span>, topic, payload);</div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;            result = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">control_message_type::NAME_ANS</a>:</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;        snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/%s&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a043021359c728f4265337a8c21edfcdb\">GET_NAME_ANS</a>);</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;        <span class=\"keywordtype\">char</span> addrStr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;        pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;name\\&quot;:\\&quot;%.*s\\&quot;,\\&quot;address\\&quot;:\\&quot;%s\\&quot;}&quot;</span>, length - <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> - 1, (<span class=\"keywordtype\">char</span>*)(<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 1 + <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>), <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 1, addrStr));</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, payload, pld_size)) {</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT %s %s&quot;</span>, topic, payload);</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;            result = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\">control_message_type::RESTART_CONFIRM</a>:</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;        snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/%s&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#ae2f0ef8f36c0b685940124089172e6c3\">RESTART_NOTIF</a>);</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;        <span class=\"keywordflow\">if</span> (length &gt; 1) {</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;            pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;reason\\&quot;:%d}&quot;</span>, (int8_t)<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1]);</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, payload, pld_size)) {</div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT %s %s&quot;</span>, topic, payload);</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;            result = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">control_message_type::OTA_ANS</a>:</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;        snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/%s&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address, <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a82391b9a9738bbf392fbad554f7ef527\">SET_OTA_ANS</a>);</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;        <span class=\"keywordflow\">switch</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1]) {</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\">ota_status::OTA_STARTED</a>:</div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;            pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;OTA Started\\&quot;,\\&quot;status\\&quot;:%u}&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1]);</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\">ota_status::OTA_START_ERROR</a>:</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;            pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;OTA Start error\\&quot;,\\&quot;status\\&quot;:%u}&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1]);</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\">ota_status::OTA_OUT_OF_SEQUENCE</a>:</div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;            uint16_t lastGoodIdx;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;            memcpy ((uint8_t*)&amp;lastGoodIdx, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> + 2, <span class=\"keyword\">sizeof</span> (uint16_t));</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;            pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;last_chunk\\&quot;:%d,\\&quot;result\\&quot;:\\&quot;OTA out of sequence error\\&quot;,\\&quot;status\\&quot;:%u}&quot;</span>, lastGoodIdx, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1]);</div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\">ota_status::OTA_CHECK_OK</a>:</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;            pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;OTA check OK\\&quot;,\\&quot;status\\&quot;:%u}&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1]);</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">ota_status::OTA_CHECK_FAIL</a>:</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;            pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;OTA check failed\\&quot;,\\&quot;status\\&quot;:%u}&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1]);</div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\">ota_status::OTA_TIMEOUT</a>:</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;            pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;OTA timeout\\&quot;,\\&quot;status\\&quot;:%u}&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1]);</div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\">ota_status::OTA_FINISHED</a>:</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;            pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;result\\&quot;:\\&quot;OTA finished OK\\&quot;,\\&quot;status\\&quot;:%u}&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[1]);</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;            <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, payload, pld_size)) {</div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT %s %s&quot;</span>, topic, payload);</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;            result = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Unknown control message. Code: 0x%02X&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0]);</div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160; </div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;    <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160; </div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">  678</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">GwOutput_MQTT::newNodeSend</a> (<span class=\"keywordtype\">char</span>* address, uint16_t node_id) {</div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> TOPIC_SIZE = 64;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160; </div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;    <span class=\"keywordtype\">char</span> topic[TOPIC_SIZE];</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160; </div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;    uint8_t* nodeAddress = <a class=\"code\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a>-&gt;<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">getNodes</a> ()-&gt;<a class=\"code\" href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">getNodeFromID</a> (node_id)-&gt;<a class=\"code\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">getMacAddress</a> ();</div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;    <span class=\"keywordtype\">char</span> addrStr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160; </div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;    <span class=\"keywordtype\">char</span> payload[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3 + 14];</div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160; </div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;    snprintf (payload, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3 + 14, <span class=\"stringliteral\">&quot;{\\&quot;address\\&quot;:\\&quot;%s\\&quot;}&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (nodeAddress, addrStr));</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160; </div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;    snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/hello&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address);</div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160;    <span class=\"keywordtype\">bool</span> result = <a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, payload, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3 + 13);</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT %s&quot;</span>, topic);</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;    <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160; </div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">  696</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">GwOutput_MQTT::nodeDisconnectedSend</a> (<span class=\"keywordtype\">char</span>* address, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> TOPIC_SIZE = 64;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> PAYLOAD_SIZE = 64;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160; </div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;    <span class=\"keywordtype\">char</span> topic[TOPIC_SIZE];</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;    <span class=\"keywordtype\">char</span> payload[PAYLOAD_SIZE];</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;    <span class=\"keywordtype\">size_t</span> pld_size;</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160; </div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;    snprintf (topic, TOPIC_SIZE, <span class=\"stringliteral\">&quot;%s/%s/bye&quot;</span>, <a class=\"code\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a>.c_str (), address);</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;    pld_size = snprintf (payload, PAYLOAD_SIZE, <span class=\"stringliteral\">&quot;{\\&quot;reason\\&quot;:%d}&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;    <span class=\"keywordtype\">bool</span> result = <a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (topic, payload, pld_size);</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Published MQTT %s result = %s&quot;</span>, topic, result ? <span class=\"stringliteral\">&quot;OK&quot;</span> : <span class=\"stringliteral\">&quot;Fail&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;    <span class=\"keywordflow\">return</span> result;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\">OTA_CHECK_OK</a></div><div class=\"ttdeci\">@ OTA_CHECK_OK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00079\">NodeList.h:79</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a7c75a452f70d201c2d35a5394cc61f6a\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">GwOutput_MQTT::nodeDisconnectedSend</a></div><div class=\"ttdeci\">bool nodeDisconnectedSend(char *address, gwInvalidateReason_t reason)</div><div class=\"ttdoc\">Send node disconnection notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00696\">GwOutput_mqtt.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a562447c925663fec9c7e923f6c46fa7d\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a562447c925663fec9c7e923f6c46fa7d\">NTP_SERVER_2</a></div><div class=\"ttdeci\">#define NTP_SERVER_2</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00022\">EnigmaIoTconfig.h:22</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">VERSION_ANS</a></div><div class=\"ttdeci\">@ VERSION_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00053\">NodeList.h:53</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">IDENTIFY</a></div><div class=\"ttdeci\">@ IDENTIFY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00057\">NodeList.h:57</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8cpp_html_a0ad2a145294a0b58f6e5b5e3d8ad542f\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8cpp.html#a0ad2a145294a0b58f6e5b5e3d8ad542f\">getTopicType</a></div><div class=\"ttdeci\">control_message_type_t getTopicType(char *topic, char *&amp;userCommand)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00354\">GwOutput_mqtt.cpp:354</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a1bbd404f93aed82bc0d713238fa2bf6b\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a1bbd404f93aed82bc0d713238fa2bf6b\">GET_VERSION_ANS</a></div><div class=\"ttdeci\">#define GET_VERSION_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00036\">GwOutput_mqtt.h:36</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a5e077c236ed77f61ca1a7ab6067cf73e\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">GwOutput_MQTT::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart(EnigmaIOTGatewayClass *enigmaIotGw)</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00043\">GwOutput_mqtt.cpp:43</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ad4d784744aeee89199092987f9ba5c53\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">GwOutput_MQTT::mqttPassParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * mqttPassParam</div><div class=\"ttdoc\">Configuration field for MQTT server password.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00090\">GwOutput_mqtt.h:90</a></div></div>\n<div class=\"ttc\" id=\"astructmqtt__queue__item__t_html\"><div class=\"ttname\"><a href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00077\">GwOutput_mqtt.h:77</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">SLEEP_SET</a></div><div class=\"ttdeci\">@ SLEEP_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00055\">NodeList.h:55</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a3d8f3d74fcf2588278651a3b4f410c1c\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">GwOutput_MQTT::newNodeSend</a></div><div class=\"ttdeci\">bool newNodeSend(char *address, uint16_t node_id)</div><div class=\"ttdoc\">Send new node notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00678\">GwOutput_mqtt.cpp:678</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">RESTART_NODE</a></div><div class=\"ttdeci\">@ RESTART_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00065\">NodeList.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a08caf502661a3bf1b75ba6860eb1bebe\"><div class=\"ttname\"><a href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">NodeList::getNodeFromName</a></div><div class=\"ttdeci\">Node * getNodeFromName(const char *name)</div><div class=\"ttdoc\">Gets node that correspond with given node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00174\">NodeList.cpp:174</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a8fa3ce9af2986feed0592ad3f82b0e8a\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a8fa3ce9af2986feed0592ad3f82b0e8a\">GET_SLEEP</a></div><div class=\"ttdeci\">#define GET_SLEEP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00037\">GwOutput_mqtt.h:37</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">USERDATA_SET</a></div><div class=\"ttdeci\">@ USERDATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00071\">NodeList.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a03d78690a77ad7c71da69356e13f4111\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a03d78690a77ad7c71da69356e13f4111\">SET_OTA</a></div><div class=\"ttdeci\">#define SET_OTA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00040\">GwOutput_mqtt.h:40</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a82391b9a9738bbf392fbad554f7ef527\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a82391b9a9738bbf392fbad554f7ef527\">SET_OTA_ANS</a></div><div class=\"ttdeci\">#define SET_OTA_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00041\">GwOutput_mqtt.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></div><div class=\"ttdoc\">Main gateway class. Manages communication with nodes and sends data to upper layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00120\">EnigmaIOTGateway.h:120</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_af0477251ade40b70ff8c65f1e5478163\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">GwOutput_MQTT::mqtt_queue</a></div><div class=\"ttdeci\">EnigmaIOTRingBuffer&lt; mqtt_queue_item_t &gt; mqtt_queue</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00093\">GwOutput_mqtt.h:93</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_aacd555a37dc6ff614813f365e0d85419\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">EnigmaIOTRingBuffer::size</a></div><div class=\"ttdeci\">int size()</div><div class=\"ttdoc\">Returns actual number of elements that buffer holds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00054\">EnigmaIOTRingBuffer.h:54</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ad225825796a387d127ccd3616ba96ec7\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">GwOutput_MQTT::reconnect</a></div><div class=\"ttdeci\">void reconnect()</div><div class=\"ttdoc\">This is called anytime MQTT client is disconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00235\">GwOutput_mqtt.cpp:235</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_adf39a6783d746e4b54fedb3d59f2dca9\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">GwOutput_MQTT::onDlData</a></div><div class=\"ttdeci\">static void onDlData(char *topic, uint8_t *data, unsigned int len)</div><div class=\"ttdoc\">Function that processes downlink data from network to node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00382\">GwOutput_mqtt.cpp:382</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_ae274ed0194e5685c280ab9148dbcba69\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#ae274ed0194e5685c280ab9148dbcba69\">GET_RSSI</a></div><div class=\"ttdeci\">#define GET_RSSI</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00045\">GwOutput_mqtt.h:45</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a0356f7e08a203093ad1c03e27ac18d0a\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">EnigmaIOTRingBuffer::push</a></div><div class=\"ttdeci\">bool push(Telement *item)</div><div class=\"ttdoc\">Adds a new item to buffer, deleting older element if it is full.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00073\">EnigmaIOTRingBuffer.h:73</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a7949ebf56b8a63b24553fe02d857373d\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">GwOutput_MQTT::mqttPortParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * mqttPortParam</div><div class=\"ttdoc\">Configuration field for MQTT server port.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00088\">GwOutput_mqtt.h:88</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a0ef6cb16df04d8d2dc8b854eec0529f3\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">GwOutput_MQTT::begin</a></div><div class=\"ttdeci\">bool begin()</div><div class=\"ttdoc\">Starts output module.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00203\">GwOutput_mqtt.cpp:203</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a33e3bd471247ea79b53136eef1cd5a3a\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">GwOutput_MQTT::popMQTTqueue</a></div><div class=\"ttdeci\">void popMQTTqueue()</div><div class=\"ttdoc\">Deletes next item in the queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00515\">GwOutput_mqtt.cpp:515</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a02961b325403161b54533152d242696a\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a></div><div class=\"ttdeci\">uint8_t * str2mac(const char *macAddrString, uint8_t *macBytes)</div><div class=\"ttdoc\">Debug helper function that creates MAC address byte array from text representation.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00104\">helperFunctions.cpp:104</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a947ddc46cf5393a05a60422574c68dd0\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a947ddc46cf5393a05a60422574c68dd0\">SET_NAME</a></div><div class=\"ttdeci\">#define SET_NAME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00048\">GwOutput_mqtt.h:48</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a77cde0d6b3da9d409d46bdc85147724a\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a\">TZINFO</a></div><div class=\"ttdeci\">#define TZINFO</div><div class=\"ttdoc\">Time zone.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00020\">EnigmaIoTconfig.h:20</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a0ffae85da5eb98e796fd818c50ac147a\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a0ffae85da5eb98e796fd818c50ac147a\">SET_SLEEP</a></div><div class=\"ttdeci\">#define SET_SLEEP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00039\">GwOutput_mqtt.h:39</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a6c30a4c67499253c238fc8646f3285ef\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">GwOutput_MQTT::mqttServerParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * mqttServerParam</div><div class=\"ttdoc\">Configuration field for MQTT server address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00087\">GwOutput_mqtt.h:87</a></div></div>\n<div class=\"ttc\" id=\"astructmqttgw__config__t_html_a0991f261ed379635918b3e09ee6f9326\"><div class=\"ttname\"><a href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqttgw_config_t::mqtt_server</a></div><div class=\"ttdeci\">char mqtt_server[41]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00064\">GwOutput_mqtt.h:64</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a29ed1ba0c2a04911013795cb11ff13e4\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">EnigmaIOTGatewayClass::getNetworkName</a></div><div class=\"ttdeci\">char * getNetworkName()</div><div class=\"ttdoc\">Gets EnigmaIOT network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00349\">EnigmaIOTGateway.h:349</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_ae2f0ef8f36c0b685940124089172e6c3\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#ae2f0ef8f36c0b685940124089172e6c3\">RESTART_NOTIF</a></div><div class=\"ttdeci\">#define RESTART_NOTIF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00052\">GwOutput_mqtt.h:52</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">OTA</a></div><div class=\"ttdeci\">@ OTA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00068\">NodeList.h:68</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_af1dcc05117b1f2ccb5922611c540e241\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#af1dcc05117b1f2ccb5922611c540e241\">NODE_DATA</a></div><div class=\"ttdeci\">#define NODE_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00053\">GwOutput_mqtt.h:53</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\">RESTART_CONFIRM</a></div><div class=\"ttdeci\">@ RESTART_CONFIRM</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00066\">NodeList.h:66</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aa14110f23c8cfe73c44e1a87382a1081\"><div class=\"ttname\"><a href=\"classNode.html#aa14110f23c8cfe73c44e1a87382a1081\">Node::setRSSI</a></div><div class=\"ttdeci\">void setRSSI(int8_t rssi)</div><div class=\"ttdoc\">Stores last RSSI measurement of Gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00426\">NodeList.h:426</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_ada169ba682e6632f72d62724887f92de\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">GatewayOutput_generic::downlinkCb</a></div><div class=\"ttdeci\">onDlData_t downlinkCb</div><div class=\"ttdoc\">downlink processing function handle</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00034\">GwOutput_generic.h:34</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">RESET</a></div><div class=\"ttdeci\">@ RESET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00058\">NodeList.h:58</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\">OTA_TIMEOUT</a></div><div class=\"ttdeci\">@ OTA_TIMEOUT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00082\">NodeList.h:82</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_af8bca12527bac4b474e2ccb5acd8691e\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#af8bca12527bac4b474e2ccb5acd8691e\">GET_NAME</a></div><div class=\"ttdeci\">#define GET_NAME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00047\">GwOutput_mqtt.h:47</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a9ed6c45eceed73f4dc32d6147957fed5\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a9ed6c45eceed73f4dc32d6147957fed5\">SET_RESET_CONFIG</a></div><div class=\"ttdeci\">#define SET_RESET_CONFIG</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00043\">GwOutput_mqtt.h:43</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a2e46d7b49d143e76a290f06fc6892aa3\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a2e46d7b49d143e76a290f06fc6892aa3\">SET_RESTART_MCU</a></div><div class=\"ttdeci\">#define SET_RESTART_MCU</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00057\">GwOutput_mqtt.h:57</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">RSSI_GET</a></div><div class=\"ttdeci\">@ RSSI_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00060\">NodeList.h:60</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ab095e92704ccc350df9f0767a2b118d0\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">GwOutput_MQTT::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">Should be called regularly for module management.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00433\">GwOutput_mqtt.cpp:433</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_ad900c9546a9b2f0e99d2c7bec781dad7\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">EnigmaIOTGatewayClass::addWiFiManagerParameter</a></div><div class=\"ttdeci\">void addWiFiManagerParameter(AsyncWiFiManagerParameter *p)</div><div class=\"ttdoc\">Adds a parameter to configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00368\">EnigmaIOTGateway.h:368</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">INVALID</a></div><div class=\"ttdeci\">@ INVALID</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00074\">NodeList.h:72</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\">OTA_START_ERROR</a></div><div class=\"ttdeci\">@ OTA_START_ERROR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00078\">NodeList.h:78</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\">OTA_FINISHED</a></div><div class=\"ttdeci\">@ OTA_FINISHED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00084\">NodeList.h:83</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_ac6dad41b3de63cebfef84fc4677cded8\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#ac6dad41b3de63cebfef84fc4677cded8\">GET_USER_DATA</a></div><div class=\"ttdeci\">#define GET_USER_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00051\">GwOutput_mqtt.h:51</a></div></div>\n<div class=\"ttc\" id=\"astructmqtt__queue__item__t_html_a97156ce99d23165972659f5cf86ed570\"><div class=\"ttname\"><a href=\"structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570\">mqtt_queue_item_t::retain</a></div><div class=\"ttdeci\">bool retain</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00081\">GwOutput_mqtt.h:81</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a13c1b13340e4cfcf8fa233d3f941853e\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a13c1b13340e4cfcf8fa233d3f941853e\">GW_STATUS</a></div><div class=\"ttdeci\">#define GW_STATUS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00056\">GwOutput_mqtt.h:56</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\">RSSI_ANS</a></div><div class=\"ttdeci\">@ RSSI_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00061\">NodeList.h:61</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a4000e36c678d2ae166b3689e5703c7e5\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">EnigmaIOTRingBuffer::empty</a></div><div class=\"ttdeci\">bool empty()</div><div class=\"ttdoc\">Checks if buffer is empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00066\">EnigmaIOTRingBuffer.h:66</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a8d48508893d087bd76ac4061b112cce7\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a8d48508893d087bd76ac4061b112cce7\">GET_SLEEP_ANS</a></div><div class=\"ttdeci\">#define GET_SLEEP_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00038\">GwOutput_mqtt.h:38</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a9222adf0c343e915c70317d14dc67778\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">GwOutput_MQTT::outputDataSend</a></div><div class=\"ttdeci\">bool outputDataSend(char *address, char *data, size_t length, GwOutput_data_type_t type=data)</div><div class=\"ttdoc\">Send data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00551\">GwOutput_mqtt.cpp:551</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a77fff82f7baddba1fab736746b21bcd9\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">MAX_MQTT_TOPIC_LEN</a></div><div class=\"ttdeci\">constexpr auto MAX_MQTT_TOPIC_LEN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00074\">GwOutput_mqtt.h:74</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">SLEEP_GET</a></div><div class=\"ttdeci\">@ SLEEP_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00054\">NodeList.h:54</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_ab8124d524ffeb47ab53c5435ac2fe4c8\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">EnigmaIOTRingBuffer::pop</a></div><div class=\"ttdeci\">bool pop()</div><div class=\"ttdoc\">Deletes older item from buffer, if buffer is not empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00106\">EnigmaIOTRingBuffer.h:106</a></div></div>\n<div class=\"ttc\" id=\"astructmqtt__queue__item__t_html_a188c9fd25ec2003a1ac1e677a0b55ea3\"><div class=\"ttname\"><a href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">mqtt_queue_item_t::payload</a></div><div class=\"ttdeci\">char payload[MAX_MQTT_PLD_LEN]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00079\">GwOutput_mqtt.h:79</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a44bf9b184af7520ec127c6b705991c8f\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a44bf9b184af7520ec127c6b705991c8f\">GET_RSSI_ANS</a></div><div class=\"ttdeci\">#define GET_RSSI_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00046\">GwOutput_mqtt.h:46</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a13bd3d7f5d5a221627886a8b4ce29516\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">GwOutput_MQTT::mqttgw_config</a></div><div class=\"ttdeci\">mqttgw_config_t mqttgw_config</div><div class=\"ttdoc\">MQTT server configuration data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00095\">GwOutput_mqtt.h:95</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a3dd72b32f71d5bf46c0c083c3bb9b942\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">EnigmaIOTRingBuffer::front</a></div><div class=\"ttdeci\">Telement * front()</div><div class=\"ttdoc\">Gets a pointer to older item in buffer, if buffer is not empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00125\">EnigmaIOTRingBuffer.h:125</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a523454d3069bcc08356f43906870a8eb\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a523454d3069bcc08356f43906870a8eb\">SET_IDENTIFY</a></div><div class=\"ttdeci\">#define SET_IDENTIFY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00042\">GwOutput_mqtt.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ae4531996cc3ce965edfdd1ca3e6b85d7\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">GwOutput_MQTT::setClock</a></div><div class=\"ttdeci\">void setClock()</div><div class=\"ttdoc\">Synchronizes time over NTP to check certifitate expiration time.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00467\">GwOutput_mqtt.cpp:467</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">USERDATA_GET</a></div><div class=\"ttdeci\">@ USERDATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00070\">NodeList.h:70</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a043021359c728f4265337a8c21edfcdb\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a043021359c728f4265337a8c21edfcdb\">GET_NAME_ANS</a></div><div class=\"ttdeci\">#define GET_NAME_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00049\">GwOutput_mqtt.h:49</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_ad2cbd556e432924a29a3efa1d13668af\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#ad2cbd556e432924a29a3efa1d13668af\">NTP_SERVER_1</a></div><div class=\"ttdeci\">#define NTP_SERVER_1</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00021\">EnigmaIoTconfig.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a446e327328ebbcbe9b20f38f1080b9e6\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">EnigmaIOTGatewayClass::getShouldSave</a></div><div class=\"ttdeci\">bool getShouldSave()</div><div class=\"ttdoc\">Gets flag that indicates if configuration should be saved.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l00055\">EnigmaIOTGateway.cpp:55</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00085\">GwOutput_mqtt.h:85</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\">OTA_OUT_OF_SEQUENCE</a></div><div class=\"ttdeci\">@ OTA_OUT_OF_SEQUENCE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00081\">NodeList.h:81</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a4f9d3fafe897148f4e44e0db74816a9c\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a4f9d3fafe897148f4e44e0db74816a9c\">MQTT_BUFFER_SIZE</a></div><div class=\"ttdeci\">#define MQTT_BUFFER_SIZE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00032\">GwOutput_mqtt.h:32</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">NAME_ANS</a></div><div class=\"ttdeci\">@ NAME_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00063\">NodeList.h:63</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_aabb971124202457b2e8a3627217dd213\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">EnigmaIOTGatewayClass::getNodes</a></div><div class=\"ttdeci\">NodeList * getNodes()</div><div class=\"ttdoc\">Gets nodes data structure.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00600\">EnigmaIOTGateway.h:600</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8cpp_html_afb58b5e941b1e87b27c59c51b730f631\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8cpp.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput</a></div><div class=\"ttdeci\">GwOutput_MQTT GwOutput</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00041\">GwOutput_mqtt.cpp:41</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_abcd4985de3ef6fbe1994af85093ca034\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a></div><div class=\"ttdeci\">EnigmaIOTGatewayClass EnigmaIOTGateway</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l02050\">EnigmaIOTGateway.cpp:2050</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a1ce7f559d24ebc85e5d9070b61e6c559\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">GwOutput_MQTT::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00166\">GwOutput_mqtt.cpp:166</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a364652fab162760bcc7f647933752742\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">GwOutput_MQTT::getMQTTqueue</a></div><div class=\"ttdeci\">mqtt_queue_item_t * getMQTTqueue()</div><div class=\"ttdoc\">Gets next item in the queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00507\">GwOutput_mqtt.cpp:507</a></div></div>\n<div class=\"ttc\" id=\"astructmqtt__queue__item__t_html_a16fd8eb5680730758fbb7d4b22bf94d8\"><div class=\"ttname\"><a href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">mqtt_queue_item_t::topic</a></div><div class=\"ttdeci\">char topic[MAX_MQTT_TOPIC_LEN]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00078\">GwOutput_mqtt.h:78</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_ab5119da5fbd459e355bdcb931bf92fbc\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a></div><div class=\"ttdeci\">enum GwOutput_data_type GwOutput_data_type_t</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_ab8b6dc096f4f731c7d7dc8a6cb46f132\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">GatewayOutput_generic::clientId</a></div><div class=\"ttdeci\">String clientId</div><div class=\"ttdoc\">MQTT clientId.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00044\">GwOutput_generic.h:44</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a56f7002fc97ec92b1145f30ec79a1e84\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">GwOutput_MQTT::outputControlSend</a></div><div class=\"ttdeci\">bool outputControlSend(char *address, uint8_t *data, size_t length)</div><div class=\"ttdoc\">Send control data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00574\">GwOutput_mqtt.cpp:574</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a0c2feee288af6e6c9d13de8804a94128\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a0c2feee288af6e6c9d13de8804a94128\">STATUS_SEND_PERIOD</a></div><div class=\"ttdeci\">const time_t STATUS_SEND_PERIOD</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00059\">GwOutput_mqtt.h:59</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html\">GwOutput_mqtt.h</a></div><div class=\"ttdoc\">MQTT Gateway output module.</div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a0fe4ed2bd219b89e187770cb0ba9fdc3\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">GatewayOutput_generic::gwTopic</a></div><div class=\"ttdeci\">String gwTopic</div><div class=\"ttdoc\">MQTT topic for gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00045\">GwOutput_generic.h:45</a></div></div>\n<div class=\"ttc\" id=\"astructmqttgw__config__t_html_a7739560775997dbbdb6ed76d37b6dbfe\"><div class=\"ttname\"><a href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqttgw_config_t::mqtt_user</a></div><div class=\"ttdeci\">char mqtt_user[21]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00070\">GwOutput_mqtt.h:70</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a24682127079586d71ac858f7e2f78f6f\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">GwOutput_MQTT::mqttUserParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * mqttUserParam</div><div class=\"ttdoc\">Configuration field for MQTT server user name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00089\">GwOutput_mqtt.h:89</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ae1bac550738c7f1a92deb3450c1e929a\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">GwOutput_MQTT::espClient</a></div><div class=\"ttdeci\">WiFiClient espClient</div><div class=\"ttdoc\">TCP client.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00104\">GwOutput_mqtt.h:104</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8cpp_html_a57969f4236bd72eca4fa83155a025085\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8cpp.html#a57969f4236bd72eca4fa83155a025085\">checkMsgType</a></div><div class=\"ttdeci\">control_message_type_t checkMsgType(String data)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00316\">GwOutput_mqtt.cpp:316</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_aa4855724d46b50a35735f9900494b889\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">GatewayOutput_generic::enigmaIotGateway</a></div><div class=\"ttdeci\">EnigmaIOTGatewayClass * enigmaIotGateway</div><div class=\"ttdoc\">Pointer to EnigmaIOT gateway instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00033\">GwOutput_generic.h:33</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\">RESET_ANS</a></div><div class=\"ttdeci\">@ RESET_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00059\">NodeList.h:59</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_ae9ef65fac5a6e3c6594811a7c8ee2291\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#ae9ef65fac5a6e3c6594811a7c8ee2291\">GET_VERSION</a></div><div class=\"ttdeci\">#define GET_VERSION</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00035\">GwOutput_mqtt.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a4cefee4f9feaa563b8e8a725a847e9ac\"><div class=\"ttname\"><a href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">Node::getMacAddress</a></div><div class=\"ttdeci\">uint8_t * getMacAddress()</div><div class=\"ttdoc\">Gets address from Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00128\">NodeList.h:128</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">VERSION</a></div><div class=\"ttdeci\">@ VERSION</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00052\">NodeList.h:52</a></div></div>\n<div class=\"ttc\" id=\"astructmqttgw__config__t_html_ab992a4e4c889751714b8f27fd11fff31\"><div class=\"ttname\"><a href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqttgw_config_t::mqtt_pass</a></div><div class=\"ttdeci\">char mqtt_pass[41]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00071\">GwOutput_mqtt.h:71</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">OTA_ANS</a></div><div class=\"ttdeci\">@ OTA_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00069\">NodeList.h:69</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">NAME_GET</a></div><div class=\"ttdeci\">@ NAME_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00062\">NodeList.h:62</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a4b889e6434caf7abb8dc52796fadb20f\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">GwOutput_MQTT::addMQTTqueue</a></div><div class=\"ttdeci\">bool addMQTTqueue(const char *topic, char *payload, size_t len, bool retain=false)</div><div class=\"ttdoc\">Add MQTT message to queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00484\">GwOutput_mqtt.cpp:484</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html_a088ff06222b9cbc391f2c216b8c689fa\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">GatewayOutput_generic::netName</a></div><div class=\"ttdeci\">String netName</div><div class=\"ttdoc\">EnigmaIOT network name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00043\">GwOutput_generic.h:43</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">lostmessages</a></div><div class=\"ttdeci\">@ lostmessages</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00024\">GwOutput_generic.h:24</a></div></div>\n<div class=\"ttc\" id=\"astructmqttgw__config__t_html_a5a61979dca0bcdab6b0ac8975ed002cd\"><div class=\"ttname\"><a href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqttgw_config_t::mqtt_port</a></div><div class=\"ttdeci\">int mqtt_port</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00068\">GwOutput_mqtt.h:68</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_ae444c69d932744ac6ba80ef8683c414d\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">MAX_MQTT_PLD_LEN</a></div><div class=\"ttdeci\">constexpr auto MAX_MQTT_PLD_LEN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00075\">GwOutput_mqtt.h:75</a></div></div>\n<div class=\"ttc\" id=\"astructmqtt__queue__item__t_html_a62c6546560a1c32ef4beee7366949b71\"><div class=\"ttname\"><a href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">mqtt_queue_item_t::payload_len</a></div><div class=\"ttdeci\">size_t payload_len</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00080\">GwOutput_mqtt.h:80</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ac177228269fbe285eb3b1a1d31764327\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">GwOutput_MQTT::mqtt_client</a></div><div class=\"ttdeci\">PubSubClient mqtt_client</div><div class=\"ttdoc\">MQTT client.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00106\">GwOutput_mqtt.h:106</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_aa085f629e0d58f053325f35c5ae6c2a1\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">GwOutput_MQTT::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig()</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00059\">GwOutput_mqtt.cpp:59</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_aab4a7f7971eeeb4c0fa3af8064006b79\"><div class=\"ttname\"><a href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">NodeList::getNodeFromID</a></div><div class=\"ttdeci\">Node * getNodeFromID(uint16_t nodeId)</div><div class=\"ttdoc\">Gets node that correspond with given nodeId.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00135\">NodeList.cpp:135</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">OTA_CHECK_FAIL</a></div><div class=\"ttdeci\">@ OTA_CHECK_FAIL</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00080\">NodeList.h:80</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a78ee44942fc7c28441d0cd502d1d3d3d\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">MAX_MQTT_QUEUE_SIZE</a></div><div class=\"ttdeci\">static const size_t MAX_MQTT_QUEUE_SIZE</div><div class=\"ttdoc\">Maximum number of MQTT messages to be sent.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00027\">EnigmaIoTconfig.h:27</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a82ea7d9552d7d2c2d977c578587e94dc\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a82ea7d9552d7d2c2d977c578587e94dc\">NODE_STATUS</a></div><div class=\"ttdeci\">#define NODE_STATUS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00055\">GwOutput_mqtt.h:55</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></div><div class=\"ttdeci\">gwInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00075\">EnigmaIOTGateway.h:75</a></div></div>\n<div class=\"ttc\" id=\"aButtonController_8cpp_html_a0a5b20c0a44622656e3028948ca20a47\"><div class=\"ttname\"><a href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a></div><div class=\"ttdeci\">constexpr auto CONFIG_FILE</div><div class=\"ttdoc\">Custom configuration file name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00011\">ButtonController.cpp:11</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTdebug_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a></div><div class=\"ttdoc\">Auxiliary functions for debugging over Serial.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8cpp_html_aee4f7d364dbe6c4b29c462b3306bebe7\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8cpp.html#aee4f7d364dbe6c4b29c462b3306bebe7\">getTopicAddress</a></div><div class=\"ttdeci\">char * getTopicAddress(char *topic, unsigned int &amp;len)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00293\">GwOutput_mqtt.cpp:293</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_ac5c28a5827b5a3b34222c13589adeba7\"><div class=\"ttname\"><a href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a></div><div class=\"ttdeci\">enum control_message_type control_message_type_t</div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">NAME_SET</a></div><div class=\"ttdeci\">@ NAME_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00064\">NodeList.h:64</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_af0ca1b2ce62b76f4729d879144a3183f\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">GwOutput_MQTT::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00101\">GwOutput_mqtt.cpp:101</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">SLEEP_ANS</a></div><div class=\"ttdeci\">@ SLEEP_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00056\">NodeList.h:56</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a2aa30d8c4ad4f2895fefd1b1d425ee66\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a2aa30d8c4ad4f2895fefd1b1d425ee66\">LOST_MESSAGES</a></div><div class=\"ttdeci\">#define LOST_MESSAGES</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00054\">GwOutput_mqtt.h:54</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_ad7c2efab8087395f360a163faecc66eb\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#ad7c2efab8087395f360a163faecc66eb\">SET_USER_DATA</a></div><div class=\"ttdeci\">#define SET_USER_DATA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00050\">GwOutput_mqtt.h:50</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\">OTA_STARTED</a></div><div class=\"ttdeci\">@ OTA_STARTED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00077\">NodeList.h:77</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a783864c965f340fab5d24ccf63acb162\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">GwOutput_MQTT::publishMQTT</a></div><div class=\"ttdeci\">bool publishMQTT(const char *topic, const char *payload, size_t len, bool retain=false)</div><div class=\"ttdoc\">Publishes data over MQTT.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00456\">GwOutput_mqtt.cpp:456</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a7e8363a72c676c15de7221529988ee48\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a7e8363a72c676c15de7221529988ee48\">SET_RESET_ANS</a></div><div class=\"ttdeci\">#define SET_RESET_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00044\">GwOutput_mqtt.h:44</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GwOutput__mqtt_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayMQTT/GwOutput_mqtt.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\">EnigmaIOTGatewayMQTT</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_mqtt.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>MQTT Gateway output module.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>&gt;</code><br />\n<code>#include &lt;PubSubClient.h&gt;</code><br />\n<code>#include &lt;queue&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"dstrootca_8h_source.html\">dstrootca.h</a>&quot;</code><br />\n<code>#include &lt;WiFiClient.h&gt;</code><br />\n</div>\n<p><a href=\"GwOutput__mqtt_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a4f9d3fafe897148f4e44e0db74816a9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a4f9d3fafe897148f4e44e0db74816a9c\">MQTT_BUFFER_SIZE</a>&#160;&#160;&#160;2048</td></tr>\n<tr class=\"separator:a4f9d3fafe897148f4e44e0db74816a9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae9ef65fac5a6e3c6594811a7c8ee2291\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae9ef65fac5a6e3c6594811a7c8ee2291\">GET_VERSION</a>&#160;&#160;&#160;&quot;get/version&quot;</td></tr>\n<tr class=\"separator:ae9ef65fac5a6e3c6594811a7c8ee2291\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bbd404f93aed82bc0d713238fa2bf6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a1bbd404f93aed82bc0d713238fa2bf6b\">GET_VERSION_ANS</a>&#160;&#160;&#160;&quot;result/version&quot;</td></tr>\n<tr class=\"separator:a1bbd404f93aed82bc0d713238fa2bf6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8fa3ce9af2986feed0592ad3f82b0e8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a8fa3ce9af2986feed0592ad3f82b0e8a\">GET_SLEEP</a>&#160;&#160;&#160;&quot;get/sleeptime&quot;</td></tr>\n<tr class=\"separator:a8fa3ce9af2986feed0592ad3f82b0e8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d48508893d087bd76ac4061b112cce7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a8d48508893d087bd76ac4061b112cce7\">GET_SLEEP_ANS</a>&#160;&#160;&#160;&quot;result/sleeptime&quot;</td></tr>\n<tr class=\"separator:a8d48508893d087bd76ac4061b112cce7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ffae85da5eb98e796fd818c50ac147a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a0ffae85da5eb98e796fd818c50ac147a\">SET_SLEEP</a>&#160;&#160;&#160;&quot;set/sleeptime&quot;</td></tr>\n<tr class=\"separator:a0ffae85da5eb98e796fd818c50ac147a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03d78690a77ad7c71da69356e13f4111\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a03d78690a77ad7c71da69356e13f4111\">SET_OTA</a>&#160;&#160;&#160;&quot;set/ota&quot;</td></tr>\n<tr class=\"separator:a03d78690a77ad7c71da69356e13f4111\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a82391b9a9738bbf392fbad554f7ef527\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a82391b9a9738bbf392fbad554f7ef527\">SET_OTA_ANS</a>&#160;&#160;&#160;&quot;result/ota&quot;</td></tr>\n<tr class=\"separator:a82391b9a9738bbf392fbad554f7ef527\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a523454d3069bcc08356f43906870a8eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a523454d3069bcc08356f43906870a8eb\">SET_IDENTIFY</a>&#160;&#160;&#160;&quot;set/identify&quot;</td></tr>\n<tr class=\"separator:a523454d3069bcc08356f43906870a8eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ed6c45eceed73f4dc32d6147957fed5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a9ed6c45eceed73f4dc32d6147957fed5\">SET_RESET_CONFIG</a>&#160;&#160;&#160;&quot;set/reset&quot;</td></tr>\n<tr class=\"separator:a9ed6c45eceed73f4dc32d6147957fed5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7e8363a72c676c15de7221529988ee48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a7e8363a72c676c15de7221529988ee48\">SET_RESET_ANS</a>&#160;&#160;&#160;&quot;result/reset&quot;</td></tr>\n<tr class=\"separator:a7e8363a72c676c15de7221529988ee48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae274ed0194e5685c280ab9148dbcba69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae274ed0194e5685c280ab9148dbcba69\">GET_RSSI</a>&#160;&#160;&#160;&quot;get/rssi&quot;</td></tr>\n<tr class=\"separator:ae274ed0194e5685c280ab9148dbcba69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a44bf9b184af7520ec127c6b705991c8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a44bf9b184af7520ec127c6b705991c8f\">GET_RSSI_ANS</a>&#160;&#160;&#160;&quot;result/rssi&quot;</td></tr>\n<tr class=\"separator:a44bf9b184af7520ec127c6b705991c8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af8bca12527bac4b474e2ccb5acd8691e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#af8bca12527bac4b474e2ccb5acd8691e\">GET_NAME</a>&#160;&#160;&#160;&quot;get/name&quot;</td></tr>\n<tr class=\"separator:af8bca12527bac4b474e2ccb5acd8691e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a947ddc46cf5393a05a60422574c68dd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a947ddc46cf5393a05a60422574c68dd0\">SET_NAME</a>&#160;&#160;&#160;&quot;set/name&quot;</td></tr>\n<tr class=\"separator:a947ddc46cf5393a05a60422574c68dd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a043021359c728f4265337a8c21edfcdb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a043021359c728f4265337a8c21edfcdb\">GET_NAME_ANS</a>&#160;&#160;&#160;&quot;result/name&quot;</td></tr>\n<tr class=\"separator:a043021359c728f4265337a8c21edfcdb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad7c2efab8087395f360a163faecc66eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#ad7c2efab8087395f360a163faecc66eb\">SET_USER_DATA</a>&#160;&#160;&#160;&quot;set/<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>&quot;</td></tr>\n<tr class=\"separator:ad7c2efab8087395f360a163faecc66eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac6dad41b3de63cebfef84fc4677cded8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#ac6dad41b3de63cebfef84fc4677cded8\">GET_USER_DATA</a>&#160;&#160;&#160;&quot;get/<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>&quot;</td></tr>\n<tr class=\"separator:ac6dad41b3de63cebfef84fc4677cded8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae2f0ef8f36c0b685940124089172e6c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae2f0ef8f36c0b685940124089172e6c3\">RESTART_NOTIF</a>&#160;&#160;&#160;&quot;restart&quot;</td></tr>\n<tr class=\"separator:ae2f0ef8f36c0b685940124089172e6c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af1dcc05117b1f2ccb5922611c540e241\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#af1dcc05117b1f2ccb5922611c540e241\">NODE_DATA</a>&#160;&#160;&#160;&quot;data&quot;</td></tr>\n<tr class=\"separator:af1dcc05117b1f2ccb5922611c540e241\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2aa30d8c4ad4f2895fefd1b1d425ee66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a2aa30d8c4ad4f2895fefd1b1d425ee66\">LOST_MESSAGES</a>&#160;&#160;&#160;&quot;debug/<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">lostmessages</a>&quot;</td></tr>\n<tr class=\"separator:a2aa30d8c4ad4f2895fefd1b1d425ee66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a82ea7d9552d7d2c2d977c578587e94dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a82ea7d9552d7d2c2d977c578587e94dc\">NODE_STATUS</a>&#160;&#160;&#160;&quot;status&quot;</td></tr>\n<tr class=\"separator:a82ea7d9552d7d2c2d977c578587e94dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a13c1b13340e4cfcf8fa233d3f941853e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a13c1b13340e4cfcf8fa233d3f941853e\">GW_STATUS</a>&#160;&#160;&#160;&quot;/gateway/<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>&quot;</td></tr>\n<tr class=\"separator:a13c1b13340e4cfcf8fa233d3f941853e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e46d7b49d143e76a290f06fc6892aa3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a2e46d7b49d143e76a290f06fc6892aa3\">SET_RESTART_MCU</a>&#160;&#160;&#160;&quot;set/restart&quot;</td></tr>\n<tr class=\"separator:a2e46d7b49d143e76a290f06fc6892aa3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0c2feee288af6e6c9d13de8804a94128\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a0c2feee288af6e6c9d13de8804a94128\">STATUS_SEND_PERIOD</a> = 300000</td></tr>\n<tr class=\"separator:a0c2feee288af6e6c9d13de8804a94128\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = &quot;/mqtt.json&quot;</td></tr>\n<tr class=\"memdesc:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT outout configuration file name.  <a href=\"GwOutput__mqtt_8h.html#a0a5b20c0a44622656e3028948ca20a47\">More...</a><br /></td></tr>\n<tr class=\"separator:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a77fff82f7baddba1fab736746b21bcd9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">MAX_MQTT_TOPIC_LEN</a> = 100</td></tr>\n<tr class=\"separator:a77fff82f7baddba1fab736746b21bcd9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae444c69d932744ac6ba80ef8683c414d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">MAX_MQTT_PLD_LEN</a> = 2048</td></tr>\n<tr class=\"separator:ae444c69d932744ac6ba80ef8683c414d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb58b5e941b1e87b27c59c51b730f631\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput</a></td></tr>\n<tr class=\"separator:afb58b5e941b1e87b27c59c51b730f631\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>MQTT Gateway output module. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin</dd></dl>\n<p>Module to send and receive EnigmaIOT information from MQTT broker </p>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"af8bca12527bac4b474e2ccb5acd8691e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af8bca12527bac4b474e2ccb5acd8691e\">&#9670;&nbsp;</a></span>GET_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define GET_NAME&#160;&#160;&#160;&quot;get/name&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00047\">47</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a043021359c728f4265337a8c21edfcdb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a043021359c728f4265337a8c21edfcdb\">&#9670;&nbsp;</a></span>GET_NAME_ANS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define GET_NAME_ANS&#160;&#160;&#160;&quot;result/name&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00049\">49</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae274ed0194e5685c280ab9148dbcba69\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae274ed0194e5685c280ab9148dbcba69\">&#9670;&nbsp;</a></span>GET_RSSI</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define GET_RSSI&#160;&#160;&#160;&quot;get/rssi&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00045\">45</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a44bf9b184af7520ec127c6b705991c8f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a44bf9b184af7520ec127c6b705991c8f\">&#9670;&nbsp;</a></span>GET_RSSI_ANS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define GET_RSSI_ANS&#160;&#160;&#160;&quot;result/rssi&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00046\">46</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8fa3ce9af2986feed0592ad3f82b0e8a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8fa3ce9af2986feed0592ad3f82b0e8a\">&#9670;&nbsp;</a></span>GET_SLEEP</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define GET_SLEEP&#160;&#160;&#160;&quot;get/sleeptime&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00037\">37</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8d48508893d087bd76ac4061b112cce7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8d48508893d087bd76ac4061b112cce7\">&#9670;&nbsp;</a></span>GET_SLEEP_ANS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define GET_SLEEP_ANS&#160;&#160;&#160;&quot;result/sleeptime&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00038\">38</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac6dad41b3de63cebfef84fc4677cded8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac6dad41b3de63cebfef84fc4677cded8\">&#9670;&nbsp;</a></span>GET_USER_DATA</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define GET_USER_DATA&#160;&#160;&#160;&quot;get/<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00051\">51</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae9ef65fac5a6e3c6594811a7c8ee2291\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae9ef65fac5a6e3c6594811a7c8ee2291\">&#9670;&nbsp;</a></span>GET_VERSION</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define GET_VERSION&#160;&#160;&#160;&quot;get/version&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00035\">35</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1bbd404f93aed82bc0d713238fa2bf6b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1bbd404f93aed82bc0d713238fa2bf6b\">&#9670;&nbsp;</a></span>GET_VERSION_ANS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define GET_VERSION_ANS&#160;&#160;&#160;&quot;result/version&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00036\">36</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a13c1b13340e4cfcf8fa233d3f941853e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a13c1b13340e4cfcf8fa233d3f941853e\">&#9670;&nbsp;</a></span>GW_STATUS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define GW_STATUS&#160;&#160;&#160;&quot;/gateway/<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00056\">56</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2aa30d8c4ad4f2895fefd1b1d425ee66\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2aa30d8c4ad4f2895fefd1b1d425ee66\">&#9670;&nbsp;</a></span>LOST_MESSAGES</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LOST_MESSAGES&#160;&#160;&#160;&quot;debug/<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">lostmessages</a>&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00054\">54</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4f9d3fafe897148f4e44e0db74816a9c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4f9d3fafe897148f4e44e0db74816a9c\">&#9670;&nbsp;</a></span>MQTT_BUFFER_SIZE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define MQTT_BUFFER_SIZE&#160;&#160;&#160;2048</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00032\">32</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af1dcc05117b1f2ccb5922611c540e241\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af1dcc05117b1f2ccb5922611c540e241\">&#9670;&nbsp;</a></span>NODE_DATA</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define NODE_DATA&#160;&#160;&#160;&quot;data&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00053\">53</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a82ea7d9552d7d2c2d977c578587e94dc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a82ea7d9552d7d2c2d977c578587e94dc\">&#9670;&nbsp;</a></span>NODE_STATUS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define NODE_STATUS&#160;&#160;&#160;&quot;status&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00055\">55</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae2f0ef8f36c0b685940124089172e6c3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae2f0ef8f36c0b685940124089172e6c3\">&#9670;&nbsp;</a></span>RESTART_NOTIF</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define RESTART_NOTIF&#160;&#160;&#160;&quot;restart&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00052\">52</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a523454d3069bcc08356f43906870a8eb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a523454d3069bcc08356f43906870a8eb\">&#9670;&nbsp;</a></span>SET_IDENTIFY</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SET_IDENTIFY&#160;&#160;&#160;&quot;set/identify&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00042\">42</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a947ddc46cf5393a05a60422574c68dd0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a947ddc46cf5393a05a60422574c68dd0\">&#9670;&nbsp;</a></span>SET_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SET_NAME&#160;&#160;&#160;&quot;set/name&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00048\">48</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a03d78690a77ad7c71da69356e13f4111\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a03d78690a77ad7c71da69356e13f4111\">&#9670;&nbsp;</a></span>SET_OTA</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SET_OTA&#160;&#160;&#160;&quot;set/ota&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00040\">40</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a82391b9a9738bbf392fbad554f7ef527\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a82391b9a9738bbf392fbad554f7ef527\">&#9670;&nbsp;</a></span>SET_OTA_ANS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SET_OTA_ANS&#160;&#160;&#160;&quot;result/ota&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00041\">41</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7e8363a72c676c15de7221529988ee48\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7e8363a72c676c15de7221529988ee48\">&#9670;&nbsp;</a></span>SET_RESET_ANS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SET_RESET_ANS&#160;&#160;&#160;&quot;result/reset&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00044\">44</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a9ed6c45eceed73f4dc32d6147957fed5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9ed6c45eceed73f4dc32d6147957fed5\">&#9670;&nbsp;</a></span>SET_RESET_CONFIG</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SET_RESET_CONFIG&#160;&#160;&#160;&quot;set/reset&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00043\">43</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2e46d7b49d143e76a290f06fc6892aa3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2e46d7b49d143e76a290f06fc6892aa3\">&#9670;&nbsp;</a></span>SET_RESTART_MCU</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SET_RESTART_MCU&#160;&#160;&#160;&quot;set/restart&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00057\">57</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0ffae85da5eb98e796fd818c50ac147a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0ffae85da5eb98e796fd818c50ac147a\">&#9670;&nbsp;</a></span>SET_SLEEP</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SET_SLEEP&#160;&#160;&#160;&quot;set/sleeptime&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00039\">39</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad7c2efab8087395f360a163faecc66eb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad7c2efab8087395f360a163faecc66eb\">&#9670;&nbsp;</a></span>SET_USER_DATA</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define SET_USER_DATA&#160;&#160;&#160;&quot;set/<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00050\">50</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0a5b20c0a44622656e3028948ca20a47\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0a5b20c0a44622656e3028948ca20a47\">&#9670;&nbsp;</a></span>CONFIG_FILE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto CONFIG_FILE = &quot;/mqtt.json&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>MQTT outout configuration file name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00061\">61</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"afb58b5e941b1e87b27c59c51b730f631\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afb58b5e941b1e87b27c59c51b730f631\">&#9670;&nbsp;</a></span>GwOutput</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a> GwOutput</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">extern</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00029\">29</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae444c69d932744ac6ba80ef8683c414d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae444c69d932744ac6ba80ef8683c414d\">&#9670;&nbsp;</a></span>MAX_MQTT_PLD_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto MAX_MQTT_PLD_LEN = 2048</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00075\">75</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a77fff82f7baddba1fab736746b21bcd9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a77fff82f7baddba1fab736746b21bcd9\">&#9670;&nbsp;</a></span>MAX_MQTT_TOPIC_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto MAX_MQTT_TOPIC_LEN = 100</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00074\">74</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0c2feee288af6e6c9d13de8804a94128\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0c2feee288af6e6c9d13de8804a94128\">&#9670;&nbsp;</a></span>STATUS_SEND_PERIOD</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const time_t STATUS_SEND_PERIOD = 300000</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00059\">59</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/GwOutput__mqtt_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayMQTT/GwOutput_mqtt.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\">EnigmaIOTGatewayMQTT</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_mqtt.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"GwOutput__mqtt_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#ifndef _GWOUTPUT_MQTT_h</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#define _GWOUTPUT_MQTT_h</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"GwOutput__generic_8h.html\">GwOutput_generic.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;PubSubClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;queue&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"dstrootca_8h.html\">dstrootca.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;WiFiClientSecure.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &lt;WiFiClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif // SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a4f9d3fafe897148f4e44e0db74816a9c\">   32</a></span>&#160;<span class=\"preprocessor\">#define MQTT_BUFFER_SIZE 2048</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"comment\">// DOWNLINK MESSAGES</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#ae9ef65fac5a6e3c6594811a7c8ee2291\">   35</a></span>&#160;<span class=\"preprocessor\">#define GET_VERSION      &quot;get/version&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a1bbd404f93aed82bc0d713238fa2bf6b\">   36</a></span>&#160;<span class=\"preprocessor\">#define GET_VERSION_ANS  &quot;result/version&quot;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a8fa3ce9af2986feed0592ad3f82b0e8a\">   37</a></span>&#160;<span class=\"preprocessor\">#define GET_SLEEP        &quot;get/sleeptime&quot;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a8d48508893d087bd76ac4061b112cce7\">   38</a></span>&#160;<span class=\"preprocessor\">#define GET_SLEEP_ANS    &quot;result/sleeptime&quot;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a0ffae85da5eb98e796fd818c50ac147a\">   39</a></span>&#160;<span class=\"preprocessor\">#define SET_SLEEP        &quot;set/sleeptime&quot;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a03d78690a77ad7c71da69356e13f4111\">   40</a></span>&#160;<span class=\"preprocessor\">#define SET_OTA          &quot;set/ota&quot;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a82391b9a9738bbf392fbad554f7ef527\">   41</a></span>&#160;<span class=\"preprocessor\">#define SET_OTA_ANS      &quot;result/ota&quot;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a523454d3069bcc08356f43906870a8eb\">   42</a></span>&#160;<span class=\"preprocessor\">#define SET_IDENTIFY     &quot;set/identify&quot;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a9ed6c45eceed73f4dc32d6147957fed5\">   43</a></span>&#160;<span class=\"preprocessor\">#define SET_RESET_CONFIG &quot;set/reset&quot;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a7e8363a72c676c15de7221529988ee48\">   44</a></span>&#160;<span class=\"preprocessor\">#define SET_RESET_ANS    &quot;result/reset&quot;</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#ae274ed0194e5685c280ab9148dbcba69\">   45</a></span>&#160;<span class=\"preprocessor\">#define GET_RSSI         &quot;get/rssi&quot;</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a44bf9b184af7520ec127c6b705991c8f\">   46</a></span>&#160;<span class=\"preprocessor\">#define GET_RSSI_ANS     &quot;result/rssi&quot;</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#af8bca12527bac4b474e2ccb5acd8691e\">   47</a></span>&#160;<span class=\"preprocessor\">#define GET_NAME         &quot;get/name&quot;</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a947ddc46cf5393a05a60422574c68dd0\">   48</a></span>&#160;<span class=\"preprocessor\">#define SET_NAME         &quot;set/name&quot;</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a043021359c728f4265337a8c21edfcdb\">   49</a></span>&#160;<span class=\"preprocessor\">#define GET_NAME_ANS     &quot;result/name&quot;</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#ad7c2efab8087395f360a163faecc66eb\">   50</a></span>&#160;<span class=\"preprocessor\">#define SET_USER_DATA    &quot;set/data&quot;</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#ac6dad41b3de63cebfef84fc4677cded8\">   51</a></span>&#160;<span class=\"preprocessor\">#define GET_USER_DATA    &quot;get/data&quot;</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#ae2f0ef8f36c0b685940124089172e6c3\">   52</a></span>&#160;<span class=\"preprocessor\">#define RESTART_NOTIF    &quot;restart&quot;</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#af1dcc05117b1f2ccb5922611c540e241\">   53</a></span>&#160;<span class=\"preprocessor\">#define NODE_DATA        &quot;data&quot;</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a2aa30d8c4ad4f2895fefd1b1d425ee66\">   54</a></span>&#160;<span class=\"preprocessor\">#define LOST_MESSAGES    &quot;debug/lostmessages&quot;</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a82ea7d9552d7d2c2d977c578587e94dc\">   55</a></span>&#160;<span class=\"preprocessor\">#define NODE_STATUS      &quot;status&quot;</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a13c1b13340e4cfcf8fa233d3f941853e\">   56</a></span>&#160;<span class=\"preprocessor\">#define GW_STATUS        &quot;/gateway/status&quot;</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a2e46d7b49d143e76a290f06fc6892aa3\">   57</a></span>&#160;<span class=\"preprocessor\">#define SET_RESTART_MCU  &quot;set/restart&quot;</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160; </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a0c2feee288af6e6c9d13de8804a94128\">   59</a></span>&#160;<span class=\"keyword\">const</span> time_t <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a0c2feee288af6e6c9d13de8804a94128\">STATUS_SEND_PERIOD</a> = 300000;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160; </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a0a5b20c0a44622656e3028948ca20a47\">   61</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = <span class=\"stringliteral\">&quot;/mqtt.json&quot;</span>; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160; </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmqttgw__config__t.html\">   63</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span>{</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">   64</a></span>&#160;    <span class=\"keywordtype\">char</span> mqtt_server[41]; </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    <span class=\"keywordtype\">int</span> mqtt_port = 8883; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">   68</a></span>&#160;    <span class=\"keywordtype\">int</span> mqtt_port = 1883; </div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#endif //SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">   70</a></span>&#160;    <span class=\"keywordtype\">char</span> mqtt_user[21]; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">   71</a></span>&#160;    <span class=\"keywordtype\">char</span> mqtt_pass[41]; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;} <a class=\"code\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a>;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160; </div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">   74</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">MAX_MQTT_TOPIC_LEN</a> = 100;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">   75</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">MAX_MQTT_PLD_LEN</a> = 2048;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmqtt__queue__item__t.html\">   77</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span>{</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">   78</a></span>&#160;    <span class=\"keywordtype\">char</span> topic[<a class=\"code\" href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">MAX_MQTT_TOPIC_LEN</a>]; </div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">   79</a></span>&#160;    <span class=\"keywordtype\">char</span> payload[<a class=\"code\" href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">MAX_MQTT_PLD_LEN</a>]; </div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">   80</a></span>&#160;    <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">payload_len</a>; </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570\">   81</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570\">retain</a>; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;} <a class=\"code\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a>;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160; </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html\">   85</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a> {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">   87</a></span>&#160;    AsyncWiFiManagerParameter* <a class=\"code\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">mqttServerParam</a> = NULL; </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">   88</a></span>&#160;    AsyncWiFiManagerParameter* <a class=\"code\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">mqttPortParam</a> = NULL; </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">   89</a></span>&#160;    AsyncWiFiManagerParameter* <a class=\"code\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">mqttUserParam</a> = NULL; </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">   90</a></span>&#160;    AsyncWiFiManagerParameter* <a class=\"code\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">mqttPassParam</a> = NULL; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    <span class=\"comment\">//std::queue&lt;mqtt_queue_item_t*&gt; mqtt_queue; ///&lt; @brief Output MQTT messages queue. It acts as a FIFO queue</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">   93</a></span>&#160;    <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt;mqtt_queue_item_t&gt;</a> <a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160; </div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">   95</a></span>&#160;    <a class=\"code\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a> <a class=\"code\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a>; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#aa8a75a12858e138be2e92c69f2111038\">   96</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#aa8a75a12858e138be2e92c69f2111038\">shouldSaveConfig</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"preprocessor\">#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    WiFiClientSecure <a class=\"code\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">espClient</a>; </div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    BearSSL::X509List certificate; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;<span class=\"preprocessor\">#endif // ESP8266</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">  104</a></span>&#160;    WiFiClient <a class=\"code\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">espClient</a>; </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">#endif // SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">  106</a></span>&#160;    PubSubClient <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a>; </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">saveConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"comment\">//#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;<span class=\"comment\"></span>    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">setClock</a> ();</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"comment\">//#endif // SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"comment\"></span>    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">reconnect</a> ();</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* topic, <span class=\"keywordtype\">char</span>* payload, <span class=\"keywordtype\">size_t</span> len, <span class=\"keywordtype\">bool</span> retain = <span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160; </div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    <a class=\"code\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a>* <a class=\"code\" href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">getMQTTqueue</a> ();</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160; </div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">popMQTTqueue</a> ();</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">publishMQTT</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* topic, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload, <span class=\"keywordtype\">size_t</span> len, <span class=\"keywordtype\">bool</span> retain = <span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160; </div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">onDlData</a> (<span class=\"keywordtype\">char</span>* topic, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> len);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160; </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"classGwOutput__MQTT.html#a50976e1efb3c1570e3596672ffd83c56\">  169</a></span>&#160;    <a class=\"code\" href=\"classGwOutput__MQTT.html#a50976e1efb3c1570e3596672ffd83c56\">GwOutput_MQTT</a> () :</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        <a class=\"code\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a> (<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">MAX_MQTT_QUEUE_SIZE</a>),</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;#if defined ESP8266 &amp;&amp; defined SECURE_MQTT</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        certificate (DSTroot_CA),</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;#endif <span class=\"comment\">// ESP8266 &amp;&amp; SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        <a class=\"code\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a> (<a class=\"code\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">espClient</a>) {}</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160; </div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">configManagerStart</a> (<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>* enigmaIotGw);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160; </div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160; </div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">begin</a> ();</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160; </div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">loadConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160; </div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">outputControlSend</a> (<span class=\"keywordtype\">char</span>* address, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length);</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160; </div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">newNodeSend</a> (<span class=\"keywordtype\">char</span>* address, uint16_t node_id);</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160; </div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">nodeDisconnectedSend</a> (<span class=\"keywordtype\">char</span>* address, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason);</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160; </div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">outputDataSend</a> (<span class=\"keywordtype\">char</span>* address, <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length, <a class=\"code\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a> type = <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160; </div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160; </div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;    <span class=\"keywordtype\">bool</span> rawMsgSend (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* topic, <span class=\"keywordtype\">char</span>* payload, <span class=\"keywordtype\">size_t</span> len, <span class=\"keywordtype\">bool</span> retain);</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">loop</a> ();</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160; </div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"keyword\">extern</span> <a class=\"code\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a> <a class=\"code\" href=\"GwOutput__mqtt_8h.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput</a>;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160; </div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;<span class=\"preprocessor\">#endif // _GWOUTPUT_MQTT_h</span></div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a7c75a452f70d201c2d35a5394cc61f6a\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">GwOutput_MQTT::nodeDisconnectedSend</a></div><div class=\"ttdeci\">bool nodeDisconnectedSend(char *address, gwInvalidateReason_t reason)</div><div class=\"ttdoc\">Send node disconnection notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00696\">GwOutput_mqtt.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a5e077c236ed77f61ca1a7ab6067cf73e\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">GwOutput_MQTT::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart(EnigmaIOTGatewayClass *enigmaIotGw)</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00043\">GwOutput_mqtt.cpp:43</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ad4d784744aeee89199092987f9ba5c53\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">GwOutput_MQTT::mqttPassParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * mqttPassParam</div><div class=\"ttdoc\">Configuration field for MQTT server password.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00090\">GwOutput_mqtt.h:90</a></div></div>\n<div class=\"ttc\" id=\"astructmqtt__queue__item__t_html\"><div class=\"ttname\"><a href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00077\">GwOutput_mqtt.h:77</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a3d8f3d74fcf2588278651a3b4f410c1c\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">GwOutput_MQTT::newNodeSend</a></div><div class=\"ttdeci\">bool newNodeSend(char *address, uint16_t node_id)</div><div class=\"ttdoc\">Send new node notification.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00678\">GwOutput_mqtt.cpp:678</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; mqtt_queue_item_t &gt;</a></div></div>\n<div class=\"ttc\" id=\"aclassGatewayOutput__generic_html\"><div class=\"ttname\"><a href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00031\">GwOutput_generic.h:31</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></div><div class=\"ttdoc\">Main gateway class. Manages communication with nodes and sends data to upper layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00120\">EnigmaIOTGateway.h:120</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_af0477251ade40b70ff8c65f1e5478163\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">GwOutput_MQTT::mqtt_queue</a></div><div class=\"ttdeci\">EnigmaIOTRingBuffer&lt; mqtt_queue_item_t &gt; mqtt_queue</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00093\">GwOutput_mqtt.h:93</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html\">GwOutput_generic.h</a></div><div class=\"ttdoc\">Generic Gateway output module template.</div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ad225825796a387d127ccd3616ba96ec7\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">GwOutput_MQTT::reconnect</a></div><div class=\"ttdeci\">void reconnect()</div><div class=\"ttdoc\">This is called anytime MQTT client is disconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00235\">GwOutput_mqtt.cpp:235</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_adf39a6783d746e4b54fedb3d59f2dca9\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">GwOutput_MQTT::onDlData</a></div><div class=\"ttdeci\">static void onDlData(char *topic, uint8_t *data, unsigned int len)</div><div class=\"ttdoc\">Function that processes downlink data from network to node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00382\">GwOutput_mqtt.cpp:382</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a7949ebf56b8a63b24553fe02d857373d\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">GwOutput_MQTT::mqttPortParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * mqttPortParam</div><div class=\"ttdoc\">Configuration field for MQTT server port.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00088\">GwOutput_mqtt.h:88</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a0ef6cb16df04d8d2dc8b854eec0529f3\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">GwOutput_MQTT::begin</a></div><div class=\"ttdeci\">bool begin()</div><div class=\"ttdoc\">Starts output module.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00203\">GwOutput_mqtt.cpp:203</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a33e3bd471247ea79b53136eef1cd5a3a\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">GwOutput_MQTT::popMQTTqueue</a></div><div class=\"ttdeci\">void popMQTTqueue()</div><div class=\"ttdoc\">Deletes next item in the queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00515\">GwOutput_mqtt.cpp:515</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a6c30a4c67499253c238fc8646f3285ef\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">GwOutput_MQTT::mqttServerParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * mqttServerParam</div><div class=\"ttdoc\">Configuration field for MQTT server address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00087\">GwOutput_mqtt.h:87</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ab095e92704ccc350df9f0767a2b118d0\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">GwOutput_MQTT::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">Should be called regularly for module management.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00433\">GwOutput_mqtt.cpp:433</a></div></div>\n<div class=\"ttc\" id=\"astructmqtt__queue__item__t_html_a97156ce99d23165972659f5cf86ed570\"><div class=\"ttname\"><a href=\"structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570\">mqtt_queue_item_t::retain</a></div><div class=\"ttdeci\">bool retain</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00081\">GwOutput_mqtt.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a9222adf0c343e915c70317d14dc67778\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">GwOutput_MQTT::outputDataSend</a></div><div class=\"ttdeci\">bool outputDataSend(char *address, char *data, size_t length, GwOutput_data_type_t type=data)</div><div class=\"ttdoc\">Send data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00551\">GwOutput_mqtt.cpp:551</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a77fff82f7baddba1fab736746b21bcd9\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">MAX_MQTT_TOPIC_LEN</a></div><div class=\"ttdeci\">constexpr auto MAX_MQTT_TOPIC_LEN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00074\">GwOutput_mqtt.h:74</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a13bd3d7f5d5a221627886a8b4ce29516\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">GwOutput_MQTT::mqttgw_config</a></div><div class=\"ttdeci\">mqttgw_config_t mqttgw_config</div><div class=\"ttdoc\">MQTT server configuration data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00095\">GwOutput_mqtt.h:95</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ae4531996cc3ce965edfdd1ca3e6b85d7\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">GwOutput_MQTT::setClock</a></div><div class=\"ttdeci\">void setClock()</div><div class=\"ttdoc\">Synchronizes time over NTP to check certifitate expiration time.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00467\">GwOutput_mqtt.cpp:467</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_aa8a75a12858e138be2e92c69f2111038\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#aa8a75a12858e138be2e92c69f2111038\">GwOutput_MQTT::shouldSaveConfig</a></div><div class=\"ttdeci\">bool shouldSaveConfig</div><div class=\"ttdoc\">Flag to indicate if configuration should be saved.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00096\">GwOutput_mqtt.h:96</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a0a5b20c0a44622656e3028948ca20a47\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a></div><div class=\"ttdeci\">constexpr auto CONFIG_FILE</div><div class=\"ttdoc\">MQTT outout configuration file name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00061\">GwOutput_mqtt.h:61</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00085\">GwOutput_mqtt.h:85</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a1ce7f559d24ebc85e5d9070b61e6c559\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">GwOutput_MQTT::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00166\">GwOutput_mqtt.cpp:166</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_afb58b5e941b1e87b27c59c51b730f631\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput</a></div><div class=\"ttdeci\">GwOutput_MQTT GwOutput</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__dummy_8cpp_source.html#l00029\">GwOutput_dummy.cpp:29</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a364652fab162760bcc7f647933752742\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">GwOutput_MQTT::getMQTTqueue</a></div><div class=\"ttdeci\">mqtt_queue_item_t * getMQTTqueue()</div><div class=\"ttdoc\">Gets next item in the queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00507\">GwOutput_mqtt.cpp:507</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_ab5119da5fbd459e355bdcb931bf92fbc\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a></div><div class=\"ttdeci\">enum GwOutput_data_type GwOutput_data_type_t</div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a56f7002fc97ec92b1145f30ec79a1e84\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">GwOutput_MQTT::outputControlSend</a></div><div class=\"ttdeci\">bool outputControlSend(char *address, uint8_t *data, size_t length)</div><div class=\"ttdoc\">Send control data from nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00574\">GwOutput_mqtt.cpp:574</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_a0c2feee288af6e6c9d13de8804a94128\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#a0c2feee288af6e6c9d13de8804a94128\">STATUS_SEND_PERIOD</a></div><div class=\"ttdeci\">const time_t STATUS_SEND_PERIOD</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00059\">GwOutput_mqtt.h:59</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a50976e1efb3c1570e3596672ffd83c56\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a50976e1efb3c1570e3596672ffd83c56\">GwOutput_MQTT::GwOutput_MQTT</a></div><div class=\"ttdeci\">GwOutput_MQTT()</div><div class=\"ttdoc\">Constructor to initialize MQTT client.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00169\">GwOutput_mqtt.h:169</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a24682127079586d71ac858f7e2f78f6f\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">GwOutput_MQTT::mqttUserParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * mqttUserParam</div><div class=\"ttdoc\">Configuration field for MQTT server user name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00089\">GwOutput_mqtt.h:89</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ae1bac550738c7f1a92deb3450c1e929a\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">GwOutput_MQTT::espClient</a></div><div class=\"ttdeci\">WiFiClient espClient</div><div class=\"ttdoc\">TCP client.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00104\">GwOutput_mqtt.h:104</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a4b889e6434caf7abb8dc52796fadb20f\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">GwOutput_MQTT::addMQTTqueue</a></div><div class=\"ttdeci\">bool addMQTTqueue(const char *topic, char *payload, size_t len, bool retain=false)</div><div class=\"ttdoc\">Add MQTT message to queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00484\">GwOutput_mqtt.cpp:484</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__mqtt_8h_html_ae444c69d932744ac6ba80ef8683c414d\"><div class=\"ttname\"><a href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">MAX_MQTT_PLD_LEN</a></div><div class=\"ttdeci\">constexpr auto MAX_MQTT_PLD_LEN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00075\">GwOutput_mqtt.h:75</a></div></div>\n<div class=\"ttc\" id=\"astructmqtt__queue__item__t_html_a62c6546560a1c32ef4beee7366949b71\"><div class=\"ttname\"><a href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">mqtt_queue_item_t::payload_len</a></div><div class=\"ttdeci\">size_t payload_len</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00080\">GwOutput_mqtt.h:80</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_ac177228269fbe285eb3b1a1d31764327\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">GwOutput_MQTT::mqtt_client</a></div><div class=\"ttdeci\">PubSubClient mqtt_client</div><div class=\"ttdoc\">MQTT client.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00106\">GwOutput_mqtt.h:106</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_aa085f629e0d58f053325f35c5ae6c2a1\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">GwOutput_MQTT::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig()</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00059\">GwOutput_mqtt.cpp:59</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a78ee44942fc7c28441d0cd502d1d3d3d\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">MAX_MQTT_QUEUE_SIZE</a></div><div class=\"ttdeci\">static const size_t MAX_MQTT_QUEUE_SIZE</div><div class=\"ttdoc\">Maximum number of MQTT messages to be sent.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00027\">EnigmaIoTconfig.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a></div><div class=\"ttdoc\">Library to build a gateway for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></div><div class=\"ttdeci\">gwInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00075\">EnigmaIOTGateway.h:75</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_af0ca1b2ce62b76f4729d879144a3183f\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">GwOutput_MQTT::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00101\">GwOutput_mqtt.cpp:101</a></div></div>\n<div class=\"ttc\" id=\"astructmqttgw__config__t_html\"><div class=\"ttname\"><a href=\"structmqttgw__config__t.html\">mqttgw_config_t</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8h_source.html#l00063\">GwOutput_mqtt.h:63</a></div></div>\n<div class=\"ttc\" id=\"adstrootca_8h_html\"><div class=\"ttname\"><a href=\"dstrootca_8h.html\">dstrootca.h</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassGwOutput__MQTT_html_a783864c965f340fab5d24ccf63acb162\"><div class=\"ttname\"><a href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">GwOutput_MQTT::publishMQTT</a></div><div class=\"ttdeci\">bool publishMQTT(const char *topic, const char *payload, size_t len, bool retain=false)</div><div class=\"ttdoc\">Publishes data over MQTT.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__mqtt_8cpp_source.html#l00456\">GwOutput_mqtt.cpp:456</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/LICENSE_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: LICENSE.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">LICENSE.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/LedController_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Led-Controller/LedController.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_56fe63de1287a706a7081958f8373778.html\">EnigmaIOT-Led-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">LedController.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;functional&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"LedController_8h_source.html\">LedController.h</a>&quot;</code><br />\n</div>\n<p><a href=\"LedController_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"LedController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = &quot;/customconf.json&quot;</td></tr>\n<tr class=\"memdesc:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Custom configuration file name.  <a href=\"LedController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">More...</a><br /></td></tr>\n<tr class=\"separator:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aadbacb12de89507a2f1923e84c9f42da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a> = &quot;led&quot;</td></tr>\n<tr class=\"separator:aadbacb12de89507a2f1923e84c9f42da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab3e9a146188c1ca883d30631455406b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a> = &quot;cmd&quot;</td></tr>\n<tr class=\"separator:ab3e9a146188c1ca883d30631455406b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"ab3e9a146188c1ca883d30631455406b9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab3e9a146188c1ca883d30631455406b9\">&#9670;&nbsp;</a></span>commandKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* commandKey = &quot;cmd&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8cpp_source.html#l00019\">19</a> of file <a class=\"el\" href=\"LedController_8cpp_source.html\">LedController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0a5b20c0a44622656e3028948ca20a47\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0a5b20c0a44622656e3028948ca20a47\">&#9670;&nbsp;</a></span>CONFIG_FILE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto CONFIG_FILE = &quot;/customconf.json&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Custom configuration file name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8cpp_source.html#l00011\">11</a> of file <a class=\"el\" href=\"LedController_8cpp_source.html\">LedController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aadbacb12de89507a2f1923e84c9f42da\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aadbacb12de89507a2f1923e84c9f42da\">&#9670;&nbsp;</a></span>ledKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* ledKey = &quot;led&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8cpp_source.html#l00018\">18</a> of file <a class=\"el\" href=\"LedController_8cpp_source.html\">LedController.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/LedController_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Led-Controller/LedController.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_56fe63de1287a706a7081958f8373778.html\">EnigmaIOT-Led-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">LedController.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"LedController_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160; </div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"LedController_8h.html\">LedController.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160; </div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"keyword\">using namespace </span>std;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"keyword\">using namespace </span>placeholders;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\"><a class=\"line\" href=\"LedController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">   11</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"LedController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = <span class=\"stringliteral\">&quot;/customconf.json&quot;</span>; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"comment\">// You may add some global variables you need here,</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// like serial port instances, I2C, etc</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\"><a class=\"line\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">   18</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a> = <span class=\"stringliteral\">&quot;led&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">   19</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a> = <span class=\"stringliteral\">&quot;cmd&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160; </div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;    <span class=\"comment\">// Process incoming messages here</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;    <span class=\"comment\">// They are normally encoded as MsgPack so you can confert them to JSON very easily</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;    <span class=\"comment\">// Check command type</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    <span class=\"keywordflow\">if</span> (command != <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">nodeMessageType_t::DOWNSTREAM_DATA_GET</a> &amp;&amp; command != <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">nodeMessageType_t::DOWNSTREAM_DATA_SET</a>) {</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong message type&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;    <span class=\"comment\">// Check payload encoding</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;    <span class=\"keywordflow\">if</span> (payloadEncoding != <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>) {</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong payload encoding&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160; </div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    <span class=\"comment\">// Decode payload</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;    DynamicJsonDocument doc (256);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;    uint8_t tempBuffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160; </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    memcpy (tempBuffer, buffer, length);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;    DeserializationError error = deserializeMsgPack (doc, tempBuffer, length);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    <span class=\"comment\">// Check decoding</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;    <span class=\"keywordflow\">if</span> (error != DeserializationError::Ok) {</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error decoding command: %s&quot;</span>, error.c_str ());</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Command: %d = %s&quot;</span>, command, command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">nodeMessageType_t::DOWNSTREAM_DATA_GET</a> ? <span class=\"stringliteral\">&quot;GET&quot;</span> : <span class=\"stringliteral\">&quot;SET&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;    <span class=\"comment\">// Dump debug data</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <span class=\"keywordtype\">size_t</span> strLen = measureJson (doc) + 1;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    <span class=\"keywordtype\">char</span>* strBuffer = (<span class=\"keywordtype\">char</span>*)malloc (strLen);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    serializeJson (doc, strBuffer, strLen);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, strBuffer);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    free (strBuffer);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    <span class=\"comment\">// Check cmd field on JSON data</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    <span class=\"keywordflow\">if</span> (!doc.containsKey (<a class=\"code\" href=\"LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong format&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160; </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    <span class=\"comment\">// Get state</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;    <span class=\"keywordflow\">if</span> (command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">nodeMessageType_t::DOWNSTREAM_DATA_GET</a>) {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keywordflow\">if</span> (!strcmp (doc[<a class=\"code\" href=\"LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>], <a class=\"code\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Request LED status. LED = %s&quot;</span>, led == <a class=\"code\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">_LED_ON</a> ? <span class=\"stringliteral\">&quot;ON&quot;</span> : <span class=\"stringliteral\">&quot;OFF&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;            <span class=\"keywordflow\">if</span> (!sendLedStatus ()) {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending LED status&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160; </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    <span class=\"comment\">// Set state</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    <span class=\"keywordflow\">if</span> (command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">nodeMessageType_t::DOWNSTREAM_DATA_SET</a>) {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        <span class=\"keywordflow\">if</span> (!strcmp (doc[<a class=\"code\" href=\"LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>], <a class=\"code\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;            <span class=\"keywordflow\">if</span> (doc.containsKey (<a class=\"code\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                <span class=\"keywordflow\">if</span> (doc[<a class=\"code\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a>].as&lt;int&gt; () == 1) {</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                    led = <a class=\"code\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">_LED_ON</a>;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (doc[<a class=\"code\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a>].as&lt;int&gt; () == 0) {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                    led = <a class=\"code\" href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">_LED_OFF</a>;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                    DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong LED value: %d&quot;</span>, doc[<a class=\"code\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a>].as&lt;int&gt; ());</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Set LED status to %s&quot;</span>, led == <a class=\"code\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">_LED_ON</a> ? <span class=\"stringliteral\">&quot;ON&quot;</span> : <span class=\"stringliteral\">&quot;OFF&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong format&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160; </div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;            <span class=\"comment\">// Confirm command execution with send state</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;            <span class=\"keywordflow\">if</span> (!sendLedStatus ()) {</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending LED status&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160; </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a\">  105</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a\">CONTROLLER_CLASS_NAME::sendLedStatus</a> () {</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (2);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160; </div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    json[<a class=\"code\" href=\"LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>] = <a class=\"code\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a>;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    json[<a class=\"code\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a>] = led ? <a class=\"code\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">_LED_ON</a> : <a class=\"code\" href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">_LED_OFF</a>;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160; </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    <span class=\"keywordflow\">return</span> sendJson (json);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160; </div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result) {</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"comment\">// Respond to command with a result: true if successful, false if failed </span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160; </div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a> () {</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160; </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <span class=\"comment\">// Register every HAEntity discovery function here. As many as you need</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    addHACall (std::bind (&amp;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a>, <span class=\"keyword\">this</span>));</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    addHACall (std::bind (&amp;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a\">CONTROLLER_CLASS_NAME::sendLedStatus</a>, <span class=\"keyword\">this</span>));</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160; </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160; </div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    enigmaIotNode = node;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    <span class=\"comment\">// You do node setup here. Use it as it was the normal setup() Arduino function</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    pinMode (<a class=\"code\" href=\"LedController_8h.html#ab4553be4db9860d940f81d7447173b2f\">LED_PIN</a>, OUTPUT);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    digitalWrite (<a class=\"code\" href=\"LedController_8h.html#ab4553be4db9860d940f81d7447173b2f\">LED_PIN</a>, <a class=\"code\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">_LED_ON</a>);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"comment\">// Send a &#39;hello&#39; message when initalizing is finished</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    sendStartAnouncement ();</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;    sendLedStatus ();</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Finish begin&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160; </div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    <span class=\"comment\">// If your node should sleep after sending data do all remaining tasks here</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160; </div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a> () {</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160; </div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    <span class=\"comment\">// If your node stays allways awake do your periodic task here</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    digitalWrite (<a class=\"code\" href=\"LedController_8h.html#ab4553be4db9860d940f81d7447173b2f\">LED_PIN</a>, led);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a> () {</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    <span class=\"comment\">// It your class uses dynamic data free it up here</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;    <span class=\"comment\">// This is normally not needed but it is a good practice</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160; </div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a> () {</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration start ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    <span class=\"comment\">// If you need to add custom configuration parameters do it here</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160; </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration result ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;    <span class=\"comment\">// You can read configuration paramenter values here</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160; </div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;    <span class=\"comment\">// If you need to read custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160; </div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    <span class=\"comment\">// If you need to save custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160; </div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY   </span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"comment\">// Repeat this method for every entity</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a> () {</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;    <span class=\"comment\">// Select corresponding HAEntiny type</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;    <a class=\"code\" href=\"classHASwitch.html\">HASwitch</a>* haEntity = <span class=\"keyword\">new</span> <a class=\"code\" href=\"classHASwitch.html\">HASwitch</a> ();</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160; </div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;    uint8_t* msgPackBuffer;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160; </div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;    <span class=\"keywordflow\">if</span> (!haEntity) {</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;JSON object instance does not exist&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160; </div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;    <span class=\"comment\">// Add your characteristics here</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;    <span class=\"comment\">// There is no need to futher modify this function</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160; </div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;    <span class=\"comment\">//haEntity-&gt;setNameSufix (&quot;switch&quot;);</span></div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">setPayloadOff</a> (<span class=\"stringliteral\">&quot;{\\&quot;cmd\\&quot;:\\&quot;led\\&quot;,\\&quot;led\\&quot;:0}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">setPayloadOn</a> (<span class=\"stringliteral\">&quot;{\\&quot;cmd\\&quot;:\\&quot;led\\&quot;,\\&quot;led\\&quot;:1}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">setValueField</a> (<span class=\"stringliteral\">&quot;led&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">setStateOff</a> (0);</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">setStateOn</a> (1);</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160; </div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160; </div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;    <span class=\"keywordtype\">size_t</span> bufferLen = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ();</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160; </div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;    msgPackBuffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160; </div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;    <span class=\"keywordtype\">size_t</span> len = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (bufferLen, msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160; </div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Resulting MSG pack length: %d&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160; </div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;    <span class=\"keywordflow\">if</span> (!sendHADiscovery (msgPackBuffer, len)) {</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending HA discovery message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160; </div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;    <span class=\"keywordflow\">if</span> (haEntity) {</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        <span class=\"keyword\">delete</span> (haEntity);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160; </div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;    <span class=\"keywordflow\">if</span> (msgPackBuffer) {</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;        free (msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aLedController_8cpp_html_a0a5b20c0a44622656e3028948ca20a47\"><div class=\"ttname\"><a href=\"LedController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a></div><div class=\"ttdeci\">constexpr auto CONFIG_FILE</div><div class=\"ttdoc\">Custom configuration file name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8cpp_source.html#l00011\">LedController.cpp:11</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_ad299ecdb73519da56e2f5439941af544\"><div class=\"ttname\"><a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">HAEntity::measureMessage</a></div><div class=\"ttdeci\">size_t measureMessage()</div><div class=\"ttdoc\">Gets needed buffer size for discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00217\">haEntity.h:217</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a64140dc1e3e041eafbcd6eca04abb9ef\"><div class=\"ttname\"><a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">HAEntity::getAnounceMessage</a></div><div class=\"ttdeci\">size_t getAnounceMessage(int bufferlen, uint8_t *buffer)</div><div class=\"ttdoc\">Gets entity anounce message to be sent over EnigmaIOT message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00153\">haEntity.h:153</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae744508f79e2bdfcc7352908d537a671\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop() override</div><div class=\"ttdoc\">This should be called periodically for module handling.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00053\">ButtonController.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab5ec6ad2c5cd0f6edfb7635aba862915\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a></div><div class=\"ttdeci\">void buildHADiscovery()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00124\">ButtonController.cpp:124</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00044\">EnigmaIOTGateway.h:44</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00042\">EnigmaIOTGateway.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a6fc95acd652b504ae0e342f7ce5450c3\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart() override</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00103\">ButtonController.cpp:103</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_aa59604bf62e63caaf3dcd6a2ad67814f\"><div class=\"ttname\"><a href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">HASwitch::setStateOn</a></div><div class=\"ttdeci\">void setStateOn(const char *payload)</div><div class=\"ttdoc\">The payload that represents the on state. Used when value that represents on state in the state_topic...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00034\">haSwitch.cpp:34</a></div></div>\n<div class=\"ttc\" id=\"aLedController_8h_html_af5793e03d17141eff8c3dc885f6cd0ea\"><div class=\"ttname\"><a href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">_LED_ON</a></div><div class=\"ttdeci\">#define _LED_ON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8h_source.html#l00030\">LedController.h:30</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a47fedfe44e3cd9d8055adddce8b2b40a\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a\">CONTROLLER_CLASS_NAME::sendLedStatus</a></div><div class=\"ttdeci\">bool sendLedStatus()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8cpp_source.html#l00105\">LedController.cpp:105</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00098\">ButtonController.cpp:98</a></div></div>\n<div class=\"ttc\" id=\"aLedController_8cpp_html_aadbacb12de89507a2f1923e84c9f42da\"><div class=\"ttname\"><a href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">ledKey</a></div><div class=\"ttdeci\">const char * ledKey</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8cpp_source.html#l00018\">LedController.cpp:18</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html\"><div class=\"ttname\"><a href=\"classHASwitch.html\">HASwitch</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8h_source.html#l00094\">haSwitch.h:94</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a8498809d5a4ba56039c8397e1c22f272\"><div class=\"ttname\"><a href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">HASwitch::setStateOff</a></div><div class=\"ttdeci\">void setStateOff(const char *payload)</div><div class=\"ttdoc\">The payload that represents the off state. Used when value that represents off state in the state_top...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00040\">haSwitch.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_ad34555ca78f7d9c9ccd49139751ed831\"><div class=\"ttname\"><a href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">HASwitch::setPayloadOff</a></div><div class=\"ttdeci\">void setPayloadOff(const char *payload)</div><div class=\"ttdoc\">The payload that represents off state. If specified, will be used for both comparing to the value in ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00020\">haSwitch.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aLedController_8cpp_html_ab3e9a146188c1ca883d30631455406b9\"><div class=\"ttname\"><a href=\"LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a></div><div class=\"ttdeci\">const char * commandKey</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8cpp_source.html#l00019\">LedController.cpp:19</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4a58511842391487187927dd1b87a0dc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig() override</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00119\">ButtonController.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00031\">ButtonController.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"aLedController_8h_html\"><div class=\"ttname\"><a href=\"LedController_8h.html\">LedController.h</a></div></div>\n<div class=\"ttc\" id=\"aLedController_8h_html_ab4553be4db9860d940f81d7447173b2f\"><div class=\"ttname\"><a href=\"LedController_8h.html#ab4553be4db9860d940f81d7447173b2f\">LED_PIN</a></div><div class=\"ttdeci\">#define LED_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8h_source.html#l00029\">LedController.h:29</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a68bf2951e6f5ba11894856104e062e6e\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result) override</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00026\">ButtonController.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a9fc25e3bff52d9d4a642e5a604dd7c44\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status) override</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00109\">ButtonController.cpp:109</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a58d4755d08863514f81805d29d96605b\"><div class=\"ttname\"><a href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">HASwitch::setPayloadOn</a></div><div class=\"ttdeci\">void setPayloadOn(const char *payload)</div><div class=\"ttdoc\">The payload that represents on state. If specified, will be used for both comparing to the value in t...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00014\">haSwitch.cpp:14</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00040\">ButtonController.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a237b5b70434642df1031dac738955634\"><div class=\"ttname\"><a href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">HASwitch::setValueField</a></div><div class=\"ttdeci\">void setValueField(const char *payload)</div><div class=\"ttdoc\">Defines a json key to extract device’s state from the state_topic. To determine the switches’s state ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00054\">haSwitch.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"aLedController_8h_html_af88429de4c8d15fc065a7ea1c07bedde\"><div class=\"ttname\"><a href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">_LED_OFF</a></div><div class=\"ttdeci\">#define _LED_OFF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8h_source.html#l00031\">LedController.h:31</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a440e2979ce22f7fac243f6063469db6c\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override</div><div class=\"ttdoc\">Called to process a downlink command.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00019\">ButtonController.cpp:19</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab2dd07a8fecca7f083f2776dbc294dc9\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig() override</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00114\">ButtonController.cpp:114</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/LedController_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Led-Controller/LedController.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_56fe63de1287a706a7081958f8373778.html\">EnigmaIOT-Led-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">LedController.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n</div>\n<p><a href=\"LedController_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"LedController_8h.html#a8257556540571a0fe1f5f05eb434af87\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;LedController</td></tr>\n<tr class=\"separator:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab4553be4db9860d940f81d7447173b2f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"LedController_8h.html#ab4553be4db9860d940f81d7447173b2f\">LED_PIN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:ab4553be4db9860d940f81d7447173b2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af5793e03d17141eff8c3dc885f6cd0ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">_LED_ON</a>&#160;&#160;&#160;LOW</td></tr>\n<tr class=\"separator:af5793e03d17141eff8c3dc885f6cd0ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af88429de4c8d15fc065a7ea1c07bedde\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">_LED_OFF</a>&#160;&#160;&#160;!<a class=\"el\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">_LED_ON</a></td></tr>\n<tr class=\"separator:af88429de4c8d15fc065a7ea1c07bedde\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"LedController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = &quot;LED <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>&quot;</td></tr>\n<tr class=\"separator:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"af88429de4c8d15fc065a7ea1c07bedde\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af88429de4c8d15fc065a7ea1c07bedde\">&#9670;&nbsp;</a></span>_LED_OFF</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define _LED_OFF&#160;&#160;&#160;!<a class=\"el\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">_LED_ON</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8h_source.html#l00031\">31</a> of file <a class=\"el\" href=\"LedController_8h_source.html\">LedController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af5793e03d17141eff8c3dc885f6cd0ea\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af5793e03d17141eff8c3dc885f6cd0ea\">&#9670;&nbsp;</a></span>_LED_ON</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define _LED_ON&#160;&#160;&#160;LOW</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8h_source.html#l00030\">30</a> of file <a class=\"el\" href=\"LedController_8h_source.html\">LedController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8257556540571a0fe1f5f05eb434af87\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8257556540571a0fe1f5f05eb434af87\">&#9670;&nbsp;</a></span>CONTROLLER_CLASS_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;LedController</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8h_source.html#l00019\">19</a> of file <a class=\"el\" href=\"LedController_8h_source.html\">LedController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab4553be4db9860d940f81d7447173b2f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab4553be4db9860d940f81d7447173b2f\">&#9670;&nbsp;</a></span>LED_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_PIN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8h_source.html#l00029\">29</a> of file <a class=\"el\" href=\"LedController_8h_source.html\">LedController.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0cf4eba0801e84be66f6198f07bfe287\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0cf4eba0801e84be66f6198f07bfe287\">&#9670;&nbsp;</a></span>CONTROLLER_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* CONTROLLER_NAME = &quot;LED <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8h_source.html#l00020\">20</a> of file <a class=\"el\" href=\"LedController_8h_source.html\">LedController.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/LedController_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Led-Controller/LedController.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_56fe63de1287a706a7081958f8373778.html\">EnigmaIOT-Led-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">LedController.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"LedController_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// BasicController.h</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160; </div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#ifndef _BASICCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#define _BASICCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160; </div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"comment\">//#define DEBUG_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"LedController_8h.html#a8257556540571a0fe1f5f05eb434af87\">   19</a></span>&#160;<span class=\"preprocessor\">#define CONTROLLER_CLASS_NAME LedController</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"LedController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">   20</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"LedController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = <span class=\"stringliteral\">&quot;LED controller&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"haSwitch_8h.html\">haSwitch.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">// You may define data structures and constants here</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"LedController_8h.html#ab4553be4db9860d940f81d7447173b2f\">   29</a></span>&#160;<span class=\"preprocessor\">#define LED_PIN 2</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">   30</a></span>&#160;<span class=\"preprocessor\">#define _LED_ON LOW</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">   31</a></span>&#160;<span class=\"preprocessor\">#define _LED_OFF !_LED_ON</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160; </div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> : <a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> {</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    <span class=\"comment\">// add all parameters that your project needs here</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#aa202545b98827df6cdfeea82898cba6c\">   38</a></span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aa202545b98827df6cdfeea82898cba6c\">led</a> = <a class=\"code\" href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">_LED_OFF</a>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">   41</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> = NULL);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">   43</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">   45</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a> ();</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">   47</a></span>&#160;    <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ();</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">   53</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160; </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">   59</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160; </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">   65</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">   67</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160; </div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">   74</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">   76</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160; </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">   78</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a> () {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"comment\">// You can send a &#39;hello&#39; message when your node starts. Useful to detect unexpected reboot</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (10);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        json[<span class=\"stringliteral\">&quot;status&quot;</span>] = <span class=\"stringliteral\">&quot;start&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        json[<span class=\"stringliteral\">&quot;device&quot;</span>] = <a class=\"code\" href=\"LedController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a>;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keywordtype\">char</span> version_buf[10];</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        snprintf (version_buf, 10, <span class=\"stringliteral\">&quot;%d.%d.%d&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                  <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[0], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[1], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[2]);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        json[<span class=\"stringliteral\">&quot;version&quot;</span>] = String (version_buf);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160; </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a> (json);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">   92</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a> ();</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    <span class=\"comment\">// You may add additional method definitions that you need here</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a\">sendLedStatus</a> ();</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aa6218f8b72b75932946bb5ca74b5bc14\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart()</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aLedController_8h_html_a0cf4eba0801e84be66f6198f07bfe287\"><div class=\"ttname\"><a href=\"LedController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a></div><div class=\"ttdeci\">static const char * CONTROLLER_NAME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8h_source.html#l00020\">LedController.h:20</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4848555c02bbbddd9af9f3f60a9117f5\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a9c45ffb63a64a645032b9c132f86c821\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a></div><div class=\"ttdeci\">static const uint8_t ENIGMAIOT_PROT_VERS[3]</div><div class=\"ttdoc\">EnitmaIoT Version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00016\">EnigmaIoTconfig.h:16</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a584fb205957a7b3ca83fb76066af5268\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae572fe1f0d2bb7b4fb99067d815d5807\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig()</div><div class=\"ttdoc\">Saves output module configuration.</div></div>\n<div class=\"ttc\" id=\"ahaSwitch_8h_html\"><div class=\"ttname\"><a href=\"haSwitch_8h.html\">haSwitch.h</a></div><div class=\"ttdoc\">Home Assistant switch integration.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab5ec6ad2c5cd0f6edfb7635aba862915\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a></div><div class=\"ttdeci\">void buildHADiscovery()</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae5ece1c030d9063e46127b8a48b7bfa9\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">EnigmaIOTjsonController::sendJson</a></div><div class=\"ttdeci\">bool sendJson(DynamicJsonDocument &amp;json)</div><div class=\"ttdoc\">Sends a JSON encoded message to lower layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00170\">EnigmaIOTjsonController.h:170</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a0965ba804f4f0d1533f888fa9011aa86\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result)</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a47fedfe44e3cd9d8055adddce8b2b40a\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a\">CONTROLLER_CLASS_NAME::sendLedStatus</a></div><div class=\"ttdeci\">bool sendLedStatus()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8cpp_source.html#l00105\">LedController.cpp:105</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aa202545b98827df6cdfeea82898cba6c\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aa202545b98827df6cdfeea82898cba6c\">CONTROLLER_CLASS_NAME::led</a></div><div class=\"ttdeci\">int led</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8h_source.html#l00038\">LedController.h:38</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a92a9cd1826a1a8aaca06c6e208928cdc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a2af1a99bb4a2d7b83125861f127279e8\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">CONTROLLER_CLASS_NAME::sendStartAnouncement</a></div><div class=\"ttdeci\">bool sendStartAnouncement()</div><div class=\"ttdoc\">Send a message to notify node has started running.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8h_source.html#l00078\">LedController.h:78</a></div></div>\n<div class=\"ttc\" id=\"aLedController_8h_html_af88429de4c8d15fc065a7ea1c07bedde\"><div class=\"ttname\"><a href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">_LED_OFF</a></div><div class=\"ttdeci\">#define _LED_OFF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"LedController_8h_source.html#l00031\">LedController.h:31</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_afad5a8415e36756b812a53bc889fcd4b\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/NodeList_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/NodeList.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">NodeList.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>EnigmaIoT sensor node management structures.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&quot;</code><br />\n</div>\n<p><a href=\"NodeList_8cpp_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>EnigmaIoT sensor node management structures. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/NodeList_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/NodeList.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">NodeList.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"NodeList_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"NodeList_8h.html\">NodeList.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">   11</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">Node::setEncryptionKey</a> (<span class=\"keyword\">const</span> uint8_t* key) {</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a>) {</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        memcpy (this-&gt;key, <a class=\"code\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160; </div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a129745eaa2b8e08ac8201809a6e2cb17\">   17</a></span>&#160;<a class=\"code\" href=\"structnode__instance.html\">node_t</a> <a class=\"code\" href=\"classNode.html#a129745eaa2b8e08ac8201809a6e2cb17\">Node::getNodeData</a> () {</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;    <a class=\"code\" href=\"structnode__instance.html\">node_t</a> thisNode;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;    memcpy (thisNode.<a class=\"code\" href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">key</a>, <a class=\"code\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;    thisNode.<a class=\"code\" href=\"structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f\">keyValid</a> = <a class=\"code\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">keyValid</a>;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;    thisNode.<a class=\"code\" href=\"structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96\">keyValidFrom</a> = <a class=\"code\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">keyValidFrom</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;    memcpy (thisNode.<a class=\"code\" href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">mac</a>, <a class=\"code\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">mac</a>, 6);</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;    thisNode.<a class=\"code\" href=\"structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f\">nodeId</a> = <a class=\"code\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a>;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;    thisNode.<a class=\"code\" href=\"structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91\">lastMessageCounter</a> = <a class=\"code\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">lastMessageCounter</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;    thisNode.<a class=\"code\" href=\"structnode__instance.html#a784768cbda2285978d85c6dd17c01158\">status</a> = <a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    memcpy (thisNode.<a class=\"code\" href=\"structnode__instance.html#ad979924ffe46421c554052889ee590fb\">nodeName</a>, <a class=\"code\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">getNodeName</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160; </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    <span class=\"keywordflow\">return</span> thisNode;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">   32</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">Node::printToSerial</a> (Stream* port) {</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    port-&gt;println ();</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;    port-&gt;printf (<span class=\"stringliteral\">&quot;Node: %d\\n&quot;</span>, <a class=\"code\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a>);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    <span class=\"keywordtype\">char</span> macstr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<a class=\"code\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">mac</a>, macstr);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    port-&gt;printf (<span class=\"stringliteral\">&quot;\\tMAC Address: %s\\n&quot;</span>, macstr);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;    port-&gt;printf (<span class=\"stringliteral\">&quot;\\tLast counter: %u\\n&quot;</span>, <a class=\"code\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">lastMessageCounter</a>);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;    port-&gt;printf (<span class=\"stringliteral\">&quot;\\tKey valid from: %lu ms ago\\n&quot;</span>, (millis () - <a class=\"code\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">keyValidFrom</a>));</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    port-&gt;printf (<span class=\"stringliteral\">&quot;\\tKey: %s\\n&quot;</span>, <a class=\"code\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">keyValid</a> ? <span class=\"stringliteral\">&quot;Valid&quot;</span> : <span class=\"stringliteral\">&quot;Invalid&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    port-&gt;print (<span class=\"stringliteral\">&quot;\\tStatus: &quot;</span>);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;    <span class=\"keywordflow\">switch</span> (<a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>:</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        port-&gt;println (<span class=\"stringliteral\">&quot;Unregistered&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">INIT</a>:</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        port-&gt;println (<span class=\"stringliteral\">&quot;Initializing&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\">SLEEP</a>:</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        port-&gt;println (<span class=\"stringliteral\">&quot;Going to sleep&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">WAIT_FOR_SERVER_HELLO</a>:</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        port-&gt;println (<span class=\"stringliteral\">&quot;Wait for server hello&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\">WAIT_FOR_DOWNLINK</a>:</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        port-&gt;println (<span class=\"stringliteral\">&quot;Wait for Downlik&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>:</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        port-&gt;println (<span class=\"stringliteral\">&quot;Registered. Wait for messages&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        port-&gt;println (<a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    port-&gt;println ();</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">   67</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">Node::initRateFilter</a> () {</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    <span class=\"keywordtype\">float</span> weight = 1;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160; </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;    <a class=\"code\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">rateFilter</a> = <span class=\"keyword\">new</span> <a class=\"code\" href=\"classFilterClass.html\">FilterClass</a> (<a class=\"code\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\">AVERAGE_FILTER</a>, <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#af320072fb51a344213679450cacb3d6a\">RATE_AVE_ORDER</a>);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#af320072fb51a344213679450cacb3d6a\">RATE_AVE_ORDER</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <a class=\"code\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">rateFilter</a>-&gt;<a class=\"code\" href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">addWeigth</a> (weight);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        weight = weight / 2;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160; </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">   78</a></span>&#160;<a class=\"code\" href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">Node::Node</a> () :</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    keyValid (false),</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> (<a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    <a class=\"code\" href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">initRateFilter</a> ();</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160; </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a45db0ed8c3ce61c3cee9d2070e20493f\">   84</a></span>&#160;<a class=\"code\" href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">Node::Node</a> (<a class=\"code\" href=\"structnode__instance.html\">node_t</a> nodeData) :</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    keyValid (nodeData.keyValid),</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> (nodeData.<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>),</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    lastMessageCounter (nodeData.lastMessageCounter),</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    nodeId (nodeData.nodeId),</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    keyValidFrom (nodeData.keyValidFrom),</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;    <a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">sleepyNode</a> (nodeData.<a class=\"code\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">sleepyNode</a>)</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    <span class=\"comment\">//packetNumber (0),</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    <span class=\"comment\">//packetErrors (0),</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    <span class=\"comment\">//per (0.0)</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    memcpy (<a class=\"code\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a>, nodeData.<a class=\"code\" href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">key</a>, sizeof (uint16_t));</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    memcpy (<a class=\"code\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">mac</a>, nodeData.<a class=\"code\" href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">mac</a>, 6);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <a class=\"code\" href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">initRateFilter</a> ();</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a71c1077723465057bd8cbc90f33c2ead\">  101</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a71c1077723465057bd8cbc90f33c2ead\">Node::updatePacketsRate</a> (<span class=\"keywordtype\">float</span> value) {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    <a class=\"code\" href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">packetsHour</a> = <a class=\"code\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">rateFilter</a>-&gt;<a class=\"code\" href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">addValue</a> (value);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160; </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160; </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">  106</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">Node::reset</a> () {</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Reset node&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    <span class=\"comment\">//memset (mac, 0, 6);</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    memset (<a class=\"code\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a>, 0, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    memset (<a class=\"code\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">nodeName</a>, 0, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    <a class=\"code\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">keyValid</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    <a class=\"code\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">lastMessageCounter</a> = 0;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    <a class=\"code\" href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">lastControlCounter</a> = 0;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    <a class=\"code\" href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">lastDownlinkMsgCounter</a> = 0;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <a class=\"code\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">keyValidFrom</a> = 0;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    <a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <a class=\"code\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">enigmaIOTVersion</a>[0] = 0;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <a class=\"code\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">enigmaIOTVersion</a>[1] = 0;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <a class=\"code\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">enigmaIOTVersion</a>[2] = 0;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"comment\">//broadcastEnabled = false;</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <a class=\"code\" href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">broadcastKeyRequested</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">rateFilter</a>) {</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Reset packet rate&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <a class=\"code\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">rateFilter</a>-&gt;<a class=\"code\" href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">clear</a> ();</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    <span class=\"comment\">//sleepyNode = true;</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160; </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f\">  129</a></span>&#160;<a class=\"code\" href=\"classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f\">NodeList::NodeList</a> () {</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        <a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a> = i;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">  135</a></span>&#160;<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">NodeList::getNodeFromID</a> (uint16_t nodeId) {</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    <span class=\"keywordflow\">if</span> (nodeId &gt;= <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>)</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"keywordflow\">return</span> &amp;(<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[nodeId]);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160; </div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">  142</a></span>&#160;<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">NodeList::getNodeFromMAC</a> (<span class=\"keyword\">const</span> uint8_t* mac) {</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    uint16_t index = 0;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160; </div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    <span class=\"keywordflow\">if</span> (!memcmp (<a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>.<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> (), mac, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>)) {</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keywordflow\">return</span> &amp;<a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160; </div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    <span class=\"keywordflow\">while</span> (index &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>) {</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        <span class=\"keywordflow\">if</span> (!memcmp (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[index].mac, mac, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>)) {</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[index].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                <span class=\"keywordflow\">return</span> &amp;(<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[index]);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        index++;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160; </div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160; </div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">  161</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">NodeList::initBroadcastNode</a> () {</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    <span class=\"comment\">//broadcastNode = new Node ();</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    <span class=\"comment\">//node_t node;</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160; </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <span class=\"comment\">//uint8_t broadcastAddress[ENIGMAIOT_ADDR_LEN];</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    <span class=\"comment\">//memcpy (broadcastAddress, BROADCAST_ADDRESS, ENIGMAIOT_ADDR_LEN);</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;    <a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>.<a class=\"code\" href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">setMacAddress</a> (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a>);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    <a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>.<a class=\"code\" href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">setNodeId</a> (0xffff);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;    <a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>.<a class=\"code\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">setStatus</a> (<a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    <a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>.<a class=\"code\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">setSleepy</a> (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;    <a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>.<a class=\"code\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">setNodeName</a> (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">BROADCAST_NONE_NAME</a>);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160; </div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">  174</a></span>&#160;<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">NodeList::getNodeFromName</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name) {</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;    uint16_t index = 0;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160; </div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;    <span class=\"comment\">// Check if address is an address as an string</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    uint8_t netAddr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a> (name, netAddr)) {</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">getNodeFromMAC</a> (netAddr);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160; </div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;    <span class=\"comment\">// check if destination is broadcast</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;    <span class=\"keywordflow\">if</span> (!strncmp (name, <a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>.<a class=\"code\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">getNodeName</a> (), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Address &#39;%s&#39; is broadcast node&quot;</span>, name);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <span class=\"keywordflow\">return</span> &amp;<a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160; </div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;    <span class=\"keywordflow\">while</span> (index &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>) {</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        <span class=\"keywordflow\">if</span> (!strncmp (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[index].nodeName, name, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[index].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                <span class=\"keywordflow\">return</span> &amp;(<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[index]);</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        index++;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160; </div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;    <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160; </div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">  201</a></span>&#160;int8_t <a class=\"code\" href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">NodeList::checkNodeName</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name, <span class=\"keyword\">const</span> uint8_t* address) {</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;    <span class=\"comment\">//bool found = false;</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160; </div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;    <span class=\"keywordflow\">if</span> (strlen (name) &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a> - 1) {</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Name too long %s&quot;</span>, name);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\">TOO_LONG</a>; <span class=\"comment\">// Enmpty name</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160; </div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;    <span class=\"keywordflow\">if</span> (!strlen (name)) {</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Empty name&quot;</span>, name);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\">EMPTY_NAME</a>; <span class=\"comment\">// Too long name</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160; </div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        <span class=\"comment\">// if node is not registered and has this node name</span></div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node %d status is %d&quot;</span>, i, <a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;            <span class=\"keywordtype\">char</span>* currentNodeNamme = <a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">getNodeName</a> ();</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Node %d name is %s&quot;</span>, i, currentNodeNamme ? currentNodeNamme : <span class=\"stringliteral\">&quot;NULL&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;            <span class=\"keywordflow\">if</span> (currentNodeNamme &amp;&amp; !strncmp (currentNodeNamme, name, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;                <span class=\"comment\">// if addresses addresses are different</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;                <span class=\"comment\">//char addrStr[ENIGMAIOT_ADDR_LEN * 3];</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Found node name %s in Node List with address %s&quot;</span>, name, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (address));</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;                <span class=\"keywordflow\">if</span> (memcmp (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].getMacAddress (), address, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>)) {</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;                    DEBUG_ERROR (<span class=\"stringliteral\">&quot;Duplicated name %s&quot;</span>, name);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\">ALREADY_USED</a>; <span class=\"comment\">// Already used</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\">NAME_OK</a>; <span class=\"comment\">// Name was not used</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160; </div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711\">  234</a></span>&#160;<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711\">NodeList::findEmptyNode</a> () {</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;    uint16_t index = 0;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160; </div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;    <span class=\"keywordflow\">while</span> (index &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>) {</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[index].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;            <span class=\"keywordflow\">return</span> &amp;(<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[index]);</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        index++;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160; </div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;    <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160; </div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">  247</a></span>&#160;uint16_t <a class=\"code\" href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">NodeList::countActiveNodes</a> () {</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;    uint16_t counter = 0;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160; </div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;            counter++;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;    <span class=\"keywordflow\">return</span> counter;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160; </div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">  258</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">NodeList::unregisterNode</a> (uint16_t nodeId) {</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;    <span class=\"keywordflow\">if</span> (nodeId &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>) {</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;        <a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[nodeId].<a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160; </div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[nodeId].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;            <a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[nodeId].<a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160; </div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8\">  270</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">NodeList::unregisterNode</a> (<span class=\"keyword\">const</span> uint8_t* mac) {</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* node = <a class=\"code\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">getNodeFromMAC</a> (mac);</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;    <span class=\"keywordflow\">if</span> (node) {</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;        node-&gt;<a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        node-&gt;<a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160; </div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a52e67df2a4891252279101a492453038\">  281</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">NodeList::unregisterNode</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node) {</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;    <span class=\"keywordflow\">if</span> (node) {</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        node-&gt;<a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160; </div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[node-&gt;<a class=\"code\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a>].<a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;            <a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[node-&gt;<a class=\"code\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a>].<a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160; </div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">  295</a></span>&#160;<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">NodeList::getNextActiveNode</a> (uint16_t nodeId) {</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;    <span class=\"keywordflow\">if</span> (nodeId == 0xFFFF) {</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[0].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;            <span class=\"keywordflow\">return</span> &amp;(<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[0]);</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = nodeId + 1; i &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;            <span class=\"keywordflow\">return</span> &amp;(<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i]);</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;    <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160; </div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#add85a6384d393648fa7ca693a0dba44c\">  309</a></span>&#160;<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">NodeList::getNextActiveNode</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node) {</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;    <span class=\"keywordflow\">if</span> (!node) {</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[0].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;            <span class=\"keywordflow\">return</span> &amp;(<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[0]);</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        node = &amp;(<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[0]);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = node-&gt;<a class=\"code\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a> + 1; i &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;            <span class=\"keywordflow\">return</span> &amp;(<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i]);</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;    <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160; </div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">  324</a></span>&#160;<a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">NodeList::getNewNode</a> (<span class=\"keyword\">const</span> uint8_t* mac) {</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* node = <a class=\"code\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">getNodeFromMAC</a> (mac);</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;    <span class=\"keywordflow\">if</span> (node) {</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;        <span class=\"keywordflow\">return</span> node;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;                <a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">setMacAddress</a> (<span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(mac));</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;                <a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;                <span class=\"keywordflow\">return</span> &amp;(<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i]);</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;    <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160; </div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">  340</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">NodeList::printToSerial</a> (Stream* port) {</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>; i++) {</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a> != <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>) {</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;            <a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[i].<a class=\"code\" href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">printToSerial</a> (port);</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassNode_html_af2378f7b085ccdc06314b12263fd2d34\"><div class=\"ttname\"><a href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">Node::lastMessageCounter</a></div><div class=\"ttdeci\">uint16_t lastMessageCounter</div><div class=\"ttdoc\">Last message counter state for specific Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00479\">NodeList.h:479</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a5daacbc6f74ec14aa03325d96ef51ed3\"><div class=\"ttname\"><a href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">NodeList::broadcastNode</a></div><div class=\"ttdeci\">Node broadcastNode</div><div class=\"ttdoc\">Node instance that holds data used for broadcast messages. This does not represent any individual nod...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00633\">NodeList.h:633</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aebc89c4269923800190e3c340f45d550\"><div class=\"ttname\"><a href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">Node::broadcastKeyRequested</a></div><div class=\"ttdeci\">bool broadcastKeyRequested</div><div class=\"ttdoc\">Node is waiting for broadcast key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00486\">NodeList.h:486</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a6988622d76bd1d76a0d040d97b8d2c91\"><div class=\"ttname\"><a href=\"structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91\">node_instance::lastMessageCounter</a></div><div class=\"ttdeci\">uint16_t lastMessageCounter</div><div class=\"ttdoc\">Last message counter state for specific Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00093\">NodeList.h:93</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_ad2f5b99eaeeb4f3b805acb0a019b6711\"><div class=\"ttname\"><a href=\"classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711\">NodeList::findEmptyNode</a></div><div class=\"ttdeci\">Node * findEmptyNode()</div><div class=\"ttdoc\">Searches for a free place for a new Node instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00234\">NodeList.cpp:234</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a08caf502661a3bf1b75ba6860eb1bebe\"><div class=\"ttname\"><a href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">NodeList::getNodeFromName</a></div><div class=\"ttdeci\">Node * getNodeFromName(const char *name)</div><div class=\"ttdoc\">Gets node that correspond with given node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00174\">NodeList.cpp:174</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\">EMPTY_NAME</a></div><div class=\"ttdeci\">@ EMPTY_NAME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00035\">NodeList.h:35</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a31c7b1dce5c26d81ead2cabf5395d935\"><div class=\"ttname\"><a href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">Node::setNodeName</a></div><div class=\"ttdeci\">void setNodeName(const char *name)</div><div class=\"ttdoc\">Sets Node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00164\">NodeList.h:164</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html\"><div class=\"ttname\"><a href=\"NodeList_8h.html\">NodeList.h</a></div><div class=\"ttdoc\">EnigmaIoT sensor node management structures.</div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a239930df15810784dab9a3284730a35f\"><div class=\"ttname\"><a href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">NodeList::printToSerial</a></div><div class=\"ttdeci\">void printToSerial(Stream *port)</div><div class=\"ttdoc\">Dumps node list data to a Stream object.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00340\">NodeList.cpp:340</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a7590c6b11a260ca766a2ad46f2b0cf27\"><div class=\"ttname\"><a href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">Node::setStatus</a></div><div class=\"ttdeci\">void setStatus(status_t status)</div><div class=\"ttdoc\">Sets status for finite state machine that represents node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00308\">NodeList.h:308</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a57a69c9dde4327beeb404c83defdbdaa\"><div class=\"ttname\"><a href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">NodeList::nodes</a></div><div class=\"ttdeci\">Node nodes[NUM_NODES]</div><div class=\"ttdoc\">Static Node array that holds maximum number of supported nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00632\">NodeList.h:632</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a025eed5564c31f411fc6950a5ecd4c40\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NODE_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00025\">EnigmaIoTconfigAdvanced.h:25</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\">SLEEP</a></div><div class=\"ttdeci\">@ SLEEP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00030\">NodeList.h:29</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a956635fa60412a9a026ea64245dd4443\"><div class=\"ttname\"><a href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">NodeList::initBroadcastNode</a></div><div class=\"ttdeci\">void initBroadcastNode()</div><div class=\"ttdoc\">Init broadcast node data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00161\">NodeList.cpp:161</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a04851c9373e00d3c91c11a87d052f1f2\"><div class=\"ttname\"><a href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">NodeList::getNewNode</a></div><div class=\"ttdeci\">Node * getNewNode(const uint8_t *mac)</div><div class=\"ttdoc\">Finds a node that correspond with given address of creates a new one if it does not exist.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00324\">NodeList.cpp:324</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a3615b98da7f0ea0d8615a8f45519a715\"><div class=\"ttname\"><a href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">Node::setNodeId</a></div><div class=\"ttdeci\">void setNodeId(uint16_t nodeId)</div><div class=\"ttdoc\">Sets a new Node identifier.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00144\">NodeList.h:144</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a02961b325403161b54533152d242696a\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a></div><div class=\"ttdeci\">uint8_t * str2mac(const char *macAddrString, uint8_t *macBytes)</div><div class=\"ttdoc\">Debug helper function that creates MAC address byte array from text representation.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00104\">helperFunctions.cpp:104</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a03e424c2251b5b96fb68444f008f6f17\"><div class=\"ttname\"><a href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">Node::keyValid</a></div><div class=\"ttdeci\">bool keyValid</div><div class=\"ttdoc\">Node shared key valid.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00477\">NodeList.h:477</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a08530d06e81c160b346047e37839ee7d\"><div class=\"ttname\"><a href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">NodeList::getNodeFromMAC</a></div><div class=\"ttdeci\">Node * getNodeFromMAC(const uint8_t *mac)</div><div class=\"ttdoc\">Gets node that correspond with given address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00142\">NodeList.cpp:142</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a7cf92e8316f291e0a4e4ad608756887f\"><div class=\"ttname\"><a href=\"classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f\">NodeList::NodeList</a></div><div class=\"ttdeci\">NodeList()</div><div class=\"ttdoc\">Node list constructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00129\">NodeList.cpp:129</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a6591d96da1e646fcbd846e61af3e5ef2\"><div class=\"ttname\"><a href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">node_instance::key</a></div><div class=\"ttdeci\">uint8_t key[32]</div><div class=\"ttdoc\">Shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00092\">NodeList.h:92</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_af320072fb51a344213679450cacb3d6a\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#af320072fb51a344213679450cacb3d6a\">RATE_AVE_ORDER</a></div><div class=\"ttdeci\">static const int RATE_AVE_ORDER</div><div class=\"ttdoc\">Message rate filter order.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00029\">EnigmaIoTconfig.h:29</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a129745eaa2b8e08ac8201809a6e2cb17\"><div class=\"ttname\"><a href=\"classNode.html#a129745eaa2b8e08ac8201809a6e2cb17\">Node::getNodeData</a></div><div class=\"ttdeci\">node_t getNodeData()</div><div class=\"ttdoc\">Gets a struct that represents node object. May be used for node serialization.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00017\">NodeList.cpp:17</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_adf84aafdceb7da9d9e2d9d379e2dba8f\"><div class=\"ttname\"><a href=\"structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f\">node_instance::keyValid</a></div><div class=\"ttdeci\">bool keyValid</div><div class=\"ttdoc\">Node shared key valid.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00099\">NodeList.h:99</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a4f9547a1ede244be2b33d1fcf6de68b0\"><div class=\"ttname\"><a href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">Node::nodeId</a></div><div class=\"ttdeci\">uint16_t nodeId</div><div class=\"ttdoc\">Node identifier asigned by gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00482\">NodeList.h:482</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a2892fb1e6830073f3419da35ddad8725\"><div class=\"ttname\"><a href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">NodeList::unregisterNode</a></div><div class=\"ttdeci\">bool unregisterNode(uint16_t nodeId)</div><div class=\"ttdoc\">Frees up a node and marks it as available.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00258\">NodeList.cpp:258</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a1033bf3bedf4c20a40176e4dd458a58f\"><div class=\"ttname\"><a href=\"structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f\">node_instance::nodeId</a></div><div class=\"ttdeci\">uint16_t nodeId</div><div class=\"ttdoc\">Node identifier asigned by gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00091\">NodeList.h:91</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">INIT</a></div><div class=\"ttdeci\">@ INIT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00025\">NodeList.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_aa6e318ba33cab0094c7b6528e3e50337\"><div class=\"ttname\"><a href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">FilterClass::addValue</a></div><div class=\"ttdeci\">float addValue(float value)</div><div class=\"ttdoc\">Pushes a new value for calculation. Until the buffer is filled up to filter order,...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00012\">Filter.cpp:12</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a9af4beb0e8a8cf8405116b92077d9027\"><div class=\"ttname\"><a href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">Node::enigmaIOTVersion</a></div><div class=\"ttdeci\">uint8_t enigmaIOTVersion[3]</div><div class=\"ttdoc\">Protocol version, filled when a version message is received.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00495\">NodeList.h:495</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ac36076f507ba318d5f3fd37c9eee2cc2\"><div class=\"ttname\"><a href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">Node::lastControlCounter</a></div><div class=\"ttdeci\">uint16_t lastControlCounter</div><div class=\"ttdoc\">Last message counter state for specific Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00480\">NodeList.h:480</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_afad1c640f8fc2623996d3d2a174ad763\"><div class=\"ttname\"><a href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">Node::keyValidFrom</a></div><div class=\"ttdeci\">timer_t keyValidFrom</div><div class=\"ttdoc\">Last time that Node and Gateway agreed a key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00483\">NodeList.h:483</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_ad979924ffe46421c554052889ee590fb\"><div class=\"ttname\"><a href=\"structnode__instance.html#ad979924ffe46421c554052889ee590fb\">node_instance::nodeName</a></div><div class=\"ttdeci\">char nodeName[NODE_NAME_LENGTH]</div><div class=\"ttdoc\">Node name. Use as a human friendly name to avoid use of numeric address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00101\">NodeList.h:101</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\">NAME_OK</a></div><div class=\"ttdeci\">@ NAME_OK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00033\">NodeList.h:33</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae1a2a8c747a1af2e7d9467ae9199edd7\"><div class=\"ttname\"><a href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">Node::setSleepy</a></div><div class=\"ttdeci\">void setSleepy(bool sleepy)</div><div class=\"ttdoc\">Sets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sl...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00334\">NodeList.h:334</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a90d944dd41d445ec73a5b9534483329f\"><div class=\"ttname\"><a href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">Node::initRateFilter</a></div><div class=\"ttdeci\">void initRateFilter()</div><div class=\"ttdoc\">Starts smoothing filter.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00067\">NodeList.cpp:67</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">WAIT_FOR_SERVER_HELLO</a></div><div class=\"ttdeci\">@ WAIT_FOR_SERVER_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00026\">NodeList.h:26</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a7c565caad2fea0439f28d24887ac2498\"><div class=\"ttname\"><a href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">Node::reset</a></div><div class=\"ttdeci\">void reset()</div><div class=\"ttdoc\">Resets all node fields to a default initial and not registered state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00106\">NodeList.cpp:106</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae7b7337fdc178fe350ac4ce2f4675040\"><div class=\"ttname\"><a href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">Node::setEncryptionKey</a></div><div class=\"ttdeci\">void setEncryptionKey(const uint8_t *key)</div><div class=\"ttdoc\">Sets encryption key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00011\">NodeList.cpp:11</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a02eb5aa6340f2d4e0cfd48f7bb661dd3\"><div class=\"ttname\"><a href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">Node::status</a></div><div class=\"ttdeci\">status_t status</div><div class=\"ttdoc\">Current node status. See enum node_status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00478\">NodeList.h:478</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_abc1ad898434142e44923f7220b6a2ae4\"><div class=\"ttname\"><a href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">Node::packetsHour</a></div><div class=\"ttdeci\">double packetsHour</div><div class=\"ttdoc\">Packet rate for a specific nope.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00472\">NodeList.h:472</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a72dc59a4a4d32e2918b20038f2837ee2\"><div class=\"ttname\"><a href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">NodeList::getNextActiveNode</a></div><div class=\"ttdeci\">Node * getNextActiveNode(uint16_t nodeId)</div><div class=\"ttdoc\">Gets next active node by nodeId.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00295\">NodeList.cpp:295</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a61ac445d996a9304b34fc78a2514364f\"><div class=\"ttname\"><a href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">Node::getEncriptionKey</a></div><div class=\"ttdeci\">uint8_t * getEncriptionKey()</div><div class=\"ttdoc\">Gets Node encryption key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00173\">NodeList.h:173</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a71ee5004618cb61a934f136d7c2f45e2\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a></div><div class=\"ttdeci\">static const int NUM_NODES</div><div class=\"ttdoc\">Maximum number of nodes that this gateway can handle.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00032\">EnigmaIoTconfig.h:32</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html\"><div class=\"ttname\"><a href=\"classFilterClass.html\">FilterClass</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00029\">Filter.h:29</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html\"><div class=\"ttname\"><a href=\"structnode__instance.html\">node_instance</a></div><div class=\"ttdoc\">Struct that define node fields. Used for long term storage needs.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00089\">NodeList.h:89</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aad088b52de3eb46a8c89e6cb87bdf887\"><div class=\"ttname\"><a href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">Node::key</a></div><div class=\"ttdeci\">uint8_t key[KEY_LENGTH]</div><div class=\"ttdoc\">Shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00490\">NodeList.h:490</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a91fa5b6c997bf5a84369d8f9dd691c54\"><div class=\"ttname\"><a href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">Node::lastDownlinkMsgCounter</a></div><div class=\"ttdeci\">uint16_t lastDownlinkMsgCounter</div><div class=\"ttdoc\">Last downlink message counter state for specific Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00481\">NodeList.h:481</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\">WAIT_FOR_DOWNLINK</a></div><div class=\"ttdeci\">@ WAIT_FOR_DOWNLINK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00027\">NodeList.h:27</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a784768cbda2285978d85c6dd17c01158\"><div class=\"ttname\"><a href=\"structnode__instance.html#a784768cbda2285978d85c6dd17c01158\">node_instance::status</a></div><div class=\"ttdeci\">status_t status</div><div class=\"ttdoc\">Node state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00098\">NodeList.h:98</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a2ec716b4c6aeedb3d1eb957b02d69dc1\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">BROADCAST_NONE_NAME</a></div><div class=\"ttdeci\">static const char BROADCAST_NONE_NAME[]</div><div class=\"ttdoc\">Name to reference broadcast node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00027\">EnigmaIoTconfigAdvanced.h:27</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aea12cab858f40940a1ab5c61596b6355\"><div class=\"ttname\"><a href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">Node::setMacAddress</a></div><div class=\"ttdeci\">void setMacAddress(const uint8_t *macAddress)</div><div class=\"ttdoc\">Sets node address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00266\">NodeList.h:266</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aba2a2a0bc44214b57f57abd59ec5b0a2\"><div class=\"ttname\"><a href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">Node::mac</a></div><div class=\"ttdeci\">uint8_t mac[ENIGMAIOT_ADDR_LEN]</div><div class=\"ttdoc\">Node address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00489\">NodeList.h:489</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a863ca9be67da8cdc5fb9447378021e07\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a></div><div class=\"ttdeci\">const uint8_t KEY_LENGTH</div><div class=\"ttdoc\">Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00070\">EnigmaIoTconfigAdvanced.h:70</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a5c665e844c5f7f121a72baae270a2ba7\"><div class=\"ttname\"><a href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">Node::getNodeName</a></div><div class=\"ttdeci\">char * getNodeName()</div><div class=\"ttdoc\">Gets Node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00152\">NodeList.h:152</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_adba11398693739d5fc1d9a755d4bc567\"><div class=\"ttname\"><a href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">Node::rateFilter</a></div><div class=\"ttdeci\">FilterClass * rateFilter</div><div class=\"ttdoc\">Filter for message rate smoothing.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00492\">NodeList.h:492</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a0ae08b109bf88f4c3481509a99001f96\"><div class=\"ttname\"><a href=\"structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96\">node_instance::keyValidFrom</a></div><div class=\"ttdeci\">time_t keyValidFrom</div><div class=\"ttdoc\">Last time that Node and Gateway agreed a key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00096\">NodeList.h:96</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a4e22033bdc1560ca309e9a14073c2282\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a></div><div class=\"ttdeci\">static const uint8_t BROADCAST_ADDRESS[]</div><div class=\"ttdoc\">Broadcast address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00026\">EnigmaIoTconfigAdvanced.h:26</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a71c1077723465057bd8cbc90f33c2ead\"><div class=\"ttname\"><a href=\"classNode.html#a71c1077723465057bd8cbc90f33c2ead\">Node::updatePacketsRate</a></div><div class=\"ttdeci\">void updatePacketsRate(float value)</div><div class=\"ttdoc\">Adds a new message rate value for filter calculation.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00101\">NodeList.cpp:101</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html\"><div class=\"ttname\"><a href=\"classNode.html\">Node</a></div><div class=\"ttdoc\">Class definition for a single sensor Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00109\">NodeList.h:109</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a6702f6b65634da0500f5e99ccf017178\"><div class=\"ttname\"><a href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">NodeList::checkNodeName</a></div><div class=\"ttdeci\">int8_t checkNodeName(const char *name, const uint8_t *address)</div><div class=\"ttdoc\">Check Node name for duplicate.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00201\">NodeList.cpp:201</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a2236fab04bae686f3a30006ab0259c4f\"><div class=\"ttname\"><a href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">FilterClass::addWeigth</a></div><div class=\"ttdeci\">float addWeigth(float coeff)</div><div class=\"ttdoc\">Adds a new weighting value. It is pushed on the array so latest value will be used for older data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00025\">Filter.cpp:25</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\">TOO_LONG</a></div><div class=\"ttdeci\">@ TOO_LONG</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00037\">NodeList.h:36</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\">ALREADY_USED</a></div><div class=\"ttdeci\">@ ALREADY_USED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00034\">NodeList.h:34</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a></div><div class=\"ttdeci\">@ UNREGISTERED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00024\">NodeList.h:24</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html_a29933bc3e2094170afd380cee3763d95\"><div class=\"ttname\"><a href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">FilterClass::clear</a></div><div class=\"ttdeci\">void clear()</div><div class=\"ttdoc\">Resets state of the filter to an initial value.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8cpp_source.html#l00128\">Filter.cpp:128</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ad7a34779cad45d997bfd6d3d8043c75f\"><div class=\"ttname\"><a href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">Node::Node</a></div><div class=\"ttdeci\">Node()</div><div class=\"ttdoc\">Plain constructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00078\">NodeList.cpp:78</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a36b675e4186420fb1f8e324fc0987cbd\"><div class=\"ttname\"><a href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">Node::printToSerial</a></div><div class=\"ttdeci\">void printToSerial(Stream *port=&amp;Serial)</div><div class=\"ttdoc\">Dumps node data to the given stream, Serial by default. This method may be used for debugging.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00032\">NodeList.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a></div><div class=\"ttdeci\">@ REGISTERED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00028\">NodeList.h:28</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_ae2c2a14ed812dd9e1886a9607fdb08c6\"><div class=\"ttname\"><a href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">node_instance::mac</a></div><div class=\"ttdeci\">uint8_t mac[ENIGMAIOT_ADDR_LEN]</div><div class=\"ttdoc\">Node address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00090\">NodeList.h:90</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_aab4a7f7971eeeb4c0fa3af8064006b79\"><div class=\"ttname\"><a href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">NodeList::getNodeFromID</a></div><div class=\"ttdeci\">Node * getNodeFromID(uint16_t nodeId)</div><div class=\"ttdoc\">Gets node that correspond with given nodeId.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00135\">NodeList.cpp:135</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aa270ef450c28e630de129a94c6992805\"><div class=\"ttname\"><a href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">Node::nodeName</a></div><div class=\"ttdeci\">char nodeName[NODE_NAME_LENGTH]</div><div class=\"ttdoc\">Node name. Use as a human friendly name to avoid use of numeric address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00493\">NodeList.h:493</a></div></div>\n<div class=\"ttc\" id=\"anamespaceEnigmaIoTUpdate_html_ad7b06ea4bc715581c290476212ae10c8\"><div class=\"ttname\"><a href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">EnigmaIoTUpdate.sleepyNode</a></div><div class=\"ttdeci\">bool sleepyNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTUpdate_8py_source.html#l00013\">EnigmaIoTUpdate.py:13</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_abb4895c5b9ae6b041c9102178de837c4\"><div class=\"ttname\"><a href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">NodeList::countActiveNodes</a></div><div class=\"ttdeci\">uint16_t countActiveNodes()</div><div class=\"ttdoc\">Gets the number of active nodes (registered or registering)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00247\">NodeList.cpp:247</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html_a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\"><div class=\"ttname\"><a href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\">AVERAGE_FILTER</a></div><div class=\"ttdeci\">@ AVERAGE_FILTER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00027\">Filter.h:26</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/NodeList_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/NodeList.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">NodeList.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>EnigmaIoT sensor node management structures.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>&quot;</code><br />\n</div>\n<p><a href=\"NodeList_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Struct that define node fields. Used for long term storage needs.  <a href=\"structnode__instance.html#details\">More...</a><br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html\">Node</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Class definition for a single sensor <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.  <a href=\"classNode.html#details\">More...</a><br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:a6d12566cf69b6429f5cce300ab1f39c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">node_status</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a></td></tr>\n<tr class=\"memdesc:a6d12566cf69b6429f5cce300ab1f39c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> state.  <a href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">More...</a><br /></td></tr>\n<tr class=\"separator:a6d12566cf69b6429f5cce300ab1f39c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac5c28a5827b5a3b34222c13589adeba7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4\">control_message_type</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a></td></tr>\n<tr class=\"separator:ac5c28a5827b5a3b34222c13589adeba7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afca510572b2bed862d3aae57a6eff6f7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4\">ota_status</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8h.html#afca510572b2bed862d3aae57a6eff6f7\">ota_status_t</a></td></tr>\n<tr class=\"separator:afca510572b2bed862d3aae57a6eff6f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a58096abbef18f4a4463c37694ee408f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structnode__instance.html\">node_instance</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6\">node_t</a></td></tr>\n<tr class=\"separator:a58096abbef18f4a4463c37694ee408f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:a8dd9280b6a6e53e65414115f47b0df6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">node_status</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>, \n<a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">INIT</a>, \n<a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">WAIT_FOR_SERVER_HELLO</a>, \n<a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\">WAIT_FOR_DOWNLINK</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>, \n<a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\">SLEEP</a>\n<br />\n }</td></tr>\n<tr class=\"memdesc:a8dd9280b6a6e53e65414115f47b0df6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">State definition for nodes.  <a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">More...</a><br /></td></tr>\n<tr class=\"separator:a8dd9280b6a6e53e65414115f47b0df6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1c9a1577fe153d9fa2548bd7c0b04b9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9a\">nodeNameStatus_t</a> { <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\">NAME_OK</a> = 0, \n<a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\">ALREADY_USED</a> = -1, \n<a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\">EMPTY_NAME</a> = -2, \n<a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\">TOO_LONG</a> = -3\n }</td></tr>\n<tr class=\"separator:a1c9a1577fe153d9fa2548bd7c0b04b9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a410abac5350706d6651d4e9242730601\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\">RESTART_AFTER_OTA</a> = 1, \n<a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\">OTA_ERROR_RESTART</a> = 2, \n<a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\">RESTART_REQUESTED</a> = 3, \n<a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\">CONFIG_RESET</a> = 4, \n<br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ad1616fcb099e2febf3ffc5d115a99441\">USER_RESET</a> = 5, \n<a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\">IRRELEVANT</a> = 10, \n<a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ab309433c1c035ba010b3aff8756d1637\">UNKNOWN_REASON</a> = 0\n<br />\n }</td></tr>\n<tr class=\"separator:a410abac5350706d6651d4e9242730601\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af7c3a73e42834705926eba633e55daa4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4\">control_message_type</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">VERSION</a> = 0x01, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">VERSION_ANS</a> = 0x81, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">SLEEP_GET</a> = 0x02, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">SLEEP_SET</a> = 0x03, \n<br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">SLEEP_ANS</a> = 0x82, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">IDENTIFY</a> = 0x04, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">RESET</a> = 0x05, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\">RESET_ANS</a> = 0x85, \n<br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">RSSI_GET</a> = 0x06, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\">RSSI_ANS</a> = 0x86, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">NAME_GET</a> = 0x07, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">NAME_ANS</a> = 0x08, \n<br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">NAME_SET</a> = 0x87, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">RESTART_NODE</a> = 0x09, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\">RESTART_CONFIRM</a> = 0x89, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">BRCAST_KEY</a> = 0x10, \n<br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">OTA</a> = 0xEF, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">OTA_ANS</a> = 0xFF, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">USERDATA_GET</a> = 0x00, \n<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">USERDATA_SET</a> = 0x20, \n<br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">INVALID</a> = 0xF0\n<br />\n }</td></tr>\n<tr class=\"separator:af7c3a73e42834705926eba633e55daa4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adf9286a280a40f6ac98ad07d0ba308c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4\">ota_status</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\">OTA_STARTED</a> = 0, \n<a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\">OTA_START_ERROR</a> = 1, \n<a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\">OTA_CHECK_OK</a> = 2, \n<a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">OTA_CHECK_FAIL</a> = 3, \n<br />\n&#160;&#160;<a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\">OTA_OUT_OF_SEQUENCE</a> =4, \n<a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\">OTA_TIMEOUT</a> = 5, \n<a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\">OTA_FINISHED</a> = 6\n<br />\n }</td></tr>\n<tr class=\"separator:adf9286a280a40f6ac98ad07d0ba308c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>EnigmaIoT sensor node management structures. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n</div><h2 class=\"groupheader\">Typedef Documentation</h2>\n<a id=\"ac5c28a5827b5a3b34222c13589adeba7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac5c28a5827b5a3b34222c13589adeba7\">&#9670;&nbsp;</a></span>control_message_type_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4\">control_message_type</a> <a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"a58096abbef18f4a4463c37694ee408f6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a58096abbef18f4a4463c37694ee408f6\">&#9670;&nbsp;</a></span>node_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structnode__instance.html\">node_instance</a> <a class=\"el\" href=\"NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6\">node_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00001\">1</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"afca510572b2bed862d3aae57a6eff6f7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afca510572b2bed862d3aae57a6eff6f7\">&#9670;&nbsp;</a></span>ota_status_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4\">ota_status</a> <a class=\"el\" href=\"NodeList_8h.html#afca510572b2bed862d3aae57a6eff6f7\">ota_status_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"a6d12566cf69b6429f5cce300ab1f39c9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6d12566cf69b6429f5cce300ab1f39c9\">&#9670;&nbsp;</a></span>status_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">node_status</a> <a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> state. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00001\">1</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a id=\"af7c3a73e42834705926eba633e55daa4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af7c3a73e42834705926eba633e55daa4\">&#9670;&nbsp;</a></span>control_message_type</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4\">control_message_type</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\"></a>VERSION&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\"></a>VERSION_ANS&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\"></a>SLEEP_GET&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\"></a>SLEEP_SET&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\"></a>SLEEP_ANS&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\"></a>IDENTIFY&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\"></a>RESET&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\"></a>RESET_ANS&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\"></a>RSSI_GET&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\"></a>RSSI_ANS&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\"></a>NAME_GET&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\"></a>NAME_ANS&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\"></a>NAME_SET&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\"></a>RESTART_NODE&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\"></a>RESTART_CONFIRM&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\"></a>BRCAST_KEY&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\"></a>OTA&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\"></a>OTA_ANS&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\"></a>USERDATA_GET&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\"></a>USERDATA_SET&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\"></a>INVALID&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00051\">51</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8dd9280b6a6e53e65414115f47b0df6a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8dd9280b6a6e53e65414115f47b0df6a\">&#9670;&nbsp;</a></span>node_status</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">node_status</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>State definition for nodes. </p>\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\"></a>UNREGISTERED&#160;</td><td class=\"fielddoc\"><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> is not registered. This is te initial state of every node </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\"></a>INIT&#160;</td><td class=\"fielddoc\"><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> is starting registration by ClientHello message </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\"></a>WAIT_FOR_SERVER_HELLO&#160;</td><td class=\"fielddoc\"><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> sent ClientHello message, now it is waiting for ServerHello </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\"></a>WAIT_FOR_DOWNLINK&#160;</td><td class=\"fielddoc\"><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> sent a data message, now it is waiting for downlink data </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\"></a>REGISTERED&#160;</td><td class=\"fielddoc\"><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> is registered and its key is valid </p>\n</td></tr>\n<tr><td class=\"fieldname\"><a id=\"a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\"></a>SLEEP&#160;</td><td class=\"fielddoc\"><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> is in sleep mode </p>\n</td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00023\">23</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1c9a1577fe153d9fa2548bd7c0b04b9a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1c9a1577fe153d9fa2548bd7c0b04b9a\">&#9670;&nbsp;</a></span>nodeNameStatus_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9a\">nodeNameStatus_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\"></a>NAME_OK&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\"></a>ALREADY_USED&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\"></a>EMPTY_NAME&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\"></a>TOO_LONG&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00032\">32</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"adf9286a280a40f6ac98ad07d0ba308c4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adf9286a280a40f6ac98ad07d0ba308c4\">&#9670;&nbsp;</a></span>ota_status</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4\">ota_status</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\"></a>OTA_STARTED&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\"></a>OTA_START_ERROR&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\"></a>OTA_CHECK_OK&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\"></a>OTA_CHECK_FAIL&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\"></a>OTA_OUT_OF_SEQUENCE&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\"></a>OTA_TIMEOUT&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\"></a>OTA_FINISHED&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00076\">76</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a410abac5350706d6651d4e9242730601\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a410abac5350706d6651d4e9242730601\">&#9670;&nbsp;</a></span>restartReason_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\"></a>RESTART_AFTER_OTA&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\"></a>OTA_ERROR_RESTART&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\"></a>RESTART_REQUESTED&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\"></a>CONFIG_RESET&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a410abac5350706d6651d4e9242730601ad1616fcb099e2febf3ffc5d115a99441\"></a>USER_RESET&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\"></a>IRRELEVANT&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a410abac5350706d6651d4e9242730601ab309433c1c035ba010b3aff8756d1637\"></a>UNKNOWN_REASON&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00041\">41</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/NodeList_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/NodeList.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">NodeList.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"NodeList_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">    1</a></span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _NODELIST_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _NODELIST_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">    #include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">    #include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"Filter_8h.html\">Filter.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">   23</a></span>&#160;<span class=\"keyword\">enum</span> <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">node_status</a> {</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">   24</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>, </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">   25</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">INIT</a>, </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">   26</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">WAIT_FOR_SERVER_HELLO</a>, </div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\">   27</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\">WAIT_FOR_DOWNLINK</a>, </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">   28</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>, </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\">SLEEP</a> </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\">   30</a></span>&#160;};</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9a\">   32</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> {</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\">   33</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\">NAME_OK</a> = 0,</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\">   34</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\">ALREADY_USED</a> = -1,</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\">   35</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\">EMPTY_NAME</a> = -2,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\">TOO_LONG</a> = -3</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\">   37</a></span>&#160;}<a class=\"code\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9a\">nodeNameStatus_t</a>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">node_status</a> <a class=\"code\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a>; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160; </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">   41</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> {</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\">   42</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\">RESTART_AFTER_OTA</a> = 1,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\">   43</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\">OTA_ERROR_RESTART</a> = 2,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\">   44</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\">RESTART_REQUESTED</a> = 3,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\">   45</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\">CONFIG_RESET</a> = 4,</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ad1616fcb099e2febf3ffc5d115a99441\">   46</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ad1616fcb099e2febf3ffc5d115a99441\">USER_RESET</a> = 5,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\">   47</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\">IRRELEVANT</a> = 10,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ab309433c1c035ba010b3aff8756d1637\">UNKNOWN_REASON</a> = 0</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ab309433c1c035ba010b3aff8756d1637\">   49</a></span>&#160;}<a class=\"code\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a>;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4\">   51</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4\">control_message_type</a> {</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">   52</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">VERSION</a> = 0x01,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">   53</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">VERSION_ANS</a> = 0x81,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">   54</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">SLEEP_GET</a> = 0x02,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">   55</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">SLEEP_SET</a> = 0x03,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">   56</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">SLEEP_ANS</a> = 0x82,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">   57</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">IDENTIFY</a> = 0x04,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">   58</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">RESET</a> = 0x05,</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\">   59</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\">RESET_ANS</a> = 0x85,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">   60</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">RSSI_GET</a> = 0x06,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\">   61</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\">RSSI_ANS</a> = 0x86,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">   62</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">NAME_GET</a> = 0x07,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">   63</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">NAME_ANS</a> = 0x08,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">   64</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">NAME_SET</a> = 0x87,</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">   65</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">RESTART_NODE</a> = 0x09,</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\">   66</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\">RESTART_CONFIRM</a> = 0x89,</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">   67</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">BRCAST_KEY</a> = 0x10,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">   68</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">OTA</a> = 0xEF,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">   69</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">OTA_ANS</a> = 0xFF,</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">   70</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">USERDATA_GET</a> = 0x00,</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">   71</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">USERDATA_SET</a> = 0x20,</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">INVALID</a> = 0xF0</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    <span class=\"comment\">//USERDATA_ANS = 0x90</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">   74</a></span>&#160;} <a class=\"code\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a>;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4\">   76</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4\">ota_status</a> {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\">   77</a></span>&#160;      <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\">OTA_STARTED</a> = 0,</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\">   78</a></span>&#160;      <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\">OTA_START_ERROR</a> = 1,</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\">   79</a></span>&#160;      <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\">OTA_CHECK_OK</a> = 2,</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">   80</a></span>&#160;      <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">OTA_CHECK_FAIL</a> = 3,</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\">   81</a></span>&#160;      <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\">OTA_OUT_OF_SEQUENCE</a> =4 ,</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\">   82</a></span>&#160;      <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\">OTA_TIMEOUT</a> = 5,</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;      <a class=\"code\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\">OTA_FINISHED</a> = 6</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"NodeList_8h.html#afca510572b2bed862d3aae57a6eff6f7\">   84</a></span>&#160;} <a class=\"code\" href=\"NodeList_8h.html#afca510572b2bed862d3aae57a6eff6f7\">ota_status_t</a>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html\">   89</a></span>&#160;<span class=\"keyword\">struct </span><a class=\"code\" href=\"structnode__instance.html\">node_instance</a> {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">   90</a></span>&#160;    uint8_t <a class=\"code\" href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">mac</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f\">   91</a></span>&#160;    uint16_t <a class=\"code\" href=\"structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f\">nodeId</a>; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">   92</a></span>&#160;    uint8_t <a class=\"code\" href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">key</a>[32]; </div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91\">   93</a></span>&#160;    uint16_t <a class=\"code\" href=\"structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91\">lastMessageCounter</a>; </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#aee6b3fdf81d44af5053d138136d0f7f5\">   94</a></span>&#160;    uint16_t <a class=\"code\" href=\"structnode__instance.html#aee6b3fdf81d44af5053d138136d0f7f5\">lastControlCounter</a>; </div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#a6ac60e31e921d2e101c86584eb5a5489\">   95</a></span>&#160;    uint16_t <a class=\"code\" href=\"structnode__instance.html#a6ac60e31e921d2e101c86584eb5a5489\">lastDownlinkMsgCounter</a>; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96\">   96</a></span>&#160;    time_t <a class=\"code\" href=\"structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96\">keyValidFrom</a>; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#a7eadabd847f82e2383dd440fd3cddc37\">   97</a></span>&#160;    time_t <a class=\"code\" href=\"structnode__instance.html#a7eadabd847f82e2383dd440fd3cddc37\">lastMessageTime</a>; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#a784768cbda2285978d85c6dd17c01158\">   98</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> <a class=\"code\" href=\"structnode__instance.html#a784768cbda2285978d85c6dd17c01158\">status</a> = <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a>; </div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f\">   99</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f\">keyValid</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#adc14b97d211609ff286c2edc4bcbe061\">  100</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"structnode__instance.html#adc14b97d211609ff286c2edc4bcbe061\">sleepyNode</a> = <span class=\"keyword\">true</span>; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"structnode__instance.html#ad979924ffe46421c554052889ee590fb\">  101</a></span>&#160;    <span class=\"keywordtype\">char</span> <a class=\"code\" href=\"structnode__instance.html#ad979924ffe46421c554052889ee590fb\">nodeName</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span><a class=\"code\" href=\"structnode__instance.html\">node_instance</a> <a class=\"code\" href=\"structnode__instance.html\">node_t</a>;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160; </div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html\">  109</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classNode.html\">Node</a> {</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <a class=\"code\" href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">Node</a> ();</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160; </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <span class=\"keyword\">explicit</span> <a class=\"code\" href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">Node</a> (<a class=\"code\" href=\"structnode__instance.html\">node_t</a> nodeData);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160; </div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">  128</a></span>&#160;    uint8_t *<a class=\"code\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">getMacAddress</a> () {</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">mac</a>;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160; </div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">  136</a></span>&#160;    uint16_t <a class=\"code\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> () {</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a>;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">  144</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">setNodeId</a> (uint16_t <a class=\"code\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a>) {</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        this-&gt;nodeId = <a class=\"code\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a>;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">  152</a></span>&#160;    <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">getNodeName</a> () {</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        <span class=\"keywordflow\">if</span> (strlen (<a class=\"code\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">nodeName</a>)) {</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;            <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">nodeName</a>;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;            <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160; </div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">  164</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">setNodeName</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name) {</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        memset (<a class=\"code\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">nodeName</a>, 0, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        strncpy (<a class=\"code\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">nodeName</a>, name, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160; </div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">  173</a></span>&#160;    uint8_t *<a class=\"code\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> () {</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a>;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160; </div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">setEncryptionKey</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a>);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160; </div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a30a8e0aaad582a1baa269c6641150586\">  187</a></span>&#160;    time_t <a class=\"code\" href=\"classNode.html#a30a8e0aaad582a1baa269c6641150586\">getKeyValidFrom</a> () {</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">keyValidFrom</a>;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160; </div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">  195</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">setKeyValidFrom</a> (time_t <a class=\"code\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">keyValidFrom</a>) {</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        this-&gt;keyValidFrom = <a class=\"code\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">keyValidFrom</a>;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160; </div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">  203</a></span>&#160;    time_t <a class=\"code\" href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">getLastMessageTime</a> () {</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a2d56bbba3211927eff545e385ef5d162\">lastMessageTime</a>;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160; </div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">  210</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">setLastMessageTime</a> () {</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        <a class=\"code\" href=\"classNode.html#a2d56bbba3211927eff545e385ef5d162\">lastMessageTime</a> = millis ();</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160; </div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">  218</a></span>&#160;    uint16_t <a class=\"code\" href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">getLastMessageCounter</a> () {</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">lastMessageCounter</a>;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160; </div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">  226</a></span>&#160;    uint16_t <a class=\"code\" href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">getLastControlCounter</a> () {</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">lastControlCounter</a>;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160; </div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">  234</a></span>&#160;    uint16_t <a class=\"code\" href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">getLastDownlinkMsgCounter</a> () {</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">lastDownlinkMsgCounter</a>;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160; </div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">  242</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">setLastMessageCounter</a> (uint16_t counter) {</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;        <a class=\"code\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">lastMessageCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160; </div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">  250</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">setLastControlCounter</a> (uint16_t counter) {</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        <a class=\"code\" href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">lastControlCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160; </div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">  258</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">setLastDownlinkMsgCounter</a> (uint16_t counter) {</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        <a class=\"code\" href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">lastDownlinkMsgCounter</a> = counter;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160; </div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">  266</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">setMacAddress</a> (<span class=\"keyword\">const</span> uint8_t *macAddress) {</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;        <span class=\"keywordflow\">if</span> (macAddress) {</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;            memcpy (<a class=\"code\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">mac</a>, macAddress, 6);</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160; </div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">  276</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">isKeyValid</a> () {</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">keyValid</a>;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160; </div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">  284</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">setKeyValid</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;        <a class=\"code\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">keyValid</a> = <a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160; </div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">  292</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">isRegistered</a> () {</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a> == <a class=\"code\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a>;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160; </div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">  300</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> <a class=\"code\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a> () {</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160; </div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">  308</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">setStatus</a> (<a class=\"code\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> <a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;        this-&gt;status = <a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160; </div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;    <a class=\"code\" href=\"structnode__instance.html\">node_t</a> <a class=\"code\" href=\"classNode.html#a129745eaa2b8e08ac8201809a6e2cb17\">getNodeData</a> ();</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160; </div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">printToSerial</a> (Stream *port = &amp;Serial);</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160; </div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ();</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160; </div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">  334</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">setSleepy</a> (<span class=\"keywordtype\">bool</span> sleepy) {</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">initAsSleepy</a>) {</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;            <a class=\"code\" href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">sleepyNode</a> = sleepy;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;            <a class=\"code\" href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">sleepyNode</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160; </div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a3621fd27cee1a28145a7daa167ad0b3d\">  346</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a3621fd27cee1a28145a7daa167ad0b3d\">setInitAsSleepy</a> (<span class=\"keywordtype\">bool</span> sleepy) {</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        <a class=\"code\" href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">initAsSleepy</a> = sleepy;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160; </div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">  354</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">getInitAsSleepy</a> () {</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">initAsSleepy</a>;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160; </div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">  363</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> () {</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">sleepyNode</a>;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160; </div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">  373</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">broadcastIsEnabled</a> () {</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\">#ifndef DISABLE_BRCAST</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed\">broadcastEnabled</a>;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160; </div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a2c6ecfa165b71155d3d25331ca56d98e\">  386</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a2c6ecfa165b71155d3d25331ca56d98e\">enableBroadcast</a> (<span class=\"keywordtype\">bool</span> broadcast) {</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\">#ifndef DISABLE_BRCAST</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        <a class=\"code\" href=\"classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed\">broadcastEnabled</a> = broadcast;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160; </div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a0e298bac431d8ac9e98fb12b71292de1\">  396</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a0e298bac431d8ac9e98fb12b71292de1\">setBroadcastKeyRequested</a> (<span class=\"keywordtype\">bool</span> request) {</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;        <a class=\"code\" href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">broadcastKeyRequested</a> = request;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160; </div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a30aa0104f6df938075c7ff4ac64b3f41\">  404</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a30aa0104f6df938075c7ff4ac64b3f41\">isBroadcastKeyRequested</a> () {</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">broadcastKeyRequested</a>;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160; </div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a71c1077723465057bd8cbc90f33c2ead\">updatePacketsRate</a> (<span class=\"keywordtype\">float</span> value);</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160; </div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#ac9cb809cbf8a76bda02e2c92731b213b\">  418</a></span>&#160;    int8_t <a class=\"code\" href=\"classNode.html#ac9cb809cbf8a76bda02e2c92731b213b\">getRSSI</a> () {</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">rssi</a>;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160; </div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#aa14110f23c8cfe73c44e1a87382a1081\">  426</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#aa14110f23c8cfe73c44e1a87382a1081\">setRSSI</a> (int8_t <a class=\"code\" href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">rssi</a>) {</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        this-&gt;rssi = <a class=\"code\" href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">rssi</a>;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a4bb77cd04f77b857935836284c5e41af\">  434</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a4bb77cd04f77b857935836284c5e41af\">useTimeSync</a> () {</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a918b7ad8582d1b2d569dbd66a262ee50\">askedTimeSync</a>;</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a121f5ac6ef71317bd8900b97a8abc65a\">  441</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a121f5ac6ef71317bd8900b97a8abc65a\">setTimeSyncEnabled</a> () {</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;        <a class=\"code\" href=\"classNode.html#a918b7ad8582d1b2d569dbd66a262ee50\">askedTimeSync</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160; </div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a628b04339453635be34148c9fbe66506\">  449</a></span>&#160;    uint8_t* <a class=\"code\" href=\"classNode.html#a628b04339453635be34148c9fbe66506\">getVersion</a> () {</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">enigmaIOTVersion</a>;</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160; </div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#accf5025ffbf53e48db9ab7f429c68b1e\">  459</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#accf5025ffbf53e48db9ab7f429c68b1e\">setVersion</a> (uint8_t major, uint8_t minor, uint8_t incremental) {</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;        <a class=\"code\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">enigmaIOTVersion</a>[0] = major;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;        <a class=\"code\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">enigmaIOTVersion</a>[1] = minor;</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;        <a class=\"code\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">enigmaIOTVersion</a>[2] = incremental;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160; </div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a712ec21cec6ac19ee68c8beb202fbf92\">  465</a></span>&#160;    uint8_t <a class=\"code\" href=\"classNode.html#a712ec21cec6ac19ee68c8beb202fbf92\">queuedMessage</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a41f17a6abd376d602bef3925c751a181\">  466</a></span>&#160;    <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classNode.html#a41f17a6abd376d602bef3925c751a181\">qMessageLength</a>;  </div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a0db2a4dfda51cfc5afe8c846a622ba54\">  467</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a0db2a4dfda51cfc5afe8c846a622ba54\">qMessagePending</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160; </div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#aedfde4376c7c84dd8c88c2c530b3b102\">  469</a></span>&#160;    uint32_t <a class=\"code\" href=\"classNode.html#aedfde4376c7c84dd8c88c2c530b3b102\">packetNumber</a> = 0; </div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a4e2e4c6afb4bf93ca10e60d239fd87c5\">  470</a></span>&#160;    uint32_t <a class=\"code\" href=\"classNode.html#a4e2e4c6afb4bf93ca10e60d239fd87c5\">packetErrors</a> = 0; </div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a2f8f6419cc10c972285178991b2cec78\">  471</a></span>&#160;    <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"classNode.html#a2f8f6419cc10c972285178991b2cec78\">per</a> = 0;  </div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">  472</a></span>&#160;    <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">packetsHour</a> = 0; </div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;    <span class=\"comment\">//int64_t t1, t2, t3, t4;  ///&lt; @brief Timestaps to calculate clock offset</span></div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160; </div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;<span class=\"comment\">//#define KEYLENGTH 32</span></div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">  477</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">keyValid</a>; </div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">  478</a></span>&#160;    <a class=\"code\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> <a class=\"code\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>; </div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">  479</a></span>&#160;    uint16_t <a class=\"code\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">lastMessageCounter</a>; </div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">  480</a></span>&#160;    uint16_t <a class=\"code\" href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">lastControlCounter</a>; </div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">  481</a></span>&#160;    uint16_t <a class=\"code\" href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">lastDownlinkMsgCounter</a>; </div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">  482</a></span>&#160;    uint16_t <a class=\"code\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a>; </div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">  483</a></span>&#160;    timer_t <a class=\"code\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">keyValidFrom</a>; </div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">  484</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">sleepyNode</a> = <span class=\"keyword\">true</span>; </div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed\">  485</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed\">broadcastEnabled</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">  486</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">broadcastKeyRequested</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">  487</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">initAsSleepy</a>; </div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a918b7ad8582d1b2d569dbd66a262ee50\">  488</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNode.html#a918b7ad8582d1b2d569dbd66a262ee50\">askedTimeSync</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">  489</a></span>&#160;    uint8_t <a class=\"code\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">mac</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]; </div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">  490</a></span>&#160;    uint8_t <a class=\"code\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a2d56bbba3211927eff545e385ef5d162\">  491</a></span>&#160;    timer_t <a class=\"code\" href=\"classNode.html#a2d56bbba3211927eff545e385ef5d162\">lastMessageTime</a>; </div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">  492</a></span>&#160;    <a class=\"code\" href=\"classFilterClass.html\">FilterClass</a>* <a class=\"code\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">rateFilter</a>; </div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">  493</a></span>&#160;    <span class=\"keywordtype\">char</span> <a class=\"code\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">nodeName</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">  494</a></span>&#160;    int8_t <a class=\"code\" href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">rssi</a>; </div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">  495</a></span>&#160;    uint8_t <a class=\"code\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">enigmaIOTVersion</a>[3]; </div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160; </div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">initRateFilter</a> ();</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160; </div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNode.html#a796dbbcdb4e627658df143380ddb88fa\">  502</a></span>&#160;    <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code\" href=\"classNodeList.html\">NodeList</a>;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160; </div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160; </div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html\">  506</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classNodeList.html\">NodeList</a> {</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160; </div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;    <a class=\"code\" href=\"classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f\">NodeList</a> ();</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160; </div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a> *<a class=\"code\" href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">getNodeFromID</a> (uint16_t nodeId);</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160; </div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a> *<a class=\"code\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">getNodeFromMAC</a> (<span class=\"keyword\">const</span> uint8_t* mac);</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160; </div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">getNodeFromName</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name);</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;    int8_t <a class=\"code\" href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">checkNodeName</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* name, <span class=\"keyword\">const</span> uint8_t* address);</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160; </div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a> *<a class=\"code\" href=\"classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711\">findEmptyNode</a> ();</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;    uint16_t <a class=\"code\" href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">countActiveNodes</a> ();</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">unregisterNode</a> (uint16_t nodeId);</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">unregisterNode</a> (<span class=\"keyword\">const</span> uint8_t* mac);</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">unregisterNode</a> (<a class=\"code\" href=\"classNode.html\">Node</a> *node);</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160; </div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a> *<a class=\"code\" href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">getNextActiveNode</a> (uint16_t nodeId);</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160; </div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a> *<a class=\"code\" href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">getNextActiveNode</a> (<a class=\"code\" href=\"classNode.html\">Node</a>* node);</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160; </div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a> *<a class=\"code\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">getNewNode</a> (<span class=\"keyword\">const</span> uint8_t* mac);</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160; </div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">printToSerial</a> (Stream *port);</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160; </div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">  607</a></span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a>* <a class=\"code\" href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">getBroadcastNode</a> () {</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;        <span class=\"keywordflow\">return</span> &amp;<a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>;</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160; </div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">initBroadcastNode</a> ();</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160; </div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#acfff6ed812a219b7b7514989da7fc34e\">  620</a></span>&#160;    uint16_t <a class=\"code\" href=\"classNodeList.html#acfff6ed812a219b7b7514989da7fc34e\">getLastBroadcastMsgCounter</a> () {</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7\">lastBroadcastMsgCounter</a>;</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160; </div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042\">  627</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042\">incLastBroadcastMsgCounter</a> () {</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;        <a class=\"code\" href=\"classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7\">lastBroadcastMsgCounter</a>++;</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160; </div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">  632</a></span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a> <a class=\"code\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a>[<a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>]; </div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">  633</a></span>&#160;    <a class=\"code\" href=\"classNode.html\">Node</a> <a class=\"code\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a>; </div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\"><a class=\"line\" href=\"classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7\">  634</a></span>&#160;    uint16_t <a class=\"code\" href=\"classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7\">lastBroadcastMsgCounter</a>; </div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160; </div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160; </div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160; </div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\">OTA_CHECK_OK</a></div><div class=\"ttdeci\">@ OTA_CHECK_OK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00079\">NodeList.h:79</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_af2378f7b085ccdc06314b12263fd2d34\"><div class=\"ttname\"><a href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">Node::lastMessageCounter</a></div><div class=\"ttdeci\">uint16_t lastMessageCounter</div><div class=\"ttdoc\">Last message counter state for specific Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00479\">NodeList.h:479</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\">OTA_ERROR_RESTART</a></div><div class=\"ttdeci\">@ OTA_ERROR_RESTART</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00043\">NodeList.h:43</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a5daacbc6f74ec14aa03325d96ef51ed3\"><div class=\"ttname\"><a href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">NodeList::broadcastNode</a></div><div class=\"ttdeci\">Node broadcastNode</div><div class=\"ttdoc\">Node instance that holds data used for broadcast messages. This does not represent any individual nod...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00633\">NodeList.h:633</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aebc89c4269923800190e3c340f45d550\"><div class=\"ttname\"><a href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">Node::broadcastKeyRequested</a></div><div class=\"ttdeci\">bool broadcastKeyRequested</div><div class=\"ttdoc\">Node is waiting for broadcast key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00486\">NodeList.h:486</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a68eac7f22f879dbe7bb1dec0615c5ce9\"><div class=\"ttname\"><a href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">Node::setLastDownlinkMsgCounter</a></div><div class=\"ttdeci\">void setLastDownlinkMsgCounter(uint16_t counter)</div><div class=\"ttdoc\">Sets counter for last downlink message from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00258\">NodeList.h:258</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">VERSION_ANS</a></div><div class=\"ttdeci\">@ VERSION_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00053\">NodeList.h:53</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">IDENTIFY</a></div><div class=\"ttdeci\">@ IDENTIFY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00057\">NodeList.h:57</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a6988622d76bd1d76a0d040d97b8d2c91\"><div class=\"ttname\"><a href=\"structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91\">node_instance::lastMessageCounter</a></div><div class=\"ttdeci\">uint16_t lastMessageCounter</div><div class=\"ttdoc\">Last message counter state for specific Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00093\">NodeList.h:93</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae7d5f900dd1290910a30692175dc8e23\"><div class=\"ttname\"><a href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">Node::setLastMessageTime</a></div><div class=\"ttdeci\">void setLastMessageTime()</div><div class=\"ttdoc\">Sets current moment as last node message time.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00210\">NodeList.h:210</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_ad2f5b99eaeeb4f3b805acb0a019b6711\"><div class=\"ttname\"><a href=\"classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711\">NodeList::findEmptyNode</a></div><div class=\"ttdeci\">Node * findEmptyNode()</div><div class=\"ttdoc\">Searches for a free place for a new Node instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00234\">NodeList.cpp:234</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aedfde4376c7c84dd8c88c2c530b3b102\"><div class=\"ttname\"><a href=\"classNode.html#aedfde4376c7c84dd8c88c2c530b3b102\">Node::packetNumber</a></div><div class=\"ttdeci\">uint32_t packetNumber</div><div class=\"ttdoc\">Number of packets received from node to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00469\">NodeList.h:469</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">SLEEP_SET</a></div><div class=\"ttdeci\">@ SLEEP_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00055\">NodeList.h:55</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">RESTART_NODE</a></div><div class=\"ttdeci\">@ RESTART_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00065\">NodeList.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a08caf502661a3bf1b75ba6860eb1bebe\"><div class=\"ttname\"><a href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">NodeList::getNodeFromName</a></div><div class=\"ttdeci\">Node * getNodeFromName(const char *name)</div><div class=\"ttdoc\">Gets node that correspond with given node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00174\">NodeList.cpp:174</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\">EMPTY_NAME</a></div><div class=\"ttdeci\">@ EMPTY_NAME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00035\">NodeList.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a2d56bbba3211927eff545e385ef5d162\"><div class=\"ttname\"><a href=\"classNode.html#a2d56bbba3211927eff545e385ef5d162\">Node::lastMessageTime</a></div><div class=\"ttdeci\">timer_t lastMessageTime</div><div class=\"ttdoc\">Node state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00491\">NodeList.h:491</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">USERDATA_SET</a></div><div class=\"ttdeci\">@ USERDATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00071\">NodeList.h:71</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_aee6b3fdf81d44af5053d138136d0f7f5\"><div class=\"ttname\"><a href=\"structnode__instance.html#aee6b3fdf81d44af5053d138136d0f7f5\">node_instance::lastControlCounter</a></div><div class=\"ttdeci\">uint16_t lastControlCounter</div><div class=\"ttdoc\">Last control message counter state for specific Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00094\">NodeList.h:94</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a31c7b1dce5c26d81ead2cabf5395d935\"><div class=\"ttname\"><a href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">Node::setNodeName</a></div><div class=\"ttdeci\">void setNodeName(const char *name)</div><div class=\"ttdoc\">Sets Node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00164\">NodeList.h:164</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a239930df15810784dab9a3284730a35f\"><div class=\"ttname\"><a href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">NodeList::printToSerial</a></div><div class=\"ttdeci\">void printToSerial(Stream *port)</div><div class=\"ttdoc\">Dumps node list data to a Stream object.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00340\">NodeList.cpp:340</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a774efd63a9d427c0911b07dc3a7ac11d\"><div class=\"ttname\"><a href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">Node::sleepyNode</a></div><div class=\"ttdeci\">bool sleepyNode</div><div class=\"ttdoc\">Node sleepy definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00484\">NodeList.h:484</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a628b04339453635be34148c9fbe66506\"><div class=\"ttname\"><a href=\"classNode.html#a628b04339453635be34148c9fbe66506\">Node::getVersion</a></div><div class=\"ttdeci\">uint8_t * getVersion()</div><div class=\"ttdoc\">Gets node EnigmaIOT version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00449\">NodeList.h:449</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a7590c6b11a260ca766a2ad46f2b0cf27\"><div class=\"ttname\"><a href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">Node::setStatus</a></div><div class=\"ttdeci\">void setStatus(status_t status)</div><div class=\"ttdoc\">Sets status for finite state machine that represents node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00308\">NodeList.h:308</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a57a69c9dde4327beeb404c83defdbdaa\"><div class=\"ttname\"><a href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">NodeList::nodes</a></div><div class=\"ttdeci\">Node nodes[NUM_NODES]</div><div class=\"ttdoc\">Static Node array that holds maximum number of supported nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00632\">NodeList.h:632</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a4e2e4c6afb4bf93ca10e60d239fd87c5\"><div class=\"ttname\"><a href=\"classNode.html#a4e2e4c6afb4bf93ca10e60d239fd87c5\">Node::packetErrors</a></div><div class=\"ttdeci\">uint32_t packetErrors</div><div class=\"ttdoc\">Number of errored packets.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00470\">NodeList.h:470</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a025eed5564c31f411fc6950a5ecd4c40\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t NODE_NAME_LENGTH</div><div class=\"ttdoc\">Maximum number of characters of node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00025\">EnigmaIoTconfigAdvanced.h:25</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601ab309433c1c035ba010b3aff8756d1637\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ab309433c1c035ba010b3aff8756d1637\">UNKNOWN_REASON</a></div><div class=\"ttdeci\">@ UNKNOWN_REASON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00049\">NodeList.h:48</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\">SLEEP</a></div><div class=\"ttdeci\">@ SLEEP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00030\">NodeList.h:29</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a0db2a4dfda51cfc5afe8c846a622ba54\"><div class=\"ttname\"><a href=\"classNode.html#a0db2a4dfda51cfc5afe8c846a622ba54\">Node::qMessagePending</a></div><div class=\"ttdeci\">bool qMessagePending</div><div class=\"ttdoc\">True if message should be sent just after next data message</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00467\">NodeList.h:467</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aa382c421546fc99b22b4698acb36c3d8\"><div class=\"ttname\"><a href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">Node::isKeyValid</a></div><div class=\"ttdeci\">bool isKeyValid()</div><div class=\"ttdoc\">Gets shared key validity for this node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00276\">NodeList.h:276</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a3621fd27cee1a28145a7daa167ad0b3d\"><div class=\"ttname\"><a href=\"classNode.html#a3621fd27cee1a28145a7daa167ad0b3d\">Node::setInitAsSleepy</a></div><div class=\"ttdeci\">void setInitAsSleepy(bool sleepy)</div><div class=\"ttdoc\">Records if node started as a sleepy node or not. If it did not started so it will never accept sleep ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00346\">NodeList.h:346</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a956635fa60412a9a026ea64245dd4443\"><div class=\"ttname\"><a href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">NodeList::initBroadcastNode</a></div><div class=\"ttdeci\">void initBroadcastNode()</div><div class=\"ttdoc\">Init broadcast node data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00161\">NodeList.cpp:161</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a04851c9373e00d3c91c11a87d052f1f2\"><div class=\"ttname\"><a href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">NodeList::getNewNode</a></div><div class=\"ttdeci\">Node * getNewNode(const uint8_t *mac)</div><div class=\"ttdoc\">Finds a node that correspond with given address of creates a new one if it does not exist.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00324\">NodeList.cpp:324</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a3615b98da7f0ea0d8615a8f45519a715\"><div class=\"ttname\"><a href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">Node::setNodeId</a></div><div class=\"ttdeci\">void setNodeId(uint16_t nodeId)</div><div class=\"ttdoc\">Sets a new Node identifier.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00144\">NodeList.h:144</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae6768d968b8f72fb12001fa3895a4670\"><div class=\"ttname\"><a href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">Node::broadcastIsEnabled</a></div><div class=\"ttdeci\">bool broadcastIsEnabled()</div><div class=\"ttdoc\">Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted b...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00373\">NodeList.h:373</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a30aa0104f6df938075c7ff4ac64b3f41\"><div class=\"ttname\"><a href=\"classNode.html#a30aa0104f6df938075c7ff4ac64b3f41\">Node::isBroadcastKeyRequested</a></div><div class=\"ttdeci\">bool isBroadcastKeyRequested()</div><div class=\"ttdoc\">Checks if node is waiting for broadcast key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00404\">NodeList.h:404</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">BRCAST_KEY</a></div><div class=\"ttdeci\">@ BRCAST_KEY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00067\">NodeList.h:67</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a03e424c2251b5b96fb68444f008f6f17\"><div class=\"ttname\"><a href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">Node::keyValid</a></div><div class=\"ttdeci\">bool keyValid</div><div class=\"ttdoc\">Node shared key valid.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00477\">NodeList.h:477</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a08530d06e81c160b346047e37839ee7d\"><div class=\"ttname\"><a href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">NodeList::getNodeFromMAC</a></div><div class=\"ttdeci\">Node * getNodeFromMAC(const uint8_t *mac)</div><div class=\"ttdoc\">Gets node that correspond with given address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00142\">NodeList.cpp:142</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a0c8a5c30939520843eda50fcee7a41a7\"><div class=\"ttname\"><a href=\"classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7\">NodeList::lastBroadcastMsgCounter</a></div><div class=\"ttdeci\">uint16_t lastBroadcastMsgCounter</div><div class=\"ttdoc\">Last broadcast message counter state for all nodes, both for data and control messages.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00634\">NodeList.h:634</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a></div><div class=\"ttdoc\">Parameter configuration.</div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a7cf92e8316f291e0a4e4ad608756887f\"><div class=\"ttname\"><a href=\"classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f\">NodeList::NodeList</a></div><div class=\"ttdeci\">NodeList()</div><div class=\"ttdoc\">Node list constructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00129\">NodeList.cpp:129</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a6591d96da1e646fcbd846e61af3e5ef2\"><div class=\"ttname\"><a href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">node_instance::key</a></div><div class=\"ttdeci\">uint8_t key[32]</div><div class=\"ttdoc\">Shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00092\">NodeList.h:92</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">OTA</a></div><div class=\"ttdeci\">@ OTA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00068\">NodeList.h:68</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_ab822a0ab8cb5fbdfc582dd7fc5c73042\"><div class=\"ttname\"><a href=\"classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042\">NodeList::incLastBroadcastMsgCounter</a></div><div class=\"ttdeci\">void incLastBroadcastMsgCounter()</div><div class=\"ttdoc\">Increments last broadcast message counter stata by one.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00627\">NodeList.h:627</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ac492ae71e392fe59002e9900fb0d8c03\"><div class=\"ttname\"><a href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">Node::initAsSleepy</a></div><div class=\"ttdeci\">bool initAsSleepy</div><div class=\"ttdoc\">Stores initial sleepy node. If this is false, this node does not accept sleep time changes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00487\">NodeList.h:487</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\">RESTART_CONFIRM</a></div><div class=\"ttdeci\">@ RESTART_CONFIRM</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00066\">NodeList.h:66</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aa14110f23c8cfe73c44e1a87382a1081\"><div class=\"ttname\"><a href=\"classNode.html#aa14110f23c8cfe73c44e1a87382a1081\">Node::setRSSI</a></div><div class=\"ttdeci\">void setRSSI(int8_t rssi)</div><div class=\"ttdoc\">Stores last RSSI measurement of Gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00426\">NodeList.h:426</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">RESET</a></div><div class=\"ttdeci\">@ RESET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00058\">NodeList.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a5bf02d202c9cb76831de89e4d1ef8893\"><div class=\"ttname\"><a href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">Node::getSleepy</a></div><div class=\"ttdeci\">bool getSleepy()</div><div class=\"ttdoc\">Gets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sl...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00363\">NodeList.h:363</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a81ded601038e157ecb03daa7fb85242d\"><div class=\"ttname\"><a href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">Node::setKeyValid</a></div><div class=\"ttdeci\">void setKeyValid(bool status)</div><div class=\"ttdoc\">Sets shared key validity for this node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00284\">NodeList.h:284</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a129745eaa2b8e08ac8201809a6e2cb17\"><div class=\"ttname\"><a href=\"classNode.html#a129745eaa2b8e08ac8201809a6e2cb17\">Node::getNodeData</a></div><div class=\"ttdeci\">node_t getNodeData()</div><div class=\"ttdoc\">Gets a struct that represents node object. May be used for node serialization.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00017\">NodeList.cpp:17</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\">OTA_TIMEOUT</a></div><div class=\"ttdeci\">@ OTA_TIMEOUT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00082\">NodeList.h:82</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a7eadabd847f82e2383dd440fd3cddc37\"><div class=\"ttname\"><a href=\"structnode__instance.html#a7eadabd847f82e2383dd440fd3cddc37\">node_instance::lastMessageTime</a></div><div class=\"ttdeci\">time_t lastMessageTime</div><div class=\"ttdoc\">Last time a message was received by Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00097\">NodeList.h:97</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_adf84aafdceb7da9d9e2d9d379e2dba8f\"><div class=\"ttname\"><a href=\"structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f\">node_instance::keyValid</a></div><div class=\"ttdeci\">bool keyValid</div><div class=\"ttdoc\">Node shared key valid.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00099\">NodeList.h:99</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_acfff6ed812a219b7b7514989da7fc34e\"><div class=\"ttname\"><a href=\"classNodeList.html#acfff6ed812a219b7b7514989da7fc34e\">NodeList::getLastBroadcastMsgCounter</a></div><div class=\"ttdeci\">uint16_t getLastBroadcastMsgCounter()</div><div class=\"ttdoc\">Ask for last broadcast message counter state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00620\">NodeList.h:620</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">RSSI_GET</a></div><div class=\"ttdeci\">@ RSSI_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00060\">NodeList.h:60</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a6d12566cf69b6429f5cce300ab1f39c9\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a></div><div class=\"ttdeci\">enum node_status status_t</div><div class=\"ttdoc\">Node state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00001\">NodeList.h:39</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">INVALID</a></div><div class=\"ttdeci\">@ INVALID</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00074\">NodeList.h:72</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a6172f9eb39a02f01b692a53b9ee09c56\"><div class=\"ttname\"><a href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">Node::getStatus</a></div><div class=\"ttdeci\">status_t getStatus()</div><div class=\"ttdoc\">Gets status for finite state machine that represents node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00300\">NodeList.h:300</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\">OTA_START_ERROR</a></div><div class=\"ttdeci\">@ OTA_START_ERROR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00078\">NodeList.h:78</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\">OTA_FINISHED</a></div><div class=\"ttdeci\">@ OTA_FINISHED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00084\">NodeList.h:83</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a4f9547a1ede244be2b33d1fcf6de68b0\"><div class=\"ttname\"><a href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">Node::nodeId</a></div><div class=\"ttdeci\">uint16_t nodeId</div><div class=\"ttdoc\">Node identifier asigned by gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00482\">NodeList.h:482</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a2563f7f556d09035dbbf042656d4fa3a\"><div class=\"ttname\"><a href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">Node::getNodeId</a></div><div class=\"ttdeci\">uint16_t getNodeId()</div><div class=\"ttdoc\">Gets Node identifier.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00136\">NodeList.h:136</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a2892fb1e6830073f3419da35ddad8725\"><div class=\"ttname\"><a href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">NodeList::unregisterNode</a></div><div class=\"ttdeci\">bool unregisterNode(uint16_t nodeId)</div><div class=\"ttdoc\">Frees up a node and marks it as available.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00258\">NodeList.cpp:258</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a15877a320c33f77402c5700774d936cc\"><div class=\"ttname\"><a href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">Node::getLastMessageTime</a></div><div class=\"ttdeci\">time_t getLastMessageTime()</div><div class=\"ttdoc\">Gets last time that node sent a message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00203\">NodeList.h:203</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_accf5025ffbf53e48db9ab7f429c68b1e\"><div class=\"ttname\"><a href=\"classNode.html#accf5025ffbf53e48db9ab7f429c68b1e\">Node::setVersion</a></div><div class=\"ttdeci\">void setVersion(uint8_t major, uint8_t minor, uint8_t incremental)</div><div class=\"ttdoc\">Sets node EnigmaIOT version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00459\">NodeList.h:459</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a1033bf3bedf4c20a40176e4dd458a58f\"><div class=\"ttname\"><a href=\"structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f\">node_instance::nodeId</a></div><div class=\"ttdeci\">uint16_t nodeId</div><div class=\"ttdoc\">Node identifier asigned by gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00091\">NodeList.h:91</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a65284f939ba9d70cff90e7e508ac1a13\"><div class=\"ttname\"><a href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">Node::setKeyValidFrom</a></div><div class=\"ttdeci\">void setKeyValidFrom(time_t keyValidFrom)</div><div class=\"ttdoc\">Sets time when key was agreed with gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00195\">NodeList.h:195</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">INIT</a></div><div class=\"ttdeci\">@ INIT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00025\">NodeList.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a2d876405390237c8cbbd4689fb2f960b\"><div class=\"ttname\"><a href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">Node::setLastControlCounter</a></div><div class=\"ttdeci\">void setLastControlCounter(uint16_t counter)</div><div class=\"ttdoc\">Sets counter for last received control message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00250\">NodeList.h:250</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a9af4beb0e8a8cf8405116b92077d9027\"><div class=\"ttname\"><a href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">Node::enigmaIOTVersion</a></div><div class=\"ttdeci\">uint8_t enigmaIOTVersion[3]</div><div class=\"ttdoc\">Protocol version, filled when a version message is received.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00495\">NodeList.h:495</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_adc14b97d211609ff286c2edc4bcbe061\"><div class=\"ttname\"><a href=\"structnode__instance.html#adc14b97d211609ff286c2edc4bcbe061\">node_instance::sleepyNode</a></div><div class=\"ttdeci\">bool sleepyNode</div><div class=\"ttdoc\">Node sleepy definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00100\">NodeList.h:100</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\">RSSI_ANS</a></div><div class=\"ttdeci\">@ RSSI_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00061\">NodeList.h:61</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ac36076f507ba318d5f3fd37c9eee2cc2\"><div class=\"ttname\"><a href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">Node::lastControlCounter</a></div><div class=\"ttdeci\">uint16_t lastControlCounter</div><div class=\"ttdoc\">Last message counter state for specific Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00480\">NodeList.h:480</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_afad1c640f8fc2623996d3d2a174ad763\"><div class=\"ttname\"><a href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">Node::keyValidFrom</a></div><div class=\"ttdeci\">timer_t keyValidFrom</div><div class=\"ttdoc\">Last time that Node and Gateway agreed a key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00483\">NodeList.h:483</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_ad979924ffe46421c554052889ee590fb\"><div class=\"ttname\"><a href=\"structnode__instance.html#ad979924ffe46421c554052889ee590fb\">node_instance::nodeName</a></div><div class=\"ttdeci\">char nodeName[NODE_NAME_LENGTH]</div><div class=\"ttdoc\">Node name. Use as a human friendly name to avoid use of numeric address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00101\">NodeList.h:101</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">SLEEP_GET</a></div><div class=\"ttdeci\">@ SLEEP_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00054\">NodeList.h:54</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\">NAME_OK</a></div><div class=\"ttdeci\">@ NAME_OK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00033\">NodeList.h:33</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae1a2a8c747a1af2e7d9467ae9199edd7\"><div class=\"ttname\"><a href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">Node::setSleepy</a></div><div class=\"ttdeci\">void setSleepy(bool sleepy)</div><div class=\"ttdoc\">Sets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sl...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00334\">NodeList.h:334</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a0020539e3b49df3706fe66a44bbf3700\"><div class=\"ttname\"><a href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">NodeList::getBroadcastNode</a></div><div class=\"ttdeci\">Node * getBroadcastNode()</div><div class=\"ttdoc\">Gets broadcas node instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00607\">NodeList.h:607</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a90d944dd41d445ec73a5b9534483329f\"><div class=\"ttname\"><a href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">Node::initRateFilter</a></div><div class=\"ttdeci\">void initRateFilter()</div><div class=\"ttdoc\">Starts smoothing filter.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00067\">NodeList.cpp:67</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a918b7ad8582d1b2d569dbd66a262ee50\"><div class=\"ttname\"><a href=\"classNode.html#a918b7ad8582d1b2d569dbd66a262ee50\">Node::askedTimeSync</a></div><div class=\"ttdeci\">bool askedTimeSync</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00488\">NodeList.h:488</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">WAIT_FOR_SERVER_HELLO</a></div><div class=\"ttdeci\">@ WAIT_FOR_SERVER_HELLO</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00026\">NodeList.h:26</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601ad1616fcb099e2febf3ffc5d115a99441\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ad1616fcb099e2febf3ffc5d115a99441\">USER_RESET</a></div><div class=\"ttdeci\">@ USER_RESET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00046\">NodeList.h:46</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae4b169a75d7c1fa535eb883c28683001\"><div class=\"ttname\"><a href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">Node::getLastControlCounter</a></div><div class=\"ttdeci\">uint16_t getLastControlCounter()</div><div class=\"ttdoc\">Gets counter for last received control message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00226\">NodeList.h:226</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a7c565caad2fea0439f28d24887ac2498\"><div class=\"ttname\"><a href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">Node::reset</a></div><div class=\"ttdeci\">void reset()</div><div class=\"ttdoc\">Resets all node fields to a default initial and not registered state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00106\">NodeList.cpp:106</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a48d7a268139be97133747b7692a5f888\"><div class=\"ttname\"><a href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">Node::rssi</a></div><div class=\"ttdeci\">int8_t rssi</div><div class=\"ttdoc\">Stores last RSSI measurement.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00494\">NodeList.h:494</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a89ccd5b416ac31593da426c48ec8562a\"><div class=\"ttname\"><a href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">Node::getInitAsSleepy</a></div><div class=\"ttdeci\">bool getInitAsSleepy()</div><div class=\"ttdoc\">Gets initial sleepy mode.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00354\">NodeList.h:354</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ae7b7337fdc178fe350ac4ce2f4675040\"><div class=\"ttname\"><a href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">Node::setEncryptionKey</a></div><div class=\"ttdeci\">void setEncryptionKey(const uint8_t *key)</div><div class=\"ttdoc\">Sets encryption key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00011\">NodeList.cpp:11</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a02eb5aa6340f2d4e0cfd48f7bb661dd3\"><div class=\"ttname\"><a href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">Node::status</a></div><div class=\"ttdeci\">status_t status</div><div class=\"ttdoc\">Current node status. See enum node_status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00478\">NodeList.h:478</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_abc1ad898434142e44923f7220b6a2ae4\"><div class=\"ttname\"><a href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">Node::packetsHour</a></div><div class=\"ttdeci\">double packetsHour</div><div class=\"ttdoc\">Packet rate for a specific nope.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00472\">NodeList.h:472</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4\">control_message_type</a></div><div class=\"ttdeci\">control_message_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00051\">NodeList.h:51</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a6ac60e31e921d2e101c86584eb5a5489\"><div class=\"ttname\"><a href=\"structnode__instance.html#a6ac60e31e921d2e101c86584eb5a5489\">node_instance::lastDownlinkMsgCounter</a></div><div class=\"ttdeci\">uint16_t lastDownlinkMsgCounter</div><div class=\"ttdoc\">Last downlink message counter state for specific Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00095\">NodeList.h:95</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a72dc59a4a4d32e2918b20038f2837ee2\"><div class=\"ttname\"><a href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">NodeList::getNextActiveNode</a></div><div class=\"ttdeci\">Node * getNextActiveNode(uint16_t nodeId)</div><div class=\"ttdoc\">Gets next active node by nodeId.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00295\">NodeList.cpp:295</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a61ac445d996a9304b34fc78a2514364f\"><div class=\"ttname\"><a href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">Node::getEncriptionKey</a></div><div class=\"ttdeci\">uint8_t * getEncriptionKey()</div><div class=\"ttdoc\">Gets Node encryption key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00173\">NodeList.h:173</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">USERDATA_GET</a></div><div class=\"ttdeci\">@ USERDATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00070\">NodeList.h:70</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a71ee5004618cb61a934f136d7c2f45e2\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a></div><div class=\"ttdeci\">static const int NUM_NODES</div><div class=\"ttdoc\">Maximum number of nodes that this gateway can handle.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00032\">EnigmaIoTconfig.h:32</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_afca510572b2bed862d3aae57a6eff6f7\"><div class=\"ttname\"><a href=\"NodeList_8h.html#afca510572b2bed862d3aae57a6eff6f7\">ota_status_t</a></div><div class=\"ttdeci\">enum ota_status ota_status_t</div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\">RESTART_AFTER_OTA</a></div><div class=\"ttdeci\">@ RESTART_AFTER_OTA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00042\">NodeList.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassFilterClass_html\"><div class=\"ttname\"><a href=\"classFilterClass.html\">FilterClass</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Filter_8h_source.html#l00029\">Filter.h:29</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html\"><div class=\"ttname\"><a href=\"structnode__instance.html\">node_instance</a></div><div class=\"ttdoc\">Struct that define node fields. Used for long term storage needs.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00089\">NodeList.h:89</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a></div><div class=\"ttdeci\">restartReason_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00041\">NodeList.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aad088b52de3eb46a8c89e6cb87bdf887\"><div class=\"ttname\"><a href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">Node::key</a></div><div class=\"ttdeci\">uint8_t key[KEY_LENGTH]</div><div class=\"ttdoc\">Shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00490\">NodeList.h:490</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ab5c31a536cb60a6c86dec8524117f50e\"><div class=\"ttname\"><a href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">Node::getLastMessageCounter</a></div><div class=\"ttdeci\">uint16_t getLastMessageCounter()</div><div class=\"ttdoc\">Gets counter for last received message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00218\">NodeList.h:218</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a91fa5b6c997bf5a84369d8f9dd691c54\"><div class=\"ttname\"><a href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">Node::lastDownlinkMsgCounter</a></div><div class=\"ttdeci\">uint16_t lastDownlinkMsgCounter</div><div class=\"ttdoc\">Last downlink message counter state for specific Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00481\">NodeList.h:481</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\">WAIT_FOR_DOWNLINK</a></div><div class=\"ttdeci\">@ WAIT_FOR_DOWNLINK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00027\">NodeList.h:27</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\">OTA_OUT_OF_SEQUENCE</a></div><div class=\"ttdeci\">@ OTA_OUT_OF_SEQUENCE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00081\">NodeList.h:81</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">NAME_ANS</a></div><div class=\"ttdeci\">@ NAME_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00063\">NodeList.h:63</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a784768cbda2285978d85c6dd17c01158\"><div class=\"ttname\"><a href=\"structnode__instance.html#a784768cbda2285978d85c6dd17c01158\">node_instance::status</a></div><div class=\"ttdeci\">status_t status</div><div class=\"ttdoc\">Node state.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00098\">NodeList.h:98</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aea12cab858f40940a1ab5c61596b6355\"><div class=\"ttname\"><a href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">Node::setMacAddress</a></div><div class=\"ttdeci\">void setMacAddress(const uint8_t *macAddress)</div><div class=\"ttdoc\">Sets node address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00266\">NodeList.h:266</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aba2a2a0bc44214b57f57abd59ec5b0a2\"><div class=\"ttname\"><a href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">Node::mac</a></div><div class=\"ttdeci\">uint8_t mac[ENIGMAIOT_ADDR_LEN]</div><div class=\"ttdoc\">Node address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00489\">NodeList.h:489</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a863ca9be67da8cdc5fb9447378021e07\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a></div><div class=\"ttdeci\">const uint8_t KEY_LENGTH</div><div class=\"ttdoc\">Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00070\">EnigmaIoTconfigAdvanced.h:70</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a5c665e844c5f7f121a72baae270a2ba7\"><div class=\"ttname\"><a href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">Node::getNodeName</a></div><div class=\"ttdeci\">char * getNodeName()</div><div class=\"ttdoc\">Gets Node name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00152\">NodeList.h:152</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a0e298bac431d8ac9e98fb12b71292de1\"><div class=\"ttname\"><a href=\"classNode.html#a0e298bac431d8ac9e98fb12b71292de1\">Node::setBroadcastKeyRequested</a></div><div class=\"ttdeci\">void setBroadcastKeyRequested(bool request)</div><div class=\"ttdoc\">Mark node to be waiting for broadcast key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00396\">NodeList.h:396</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\">CONFIG_RESET</a></div><div class=\"ttdeci\">@ CONFIG_RESET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00045\">NodeList.h:45</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_adba11398693739d5fc1d9a755d4bc567\"><div class=\"ttname\"><a href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">Node::rateFilter</a></div><div class=\"ttdeci\">FilterClass * rateFilter</div><div class=\"ttdoc\">Filter for message rate smoothing.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00492\">NodeList.h:492</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_a0ae08b109bf88f4c3481509a99001f96\"><div class=\"ttname\"><a href=\"structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96\">node_instance::keyValidFrom</a></div><div class=\"ttdeci\">time_t keyValidFrom</div><div class=\"ttdoc\">Last time that Node and Gateway agreed a key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00096\">NodeList.h:96</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a09ee8b1462486a05fbcd1af2bbdd44ed\"><div class=\"ttname\"><a href=\"classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed\">Node::broadcastEnabled</a></div><div class=\"ttdeci\">bool broadcastEnabled</div><div class=\"ttdoc\">Node is able to send broadcast messages.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00485\">NodeList.h:485</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a71c1077723465057bd8cbc90f33c2ead\"><div class=\"ttname\"><a href=\"classNode.html#a71c1077723465057bd8cbc90f33c2ead\">Node::updatePacketsRate</a></div><div class=\"ttdeci\">void updatePacketsRate(float value)</div><div class=\"ttdoc\">Adds a new message rate value for filter calculation.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00101\">NodeList.cpp:101</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html\"><div class=\"ttname\"><a href=\"classNode.html\">Node</a></div><div class=\"ttdoc\">Class definition for a single sensor Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00109\">NodeList.h:109</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a712ec21cec6ac19ee68c8beb202fbf92\"><div class=\"ttname\"><a href=\"classNode.html#a712ec21cec6ac19ee68c8beb202fbf92\">Node::queuedMessage</a></div><div class=\"ttdeci\">uint8_t queuedMessage[MAX_MESSAGE_LENGTH]</div><div class=\"ttdoc\">Message queued for sending to node in case of sleepy mode.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00465\">NodeList.h:465</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_a6702f6b65634da0500f5e99ccf017178\"><div class=\"ttname\"><a href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">NodeList::checkNodeName</a></div><div class=\"ttdeci\">int8_t checkNodeName(const char *name, const uint8_t *address)</div><div class=\"ttdoc\">Check Node name for duplicate.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00201\">NodeList.cpp:201</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\">TOO_LONG</a></div><div class=\"ttdeci\">@ TOO_LONG</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00037\">NodeList.h:36</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\">ALREADY_USED</a></div><div class=\"ttdeci\">@ ALREADY_USED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00034\">NodeList.h:34</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a></div><div class=\"ttdeci\">@ UNREGISTERED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00024\">NodeList.h:24</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html\"><div class=\"ttname\"><a href=\"classNodeList.html\">NodeList</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00506\">NodeList.h:506</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a2c6ecfa165b71155d3d25331ca56d98e\"><div class=\"ttname\"><a href=\"classNode.html#a2c6ecfa165b71155d3d25331ca56d98e\">Node::enableBroadcast</a></div><div class=\"ttdeci\">void enableBroadcast(bool broadcast)</div><div class=\"ttdoc\">Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00386\">NodeList.h:386</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\">RESET_ANS</a></div><div class=\"ttdeci\">@ RESET_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00059\">NodeList.h:59</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a0b809fd0304e6e55173ac1e6fa8d3dc8\"><div class=\"ttname\"><a href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">Node::isRegistered</a></div><div class=\"ttdeci\">bool isRegistered()</div><div class=\"ttdoc\">Gets registration state of this node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00292\">NodeList.h:292</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a4cefee4f9feaa563b8e8a725a847e9ac\"><div class=\"ttname\"><a href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">Node::getMacAddress</a></div><div class=\"ttdeci\">uint8_t * getMacAddress()</div><div class=\"ttdoc\">Gets address from Node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00128\">NodeList.h:128</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">VERSION</a></div><div class=\"ttdeci\">@ VERSION</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00052\">NodeList.h:52</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a30a8e0aaad582a1baa269c6641150586\"><div class=\"ttname\"><a href=\"classNode.html#a30a8e0aaad582a1baa269c6641150586\">Node::getKeyValidFrom</a></div><div class=\"ttdeci\">time_t getKeyValidFrom()</div><div class=\"ttdoc\">Gets last time that key was agreed with gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00187\">NodeList.h:187</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ad7a34779cad45d997bfd6d3d8043c75f\"><div class=\"ttname\"><a href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">Node::Node</a></div><div class=\"ttdeci\">Node()</div><div class=\"ttdoc\">Plain constructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00078\">NodeList.cpp:78</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">OTA_ANS</a></div><div class=\"ttdeci\">@ OTA_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00069\">NodeList.h:69</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a36b675e4186420fb1f8e324fc0987cbd\"><div class=\"ttname\"><a href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">Node::printToSerial</a></div><div class=\"ttdeci\">void printToSerial(Stream *port=&amp;Serial)</div><div class=\"ttdoc\">Dumps node data to the given stream, Serial by default. This method may be used for debugging.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00032\">NodeList.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">NAME_GET</a></div><div class=\"ttdeci\">@ NAME_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00062\">NodeList.h:62</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">REGISTERED</a></div><div class=\"ttdeci\">@ REGISTERED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00028\">NodeList.h:28</a></div></div>\n<div class=\"ttc\" id=\"astructnode__instance_html_ae2c2a14ed812dd9e1886a9607fdb08c6\"><div class=\"ttname\"><a href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">node_instance::mac</a></div><div class=\"ttdeci\">uint8_t mac[ENIGMAIOT_ADDR_LEN]</div><div class=\"ttdoc\">Node address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00090\">NodeList.h:90</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a1c9a1577fe153d9fa2548bd7c0b04b9a\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9a\">nodeNameStatus_t</a></div><div class=\"ttdeci\">nodeNameStatus_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00032\">NodeList.h:32</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a2f8f6419cc10c972285178991b2cec78\"><div class=\"ttname\"><a href=\"classNode.html#a2f8f6419cc10c972285178991b2cec78\">Node::per</a></div><div class=\"ttdeci\">double per</div><div class=\"ttdoc\">Current packet error rate of a specific node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00471\">NodeList.h:471</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_aab4a7f7971eeeb4c0fa3af8064006b79\"><div class=\"ttname\"><a href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">NodeList::getNodeFromID</a></div><div class=\"ttdeci\">Node * getNodeFromID(uint16_t nodeId)</div><div class=\"ttdoc\">Gets node that correspond with given nodeId.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00135\">NodeList.cpp:135</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aa270ef450c28e630de129a94c6992805\"><div class=\"ttname\"><a href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">Node::nodeName</a></div><div class=\"ttdeci\">char nodeName[NODE_NAME_LENGTH]</div><div class=\"ttdoc\">Node name. Use as a human friendly name to avoid use of numeric address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00493\">NodeList.h:493</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aecf8d05afddcd5d460472963ee88bd2b\"><div class=\"ttname\"><a href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">Node::getLastDownlinkMsgCounter</a></div><div class=\"ttdeci\">uint16_t getLastDownlinkMsgCounter()</div><div class=\"ttdoc\">Gets counter for last downlink message from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00234\">NodeList.h:234</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4\">ota_status</a></div><div class=\"ttdeci\">ota_status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00076\">NodeList.h:76</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">OTA_CHECK_FAIL</a></div><div class=\"ttdeci\">@ OTA_CHECK_FAIL</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00080\">NodeList.h:80</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\">IRRELEVANT</a></div><div class=\"ttdeci\">@ IRRELEVANT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00047\">NodeList.h:47</a></div></div>\n<div class=\"ttc\" id=\"aclassNodeList_html_abb4895c5b9ae6b041c9102178de837c4\"><div class=\"ttname\"><a href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">NodeList::countActiveNodes</a></div><div class=\"ttdeci\">uint16_t countActiveNodes()</div><div class=\"ttdoc\">Gets the number of active nodes (registered or registering)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8cpp_source.html#l00247\">NodeList.cpp:247</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_ac5c28a5827b5a3b34222c13589adeba7\"><div class=\"ttname\"><a href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a></div><div class=\"ttdeci\">enum control_message_type control_message_type_t</div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">NAME_SET</a></div><div class=\"ttdeci\">@ NAME_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00064\">NodeList.h:64</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a41f17a6abd376d602bef3925c751a181\"><div class=\"ttname\"><a href=\"classNode.html#a41f17a6abd376d602bef3925c751a181\">Node::qMessageLength</a></div><div class=\"ttdeci\">size_t qMessageLength</div><div class=\"ttdoc\">Queued message length.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00466\">NodeList.h:466</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a8dd9280b6a6e53e65414115f47b0df6a\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">node_status</a></div><div class=\"ttdeci\">node_status</div><div class=\"ttdoc\">State definition for nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00023\">NodeList.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_aaa07721114c6b57152caf9a7b8cd4c23\"><div class=\"ttname\"><a href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">Node::setLastMessageCounter</a></div><div class=\"ttdeci\">void setLastMessageCounter(uint16_t counter)</div><div class=\"ttdoc\">Sets counter for last received message from node.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00242\">NodeList.h:242</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\"><div class=\"ttname\"><a href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">SLEEP_ANS</a></div><div class=\"ttdeci\">@ SLEEP_ANS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00056\">NodeList.h:56</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a121f5ac6ef71317bd8900b97a8abc65a\"><div class=\"ttname\"><a href=\"classNode.html#a121f5ac6ef71317bd8900b97a8abc65a\">Node::setTimeSyncEnabled</a></div><div class=\"ttdeci\">void setTimeSyncEnabled()</div><div class=\"ttdoc\">Mark node as time sync enabled.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00441\">NodeList.h:441</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_a4bb77cd04f77b857935836284c5e41af\"><div class=\"ttname\"><a href=\"classNode.html#a4bb77cd04f77b857935836284c5e41af\">Node::useTimeSync</a></div><div class=\"ttdeci\">bool useTimeSync()</div><div class=\"ttdoc\">Gets node info to check if it has requested time sync ever.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00434\">NodeList.h:434</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\"><div class=\"ttname\"><a href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\">RESTART_REQUESTED</a></div><div class=\"ttdeci\">@ RESTART_REQUESTED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00044\">NodeList.h:44</a></div></div>\n<div class=\"ttc\" id=\"aclassNode_html_ac9cb809cbf8a76bda02e2c92731b213b\"><div class=\"ttname\"><a href=\"classNode.html#ac9cb809cbf8a76bda02e2c92731b213b\">Node::getRSSI</a></div><div class=\"ttdeci\">int8_t getRSSI()</div><div class=\"ttdoc\">Gets last RSSI measurement of Gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00418\">NodeList.h:418</a></div></div>\n<div class=\"ttc\" id=\"aNodeList_8h_html_adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\"><div class=\"ttname\"><a href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\">OTA_STARTED</a></div><div class=\"ttdeci\">@ OTA_STARTED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"NodeList_8h_source.html#l00077\">NodeList.h:77</a></div></div>\n<div class=\"ttc\" id=\"aFilter_8h_html\"><div class=\"ttname\"><a href=\"Filter_8h.html\">Filter.h</a></div><div class=\"ttdoc\">Filter to process message rate or other values.</div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/SmartSwitchController_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-SmartSwitch-Controller/SmartSwitchController.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_85c13f167532cd35b89eb457361e1e18.html\">EnigmaIOT-SmartSwitch-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">SmartSwitchController.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;functional&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>&quot;</code><br />\n</div>\n<p><a href=\"SmartSwitchController_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = &quot;/customconf.json&quot;</td></tr>\n<tr class=\"memdesc:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Custom configuration file name.  <a href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">More...</a><br /></td></tr>\n<tr class=\"separator:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afd7b9fb77ec1a9513e265472288f8dba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">relayKey</a> = &quot;rly&quot;</td></tr>\n<tr class=\"separator:afd7b9fb77ec1a9513e265472288f8dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab3e9a146188c1ca883d30631455406b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a> = &quot;cmd&quot;</td></tr>\n<tr class=\"separator:ab3e9a146188c1ca883d30631455406b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac6ac941d05242bf7013c414c28fe51f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8cpp.html#ac6ac941d05242bf7013c414c28fe51f9\">buttonKey</a> = &quot;button&quot;</td></tr>\n<tr class=\"separator:ac6ac941d05242bf7013c414c28fe51f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4288d07a10402a3fbaa29d6d009f5b21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a> = &quot;link&quot;</td></tr>\n<tr class=\"separator:a4288d07a10402a3fbaa29d6d009f5b21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abf02bded45eb4f30931fba03d1839efb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a> = &quot;bstate&quot;</td></tr>\n<tr class=\"separator:abf02bded45eb4f30931fba03d1839efb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"abf02bded45eb4f30931fba03d1839efb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abf02bded45eb4f30931fba03d1839efb\">&#9670;&nbsp;</a></span>bootStateKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* bootStateKey = &quot;bstate&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00021\">21</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ac6ac941d05242bf7013c414c28fe51f9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac6ac941d05242bf7013c414c28fe51f9\">&#9670;&nbsp;</a></span>buttonKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* buttonKey = &quot;button&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00019\">19</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab3e9a146188c1ca883d30631455406b9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab3e9a146188c1ca883d30631455406b9\">&#9670;&nbsp;</a></span>commandKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* commandKey = &quot;cmd&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00018\">18</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0a5b20c0a44622656e3028948ca20a47\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0a5b20c0a44622656e3028948ca20a47\">&#9670;&nbsp;</a></span>CONFIG_FILE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto CONFIG_FILE = &quot;/customconf.json&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Custom configuration file name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00011\">11</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4288d07a10402a3fbaa29d6d009f5b21\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4288d07a10402a3fbaa29d6d009f5b21\">&#9670;&nbsp;</a></span>linkKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* linkKey = &quot;link&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00020\">20</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afd7b9fb77ec1a9513e265472288f8dba\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afd7b9fb77ec1a9513e265472288f8dba\">&#9670;&nbsp;</a></span>relayKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* relayKey = &quot;rly&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00017\">17</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/SmartSwitchController_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-SmartSwitch-Controller/SmartSwitchController.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_85c13f167532cd35b89eb457361e1e18.html\">EnigmaIOT-SmartSwitch-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">SmartSwitchController.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"SmartSwitchController_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160; </div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"SmartSwitchController_8h.html\">SmartSwitchController.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160; </div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"keyword\">using namespace </span>std;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"keyword\">using namespace </span>placeholders;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">   11</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = <span class=\"stringliteral\">&quot;/customconf.json&quot;</span>; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"comment\">// You may add some global variables you need here,</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// like serial port instances, I2C, etc</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">   17</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">relayKey</a> = <span class=\"stringliteral\">&quot;rly&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">   18</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a> = <span class=\"stringliteral\">&quot;cmd&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8cpp.html#ac6ac941d05242bf7013c414c28fe51f9\">   19</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"SmartSwitchController_8cpp.html#ac6ac941d05242bf7013c414c28fe51f9\">buttonKey</a> = <span class=\"stringliteral\">&quot;button&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">   20</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a> = <span class=\"stringliteral\">&quot;link&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">   21</a></span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a> = <span class=\"stringliteral\">&quot;bstate&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;    <span class=\"comment\">// Process incoming messages here</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;    <span class=\"comment\">// They are normally encoded as MsgPack so you can confert them to JSON very easily</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;    <span class=\"keywordflow\">if</span> (command != <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">nodeMessageType_t::DOWNSTREAM_DATA_GET</a> &amp;&amp; command != <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">nodeMessageType_t::DOWNSTREAM_DATA_SET</a>) {</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong message type&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;    <span class=\"comment\">// Check payload encoding</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;    <span class=\"keywordflow\">if</span> (payloadEncoding != <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>) {</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong payload encoding&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160; </div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    <span class=\"comment\">// Decode payload</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    DynamicJsonDocument doc (256);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;    uint8_t tempBuffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    memcpy (tempBuffer, buffer, length);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    DeserializationError error = deserializeMsgPack (doc, tempBuffer, length);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;    <span class=\"comment\">// Check decoding</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    <span class=\"keywordflow\">if</span> (error != DeserializationError::Ok) {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error decoding command: %s&quot;</span>, error.c_str ());</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160; </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Command: %d = %s&quot;</span>, command, command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">nodeMessageType_t::DOWNSTREAM_DATA_GET</a> ? <span class=\"stringliteral\">&quot;GET&quot;</span> : <span class=\"stringliteral\">&quot;SET&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    <span class=\"comment\">// Dump debug data</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;    <span class=\"keywordtype\">size_t</span> strLen = measureJson (doc) + 1;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <span class=\"keywordtype\">char</span>* strBuffer = (<span class=\"keywordtype\">char</span>*)malloc (strLen);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    serializeJson (doc, strBuffer, strLen);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Data: %s&quot;</span>, strBuffer);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    free (strBuffer);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160; </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    <span class=\"comment\">// Check cmd field on JSON data</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    <span class=\"keywordflow\">if</span> (!doc.containsKey (<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong format&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160; </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    <span class=\"keywordflow\">if</span> (command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">nodeMessageType_t::DOWNSTREAM_DATA_GET</a>) {</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keywordflow\">if</span> (!strcmp (doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>], <a class=\"code\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">relayKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Request relay status. Relay = %s&quot;</span>, config.relayStatus == <a class=\"code\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">ON</a> ? <span class=\"stringliteral\">&quot;ON&quot;</span> : <span class=\"stringliteral\">&quot;OFF&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;            <span class=\"keywordflow\">if</span> (!sendRelayStatus ()) {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending relay status&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (!strcmp (doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>], <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Request link status. Link = %s&quot;</span>, config.linked ? <span class=\"stringliteral\">&quot;enabled&quot;</span> : <span class=\"stringliteral\">&quot;disabled&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;            <span class=\"keywordflow\">if</span> (!sendLinkStatus ()) {</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending link status&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (!strcmp (doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>], <a class=\"code\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Request boot status configuration. Boot = %d&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                        config.bootStatus);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;            <span class=\"keywordflow\">if</span> (!sendBootStatus ()) {</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending boot status configuration&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160; </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    <span class=\"keywordflow\">if</span> (command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">nodeMessageType_t::DOWNSTREAM_DATA_SET</a>) {</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keywordflow\">if</span> (!strcmp (doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>], <a class=\"code\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">relayKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;            <span class=\"keywordflow\">if</span> (!doc.containsKey (<a class=\"code\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">relayKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong format&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;            <span class=\"comment\">//DEBUG_WARN (&quot;Set relay status. Relay = %s&quot;, doc[relayKey].as&lt;bool&gt; () ? &quot;ON&quot; : &quot;OFF&quot;);</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;            setRelay (doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">relayKey</a>].as&lt;bool&gt; ());</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;            <span class=\"keywordflow\">if</span> (!sendRelayStatus ()) {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending relay status&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160; </div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (!strcmp (doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>], <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;            <span class=\"keywordflow\">if</span> (!doc.containsKey (<a class=\"code\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong format&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Set link status. Link = %s&quot;</span>, doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a>].as&lt;bool&gt; () ? <span class=\"stringliteral\">&quot;enabled&quot;</span> : <span class=\"stringliteral\">&quot;disabled&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160; </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;            setLinked (doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a>].as&lt;bool&gt; ());</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;            <span class=\"keywordflow\">if</span> (!sendLinkStatus ()) {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending link status&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160; </div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (!strcmp (doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>], <a class=\"code\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;            <span class=\"keywordflow\">if</span> (!doc.containsKey (<a class=\"code\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Wrong format&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Set boot status. Link = %d&quot;</span>, doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a>].as&lt;int&gt; ());</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160; </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;            setBoot (doc[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a>].as&lt;int&gt; ());</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160; </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;            <span class=\"keywordflow\">if</span> (!sendBootStatus ()) {</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending boot status configuration&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160; </div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160; </div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6\">  138</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6\">CONTROLLER_CLASS_NAME::sendRelayStatus</a> () {</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (6);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160; </div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;    json[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>] = <a class=\"code\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">relayKey</a>;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    json[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">relayKey</a>] = config.relayStatus ? 1 : 0;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    json[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a>] = config.linked ? 1 : 0;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    json[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a>] = config.bootStatus;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160; </div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    <span class=\"keywordflow\">return</span> sendJson (json);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160; </div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e\">  150</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e\">CONTROLLER_CLASS_NAME::sendLinkStatus</a> () {</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (2);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160; </div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;    json[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>] = <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a>;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    json[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a>] = config.linked ? 1 : 0;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160; </div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;    <span class=\"keywordflow\">return</span> sendJson (json);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160; </div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b\">  160</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b\">CONTROLLER_CLASS_NAME::sendBootStatus</a> () {</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (2);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160; </div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    json[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a>] = <a class=\"code\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a>;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <span class=\"keywordtype\">int</span> bootStatus = config.bootStatus;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    json[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a>] = bootStatus;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160; </div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    <span class=\"keywordflow\">return</span> sendJson (json);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160; </div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result) {</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    <span class=\"comment\">// Respond to command with a result: true if successful, false if failed </span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160; </div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a> () {</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160; </div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;    <span class=\"comment\">// Register every HAEntity discovery function here. As many as you need</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;    addHACall (std::bind (&amp;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">CONTROLLER_CLASS_NAME::buildHASwitchDiscovery</a>, <span class=\"keyword\">this</span>));</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    addHACall (std::bind (&amp;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071\">CONTROLLER_CLASS_NAME::buildHATriggerDiscovery</a>, <span class=\"keyword\">this</span>));</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    addHACall (std::bind (&amp;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8\">CONTROLLER_CLASS_NAME::buildHALinkDiscovery</a>, <span class=\"keyword\">this</span>));</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160; </div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160; </div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;    enigmaIotNode = node;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160; </div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;    <span class=\"comment\">// You do node setup here. Use it as it was the normal setup() Arduino function</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;    pinMode (config.buttonPin, INPUT_PULLUP);</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    pinMode (config.relayPin, OUTPUT);</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160; </div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;    <span class=\"keywordflow\">if</span> (config.bootStatus != <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SAVE_RELAY_STATUS</a>) {</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        config.relayStatus = (bool)config.bootStatus;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Relay status set to Boot Status %d -&gt; %d&quot;</span>, config.bootStatus, config.relayStatus);</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Relay status set to %s&quot;</span>, config.relayStatus ? <span class=\"stringliteral\">&quot;ON&quot;</span> : <span class=\"stringliteral\">&quot;OFF&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;    digitalWrite (config.relayPin, config.relayStatus);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;    <span class=\"comment\">// if (!sendRelayStatus ()) {</span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;    <span class=\"comment\">//  DEBUG_WARN (&quot;Error sending relay status&quot;);</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;    <span class=\"comment\">// }</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160; </div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;    <span class=\"comment\">// Send a &#39;hello&#39; message when initalizing is finished</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;    sendStartAnouncement ();</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160; </div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Finish begin&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160; </div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;    <span class=\"comment\">// If your node should sleep after sending data do all remaining tasks here</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160; </div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba\">  213</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba\">CONTROLLER_CLASS_NAME::toggleRelay</a> () {</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Toggle relay&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;    config.relayStatus = !config.relayStatus;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;    digitalWrite (config.relayPin, config.relayStatus ? <a class=\"code\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">ON</a> : <a class=\"code\" href=\"SmartSwitchController_8h.html#a29e413f6725b2ba32d165ffaa35b01e5\">OFF</a>);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;    <span class=\"keywordflow\">if</span> (config.bootStatus == <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SAVE_RELAY_STATUS</a>) {</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;        <span class=\"keywordflow\">if</span> (saveConfig ()) {</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Config updated. Relay is %s&quot;</span>, config.relayStatus ? <span class=\"stringliteral\">&quot;ON&quot;</span> : <span class=\"stringliteral\">&quot;OFF&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving config&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;    sendRelayStatus ();</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160; </div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488\">  227</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488\">CONTROLLER_CLASS_NAME::setRelay</a> (<span class=\"keywordtype\">bool</span> state) {</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Set relay %s&quot;</span>, state ? <span class=\"stringliteral\">&quot;ON&quot;</span> : <span class=\"stringliteral\">&quot;OFF&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;    config.relayStatus = state;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;    digitalWrite (config.relayPin, config.relayStatus ? <a class=\"code\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">ON</a> : <a class=\"code\" href=\"SmartSwitchController_8h.html#a29e413f6725b2ba32d165ffaa35b01e5\">OFF</a>);</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;    <span class=\"keywordflow\">if</span> (config.bootStatus == <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SAVE_RELAY_STATUS</a>) {</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;        <span class=\"keywordflow\">if</span> (saveConfig ()) {</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Config updated. Relay is %s&quot;</span>, config.relayStatus ? <span class=\"stringliteral\">&quot;ON&quot;</span> : <span class=\"stringliteral\">&quot;OFF&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving config&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160; </div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9\">  240</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9\">CONTROLLER_CLASS_NAME::setLinked</a> (<span class=\"keywordtype\">bool</span> state) {</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Set link %s&quot;</span>, state ? <span class=\"stringliteral\">&quot;ON&quot;</span> : <span class=\"stringliteral\">&quot;OFF&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;    config.linked = state;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;    <span class=\"keywordflow\">if</span> (saveConfig ()) {</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Config updated. Relay is %slinked&quot;</span>, !config.relayStatus ? <span class=\"stringliteral\">&quot;not &quot;</span> : <span class=\"stringliteral\">&quot;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving config&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160; </div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897\">  250</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897\">CONTROLLER_CLASS_NAME::setBoot</a> (<span class=\"keywordtype\">int</span> state) {</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Set boot state to %d&quot;</span>, state);</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;    <span class=\"keywordflow\">if</span> (state &gt;= <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">RELAY_OFF</a> &amp;&amp; state &lt;= <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SAVE_RELAY_STATUS</a>) {</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        config.bootStatus = (<a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">bootRelayStatus_t</a>)state;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        config.bootStatus = <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">RELAY_OFF</a>;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160; </div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;    <span class=\"keywordflow\">if</span> (saveConfig ()) {</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Config updated&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error saving config&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160; </div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a> () {</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160; </div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;    <span class=\"comment\">// If your node stays allways awake do your periodic task here</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;    <span class=\"keywordflow\">if</span> (pushReleased) { <span class=\"comment\">// Enter this only if button were not pushed in the last loop</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;        <span class=\"keywordflow\">if</span> (!digitalRead (config.buttonPin)) {</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;            delay (50); <span class=\"comment\">// debounce button push</span></div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;            <span class=\"keywordflow\">if</span> (!digitalRead (config.buttonPin)) {</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;                DEBUG_INFO (<span class=\"stringliteral\">&quot;Button triggered!&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;                pushTriggered = <span class=\"keyword\">true</span>; <span class=\"comment\">// Button is pushed</span></div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;                pushReleased = <span class=\"keyword\">false</span>; <span class=\"comment\">// Mark button as not released</span></div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160; </div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;    <span class=\"keywordflow\">if</span> (pushTriggered) { <span class=\"comment\">// If button was pushed</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        pushTriggered = <span class=\"keyword\">false</span>; <span class=\"comment\">// Disable push trigger</span></div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (2);</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;        DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        json[<a class=\"code\" href=\"SmartSwitchController_8cpp.html#ac6ac941d05242bf7013c414c28fe51f9\">buttonKey</a>] = config.buttonPin;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        json[<span class=\"stringliteral\">&quot;push&quot;</span>] = 1;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;        <span class=\"keywordflow\">if</span> (sendJson (json)) {</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Push triggered sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Push send error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        <span class=\"keywordflow\">if</span> (config.linked) {</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;            toggleRelay ();</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160; </div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;    <span class=\"keywordflow\">if</span> (!pushReleased) {</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        <span class=\"keywordflow\">if</span> (digitalRead (config.buttonPin)) { <span class=\"comment\">// If button is released</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;            DEBUG_INFO (<span class=\"stringliteral\">&quot;Button released&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;            pushReleased = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160; </div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;    <span class=\"keyword\">static</span> clock_t lastSentStatus;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;    <span class=\"keyword\">static</span> clock_t sendStatusPeriod = 2000;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;    <span class=\"keywordflow\">if</span> (enigmaIotNode-&gt;isRegistered () &amp;&amp; millis () - lastSentStatus &gt; sendStatusPeriod) {</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        lastSentStatus = millis ();</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;        sendStatusPeriod = 300000;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;        sendRelayStatus ();</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160; </div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a> () {</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;    <span class=\"comment\">// It your class uses dynamic data free it up here</span></div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;    <span class=\"comment\">// This is normally not needed but it is a good practice</span></div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;    <span class=\"keywordflow\">if</span> (buttonPinParam) {</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;        <span class=\"keyword\">delete</span> (buttonPinParam);</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;        <span class=\"keyword\">delete</span> (relayPinParam);</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        <span class=\"keyword\">delete</span> (bootStatusListParam);</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <span class=\"keyword\">delete</span> (bootStatusParam);</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160; </div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a> () {</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration start ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;    <span class=\"comment\">// If you need to add custom configuration parameters do it here</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160; </div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">char</span> buttonPinParamStr[4];</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;    itoa (<a class=\"code\" href=\"SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6\">DEFAULT_BUTTON_PIN</a>, buttonPinParamStr, 10);</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">char</span> relayPinParamStr[4];</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;    itoa (<a class=\"code\" href=\"SmartSwitchController_8h.html#a77b012ee4a034b57e61216c2f25b92bf\">DEFAULT_RELAY_PIN</a>, relayPinParamStr, 10);</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;    buttonPinParam = <span class=\"keyword\">new</span> AsyncWiFiManagerParameter (<span class=\"stringliteral\">&quot;buttonPin&quot;</span>, <span class=\"stringliteral\">&quot;Button Pin&quot;</span>, buttonPinParamStr, 3, <span class=\"stringliteral\">&quot;required type=\\&quot;text\\&quot; pattern=\\&quot;^1[2-5]$|^[0-5]$\\&quot;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;    relayPinParam = <span class=\"keyword\">new</span> AsyncWiFiManagerParameter (<span class=\"stringliteral\">&quot;relayPin&quot;</span>, <span class=\"stringliteral\">&quot;Relay Pin&quot;</span>, relayPinParamStr, 3, <span class=\"stringliteral\">&quot;required type=\\&quot;text\\&quot; pattern=\\&quot;^1[2-5]$|^[0-5]$\\&quot;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;    bootStatusParam = <span class=\"keyword\">new</span> AsyncWiFiManagerParameter (<span class=\"stringliteral\">&quot;bootStatus&quot;</span>, <span class=\"stringliteral\">&quot;Boot Relay Status&quot;</span>, <span class=\"stringliteral\">&quot;&quot;</span>, 6, <span class=\"stringliteral\">&quot;required type=\\&quot;text\\&quot; list=\\&quot;bootStatusList\\&quot; pattern=\\&quot;^ON$|^OFF$|^SAVE$\\&quot;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;    bootStatusListParam = <span class=\"keyword\">new</span> AsyncWiFiManagerParameter (<span class=\"stringliteral\">&quot;&lt;datalist id=\\&quot;bootStatusList\\&quot;&gt;&quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;                                                         <span class=\"stringliteral\">&quot;&lt;option value = \\&quot;OFF\\&quot; &gt;&quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;                                                         <span class=\"stringliteral\">&quot;&lt;option valsenue = \\&quot;OFF\\&quot; &gt;&quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;                                                         <span class=\"stringliteral\">&quot;&lt;option value = \\&quot;ON\\&quot;&gt;&quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;                                                         <span class=\"stringliteral\">&quot;&lt;option value = \\&quot;SAVE\\&quot;&gt;&quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;                                                         <span class=\"stringliteral\">&quot;&lt;/datalist&gt;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">addWiFiManagerParameter</a> (buttonPinParam);</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">addWiFiManagerParameter</a> (relayPinParam);</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">addWiFiManagerParameter</a> (bootStatusListParam);</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">addWiFiManagerParameter</a> (bootStatusParam);</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160; </div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration result ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;    <span class=\"comment\">// You can read configuration paramenter values here</span></div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Button Pin: %s&quot;</span>, buttonPinParam-&gt;getValue ());</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Boot Relay Status: %s&quot;</span>, bootStatusParam-&gt;getValue ());</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160; </div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;    <span class=\"comment\">// TODO: Finish bootStatusParam analysis</span></div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160; </div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;        config.buttonPin = atoi (buttonPinParam-&gt;getValue ());</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;        <span class=\"keywordflow\">if</span> (config.buttonPin &gt; 15 || config.buttonPin &lt; 0) {</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;            config.buttonPin = <a class=\"code\" href=\"SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6\">DEFAULT_BUTTON_PIN</a>;</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;        config.relayPin = atoi (relayPinParam-&gt;getValue ());</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <span class=\"keywordflow\">if</span> (config.relayPin &gt; 15 || config.relayPin &lt; 0) {</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;            config.relayPin = <a class=\"code\" href=\"SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6\">DEFAULT_BUTTON_PIN</a>;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;        <span class=\"keywordflow\">if</span> (!strncmp (bootStatusParam-&gt;getValue (), <span class=\"stringliteral\">&quot;ON&quot;</span>, 6)) {</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;            config.bootStatus = <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\">RELAY_ON</a>;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (!strncmp (bootStatusParam-&gt;getValue (), <span class=\"stringliteral\">&quot;SAVE&quot;</span>, 6)) {</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;            config.bootStatus = <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SAVE_RELAY_STATUS</a>;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;            config.bootStatus = <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">RELAY_OFF</a>;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;        config.ON_STATE = <a class=\"code\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">ON</a>;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;        config.linked = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160; </div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;        <span class=\"keywordflow\">if</span> (!saveConfig ()) {</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error writting blind controller config to filesystem.&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Configuration stored&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Configuration does not need to be saved&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160; </div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659\">  382</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659\">CONTROLLER_CLASS_NAME::defaultConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;    config.buttonPin = <a class=\"code\" href=\"SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6\">DEFAULT_BUTTON_PIN</a>;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;    config.relayPin = <a class=\"code\" href=\"SmartSwitchController_8h.html#a77b012ee4a034b57e61216c2f25b92bf\">DEFAULT_RELAY_PIN</a>;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;    config.linked = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;    config.ON_STATE = <a class=\"code\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">ON</a>;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160; </div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160; </div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;    <span class=\"comment\">// If you need to read custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;    <span class=\"keywordtype\">bool</span> json_correct = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160; </div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;    <span class=\"keywordflow\">if</span> (!FILESYSTEM.begin ()) {</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error starting filesystem. Formatting&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;        FILESYSTEM.format ();</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160; </div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;    <span class=\"comment\">// FILESYSTEM.remove (CONFIG_FILE); // Only for testing</span></div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160; </div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;    <span class=\"keywordflow\">if</span> (FILESYSTEM.exists (<a class=\"code\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>)) {</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Opening %s file&quot;</span>, <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;        File configFile = FILESYSTEM.open (<a class=\"code\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>, <span class=\"stringliteral\">&quot;r&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;        <span class=\"keywordflow\">if</span> (configFile) {</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;            <span class=\"keywordtype\">size_t</span> size = configFile.size ();</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;%s opened. %u bytes&quot;</span>, <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>, size);</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;            DynamicJsonDocument doc (512);</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;            DeserializationError error = deserializeJson (doc, configFile);</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;            <span class=\"keywordflow\">if</span> (error) {</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Failed to parse file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;JSON file parsed&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160; </div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;            <span class=\"keywordflow\">if</span> (doc.containsKey (<span class=\"stringliteral\">&quot;buttonPin&quot;</span>) &amp;&amp;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;                doc.containsKey (<span class=\"stringliteral\">&quot;relayPin&quot;</span>) &amp;&amp;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;                doc.containsKey (<span class=\"stringliteral\">&quot;linked&quot;</span>) &amp;&amp;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;                doc.containsKey (<span class=\"stringliteral\">&quot;ON_STATE&quot;</span>) &amp;&amp;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;                doc.containsKey (<span class=\"stringliteral\">&quot;bootStatus&quot;</span>)) {</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160; </div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;                json_correct = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;                config.buttonPin = doc[<span class=\"stringliteral\">&quot;buttonPin&quot;</span>].as&lt;<span class=\"keywordtype\">int</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;                config.relayPin = doc[<span class=\"stringliteral\">&quot;relayPin&quot;</span>].as&lt;<span class=\"keywordtype\">int</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;                config.linked = doc[<span class=\"stringliteral\">&quot;linked&quot;</span>].as&lt;<span class=\"keywordtype\">bool</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;                config.ON_STATE = doc[<span class=\"stringliteral\">&quot;ON_STATE&quot;</span>].as&lt;<span class=\"keywordtype\">int</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;                <span class=\"keywordtype\">int</span> bootStatus = doc[<span class=\"stringliteral\">&quot;bootStatus&quot;</span>].as&lt;<span class=\"keywordtype\">int</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;                <span class=\"keywordflow\">if</span> (bootStatus &gt;= <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">RELAY_OFF</a> &amp;&amp; bootStatus &lt;= <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SAVE_RELAY_STATUS</a>) {</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;                    config.bootStatus = (<a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">bootRelayStatus_t</a>)bootStatus;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;                    DEBUG_WARN (<span class=\"stringliteral\">&quot;Boot status set to %d&quot;</span>, config.bootStatus);</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;                } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;                    config.bootStatus = <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">RELAY_OFF</a>;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160; </div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;            <span class=\"keywordflow\">if</span> (doc.containsKey (<span class=\"stringliteral\">&quot;relayStatus&quot;</span>)) {</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;                config.relayStatus = doc[<span class=\"stringliteral\">&quot;relayStatus&quot;</span>].as&lt;<span class=\"keywordtype\">bool</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160; </div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;            configFile.close ();</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;            <span class=\"keywordflow\">if</span> (json_correct) {</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Smart switch controller configuration successfuly read&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;                DEBUG_WARN (<span class=\"stringliteral\">&quot;Smart switch controller configuration error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;==== Smart switch Controller Configuration ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Button pin: %d&quot;</span>, config.buttonPin);</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Relay pin: %d&quot;</span>, config.relayPin);</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Linked: %s&quot;</span>, config.linked ? <span class=\"stringliteral\">&quot;true&quot;</span> : <span class=\"stringliteral\">&quot;false&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;ON level: %s &quot;</span>, config.ON_STATE ? <span class=\"stringliteral\">&quot;HIGH&quot;</span> : <span class=\"stringliteral\">&quot;LOW&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Boot relay status: %d &quot;</span>, config.bootStatus);</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160; </div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160; </div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;            <span class=\"keywordtype\">size_t</span> jsonLen = measureJsonPretty (doc) + 1;</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;            <span class=\"keywordtype\">char</span>* output = (<span class=\"keywordtype\">char</span>*)malloc (jsonLen);</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;            serializeJsonPretty (doc, output, jsonLen);</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160; </div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;File content:\\n%s&quot;</span>, output);</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160; </div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;            free (output);</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160; </div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Error opening %s&quot;</span>, <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;            defaultConfig ();</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;%s do not exist&quot;</span>, <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;        defaultConfig ();</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160; </div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;    <span class=\"keywordflow\">return</span> json_correct;</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160; </div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;    <span class=\"comment\">// If you need to save custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;    <span class=\"keywordflow\">if</span> (!FILESYSTEM.begin ()) {</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error opening filesystem&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Filesystem opened&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160; </div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;    File configFile = FILESYSTEM.open (<a class=\"code\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>, <span class=\"stringliteral\">&quot;w&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;    <span class=\"keywordflow\">if</span> (!configFile) {</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Failed to open config file %s for writing&quot;</span>, <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;        DEBUG_INFO (<span class=\"stringliteral\">&quot;%s opened for writting&quot;</span>, <a class=\"code\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a>);</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160; </div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;    DynamicJsonDocument doc (512);</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160; </div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;    doc[<span class=\"stringliteral\">&quot;buttonPin&quot;</span>] = config.buttonPin;</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;    doc[<span class=\"stringliteral\">&quot;relayPin&quot;</span>] = config.relayPin;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;    doc[<span class=\"stringliteral\">&quot;linked&quot;</span>] = config.linked;</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;    doc[<span class=\"stringliteral\">&quot;ON_STATE&quot;</span>] = config.ON_STATE;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;    doc[<span class=\"stringliteral\">&quot;relayStatus&quot;</span>] = config.relayStatus;</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;    <span class=\"keywordtype\">int</span> bootStatus = config.bootStatus;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;    doc[<span class=\"stringliteral\">&quot;bootStatus&quot;</span>] = bootStatus;</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160; </div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;    <span class=\"keywordflow\">if</span> (serializeJson (doc, configFile) == 0) {</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Failed to write to file&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;        configFile.close ();</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;        <span class=\"comment\">//FILESYSTEM.remove (CONFIG_FILE);</span></div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160; </div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;    <span class=\"keywordtype\">size_t</span> jsonLen = measureJsonPretty (doc) + 1;</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;    <span class=\"keywordtype\">char</span>* output = (<span class=\"keywordtype\">char</span>*)malloc (jsonLen);</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;    serializeJsonPretty (doc, output, jsonLen);</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160; </div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;File content:\\n%s&quot;</span>, output);</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160; </div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;    free (output);</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160; </div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;    configFile.flush ();</div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;    <span class=\"keywordtype\">size_t</span> size = configFile.size ();</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160; </div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;    <span class=\"comment\">//configFile.write ((uint8_t*)(&amp;mqttgw_config), sizeof (mqttgw_config));</span></div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;    configFile.close ();</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Smart Switch controller configuration saved to flash. %u bytes&quot;</span>, size);</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160; </div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160; </div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY   </span></div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;<span class=\"comment\">// Repeat this method for every entity</span></div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">CONTROLLER_CLASS_NAME::buildHASwitchDiscovery</a> () {</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;    <span class=\"comment\">// Select corresponding HAEntiny type</span></div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;    <a class=\"code\" href=\"classHASwitch.html\">HASwitch</a>* haEntity = <span class=\"keyword\">new</span> <a class=\"code\" href=\"classHASwitch.html\">HASwitch</a> ();</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160; </div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;    uint8_t* msgPackBuffer;</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160; </div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;    <span class=\"keywordflow\">if</span> (!haEntity) {</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;JSON object instance does not exist&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160; </div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;    <span class=\"comment\">// Add your characteristics here</span></div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;    <span class=\"comment\">// There is no need to futher modify this function</span></div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160; </div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (<span class=\"stringliteral\">&quot;switch&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">setStateOn</a> (1);</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">setStateOff</a> (0);</div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">setValueField</a> (<span class=\"stringliteral\">&quot;rly&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">setPayloadOff</a> (<span class=\"stringliteral\">&quot;{\\&quot;cmd\\&quot;:\\&quot;rly\\&quot;,\\&quot;rly\\&quot;:0}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">setPayloadOn</a> (<span class=\"stringliteral\">&quot;{\\&quot;cmd\\&quot;:\\&quot;rly\\&quot;,\\&quot;rly\\&quot;:1}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160; </div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;    <span class=\"keywordtype\">size_t</span> bufferLen = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ();</div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160; </div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;    msgPackBuffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160; </div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;    <span class=\"keywordtype\">size_t</span> len = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (bufferLen, msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160; </div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Resulting MSG pack length: %d&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160; </div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;    <span class=\"keywordflow\">if</span> (!sendHADiscovery (msgPackBuffer, len)) {</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending HA discovery message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160; </div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;    <span class=\"keywordflow\">if</span> (haEntity) {</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        <span class=\"keyword\">delete</span> (haEntity);</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160; </div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;    <span class=\"keywordflow\">if</span> (msgPackBuffer) {</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;        free (msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160; </div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8\">CONTROLLER_CLASS_NAME::buildHALinkDiscovery</a> () {</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;    <span class=\"comment\">// Select corresponding HAEntiny type</span></div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;    <a class=\"code\" href=\"classHASwitch.html\">HASwitch</a>* haEntity = <span class=\"keyword\">new</span> <a class=\"code\" href=\"classHASwitch.html\">HASwitch</a> ();</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160; </div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;    uint8_t* msgPackBuffer;</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160; </div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;    <span class=\"keywordflow\">if</span> (!haEntity) {</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;JSON object instance does not exist&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160; </div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;    <span class=\"comment\">// Add your characteristics here</span></div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;    <span class=\"comment\">// There is no need to futher modify this function</span></div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160; </div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (<span class=\"stringliteral\">&quot;link&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">setStateOn</a> (1);</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">setStateOff</a> (0);</div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">setValueField</a> (<span class=\"stringliteral\">&quot;link&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">setPayloadOff</a> (<span class=\"stringliteral\">&quot;{\\&quot;cmd\\&quot;:\\&quot;link\\&quot;,\\&quot;link\\&quot;:0}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">setPayloadOn</a> (<span class=\"stringliteral\">&quot;{\\&quot;cmd\\&quot;:\\&quot;link\\&quot;,\\&quot;link\\&quot;:1}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160; </div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;    <span class=\"keywordtype\">size_t</span> bufferLen = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ();</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160; </div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;    msgPackBuffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160; </div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;    <span class=\"keywordtype\">size_t</span> len = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (bufferLen, msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160; </div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Resulting MSG pack length: %d&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160; </div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;    <span class=\"keywordflow\">if</span> (!sendHADiscovery (msgPackBuffer, len)) {</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending HA discovery message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160; </div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;    <span class=\"keywordflow\">if</span> (haEntity) {</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        <span class=\"keyword\">delete</span> (haEntity);</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160; </div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;    <span class=\"keywordflow\">if</span> (msgPackBuffer) {</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        free (msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160; </div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071\">CONTROLLER_CLASS_NAME::buildHATriggerDiscovery</a> () {</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;    <span class=\"comment\">// Select corresponding HAEntiny type</span></div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;    <a class=\"code\" href=\"classHATrigger.html\">HATrigger</a>* haEntity = <span class=\"keyword\">new</span> <a class=\"code\" href=\"classHATrigger.html\">HATrigger</a> ();</div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160; </div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;    uint8_t* msgPackBuffer;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160; </div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;    <span class=\"keywordflow\">if</span> (!haEntity) {</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;JSON object instance does not exist&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160; </div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;    <span class=\"comment\">// Add your characteristics here</span></div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;    <span class=\"comment\">// There is no need to futher modify this function</span></div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160; </div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (<span class=\"stringliteral\">&quot;button&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">setType</a> (<a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a>);</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">setSubtype</a> (<a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">turn_on</a>);</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">setPayload</a> (<span class=\"stringliteral\">&quot;{\\&quot;button\\&quot;:4,\\&quot;push\\&quot;:1}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160; </div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;    <span class=\"keywordtype\">size_t</span> bufferLen = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ();</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160; </div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;    msgPackBuffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160; </div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;    <span class=\"keywordtype\">size_t</span> len = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (bufferLen, msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160; </div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Resulting MSG pack length: %d&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160; </div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;    <span class=\"keywordflow\">if</span> (!sendHADiscovery (msgPackBuffer, len)) {</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending HA discovery message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160; </div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;    <span class=\"keywordflow\">if</span> (haEntity) {</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;        <span class=\"keyword\">delete</span> (haEntity);</div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160; </div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;    <span class=\"keywordflow\">if</span> (msgPackBuffer) {</div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;        free (msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae06988e4ad4c8ca29e1979d14e787488\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488\">CONTROLLER_CLASS_NAME::setRelay</a></div><div class=\"ttdeci\">void setRelay(bool state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00227\">SmartSwitchController.cpp:227</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_ad299ecdb73519da56e2f5439941af544\"><div class=\"ttname\"><a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">HAEntity::measureMessage</a></div><div class=\"ttdeci\">size_t measureMessage()</div><div class=\"ttdoc\">Gets needed buffer size for discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00217\">haEntity.h:217</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a42e581722e8a914238bf0d06d8f8f51b\"><div class=\"ttname\"><a href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">HATrigger::setPayload</a></div><div class=\"ttdeci\">void setPayload(const char *payload)</div><div class=\"ttdoc\">Optional payload to match the payload being sent over the topic https://www.home-assistant....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8cpp_source.html#l00013\">haTrigger.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8cpp_html_afd7b9fb77ec1a9513e265472288f8dba\"><div class=\"ttname\"><a href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">relayKey</a></div><div class=\"ttdeci\">const char * relayKey</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00017\">SmartSwitchController.cpp:17</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html\">SmartSwitchController.h</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a129f24f1d0d268144edb3760f2153897\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897\">CONTROLLER_CLASS_NAME::setBoot</a></div><div class=\"ttdeci\">void setBoot(int state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00250\">SmartSwitchController.cpp:250</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SAVE_RELAY_STATUS</a></div><div class=\"ttdeci\">@ SAVE_RELAY_STATUS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00039\">SmartSwitchController.h:38</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a64140dc1e3e041eafbcd6eca04abb9ef\"><div class=\"ttname\"><a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">HAEntity::getAnounceMessage</a></div><div class=\"ttdeci\">size_t getAnounceMessage(int bufferlen, uint8_t *buffer)</div><div class=\"ttdoc\">Gets entity anounce message to be sent over EnigmaIOT message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00153\">haEntity.h:153</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a4fb9c73855aba7474fb26e13bd74f3cf\"><div class=\"ttname\"><a href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">HATrigger::setSubtype</a></div><div class=\"ttdeci\">void setSubtype(ha_triggerSubtype_t subtype)</div><div class=\"ttdoc\">Set trigger subtype as ha_triggerSubtype_t https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00196\">haTrigger.h:196</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae744508f79e2bdfcc7352908d537a671\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop() override</div><div class=\"ttdoc\">This should be called periodically for module handling.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00053\">ButtonController.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a273cc1f87e12fd51fd630b9716760071\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071\">CONTROLLER_CLASS_NAME::buildHATriggerDiscovery</a></div><div class=\"ttdeci\">void buildHATriggerDiscovery()</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a594adba299c47b03e4af833d224c0659\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659\">CONTROLLER_CLASS_NAME::defaultConfig</a></div><div class=\"ttdeci\">void defaultConfig()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00382\">SmartSwitchController.cpp:382</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00044\">EnigmaIOTGateway.h:44</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00042\">EnigmaIOTGateway.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a6fc95acd652b504ae0e342f7ce5450c3\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart() override</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00103\">ButtonController.cpp:103</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_aa59604bf62e63caaf3dcd6a2ad67814f\"><div class=\"ttname\"><a href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">HASwitch::setStateOn</a></div><div class=\"ttdeci\">void setStateOn(const char *payload)</div><div class=\"ttdoc\">The payload that represents the on state. Used when value that represents on state in the state_topic...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00034\">haSwitch.cpp:34</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8cpp_html_a4288d07a10402a3fbaa29d6d009f5b21\"><div class=\"ttname\"><a href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">linkKey</a></div><div class=\"ttdeci\">const char * linkKey</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00020\">SmartSwitchController.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00098\">ButtonController.cpp:98</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\">RELAY_ON</a></div><div class=\"ttdeci\">@ RELAY_ON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00037\">SmartSwitchController.h:37</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aebfd793413a629a8dad7b9565c6fa5d6\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6\">CONTROLLER_CLASS_NAME::sendRelayStatus</a></div><div class=\"ttdeci\">bool sendRelayStatus()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00138\">SmartSwitchController.cpp:138</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a77b012ee4a034b57e61216c2f25b92bf\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a77b012ee4a034b57e61216c2f25b92bf\">DEFAULT_RELAY_PIN</a></div><div class=\"ttdeci\">#define DEFAULT_RELAY_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00031\">SmartSwitchController.h:31</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html\"><div class=\"ttname\"><a href=\"classHASwitch.html\">HASwitch</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8h_source.html#l00094\">haSwitch.h:94</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a8498809d5a4ba56039c8397e1c22f272\"><div class=\"ttname\"><a href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">HASwitch::setStateOff</a></div><div class=\"ttdeci\">void setStateOff(const char *payload)</div><div class=\"ttdoc\">The payload that represents the off state. Used when value that represents off state in the state_top...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00040\">haSwitch.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_ad76d1750a6cdeebd506bfcd6752554d2\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">ON</a></div><div class=\"ttdeci\">#define ON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00032\">SmartSwitchController.h:32</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ade4924f6fec6b9984ecb542fb0e6aae8\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8\">CONTROLLER_CLASS_NAME::buildHALinkDiscovery</a></div><div class=\"ttdeci\">void buildHALinkDiscovery()</div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_ad34555ca78f7d9c9ccd49139751ed831\"><div class=\"ttname\"><a href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">HASwitch::setPayloadOff</a></div><div class=\"ttdeci\">void setPayloadOff(const char *payload)</div><div class=\"ttdoc\">The payload that represents off state. If specified, will be used for both comparing to the value in ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00020\">haSwitch.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a29e413f6725b2ba32d165ffaa35b01e5\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a29e413f6725b2ba32d165ffaa35b01e5\">OFF</a></div><div class=\"ttdeci\">#define OFF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00033\">SmartSwitchController.h:33</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a8d168a19f1c868e2cdcd7f11f70e0742\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">EnigmaIOTNodeClass::addWiFiManagerParameter</a></div><div class=\"ttdeci\">void addWiFiManagerParameter(AsyncWiFiManagerParameter *p)</div><div class=\"ttdoc\">Adds a parameter to configuration portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00735\">EnigmaIOTNode.h:735</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8cpp_html_ab3e9a146188c1ca883d30631455406b9\"><div class=\"ttname\"><a href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">commandKey</a></div><div class=\"ttdeci\">const char * commandKey</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00018\">SmartSwitchController.cpp:18</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8cpp_html_abf02bded45eb4f30931fba03d1839efb\"><div class=\"ttname\"><a href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">bootStateKey</a></div><div class=\"ttdeci\">const char * bootStateKey</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00021\">SmartSwitchController.cpp:21</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">RELAY_OFF</a></div><div class=\"ttdeci\">@ RELAY_OFF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00036\">SmartSwitchController.h:36</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4a58511842391487187927dd1b87a0dc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig() override</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00119\">ButtonController.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8cpp_html_ac6ac941d05242bf7013c414c28fe51f9\"><div class=\"ttname\"><a href=\"SmartSwitchController_8cpp.html#ac6ac941d05242bf7013c414c28fe51f9\">buttonKey</a></div><div class=\"ttdeci\">const char * buttonKey</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00019\">SmartSwitchController.cpp:19</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a53ec8322ae36a86ecab4a1cf69b5064a\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">bootRelayStatus_t</a></div><div class=\"ttdeci\">bootRelayStatus_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00035\">SmartSwitchController.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00031\">ButtonController.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">turn_on</a></div><div class=\"ttdeci\">@ turn_on</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00105\">haTrigger.h:105</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a></div><div class=\"ttdeci\">@ button_short_press</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00083\">haTrigger.h:83</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a68bf2951e6f5ba11894856104e062e6e\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result) override</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00026\">ButtonController.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a5f1c10369d22214cc912239f6973202b\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b\">CONTROLLER_CLASS_NAME::sendBootStatus</a></div><div class=\"ttdeci\">bool sendBootStatus()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00160\">SmartSwitchController.cpp:160</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html\"><div class=\"ttname\"><a href=\"classHATrigger.html\">HATrigger</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00126\">haTrigger.h:126</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a7c56c54fe627a7668789e2d5bc6d89e1\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">CONTROLLER_CLASS_NAME::buildHASwitchDiscovery</a></div><div class=\"ttdeci\">void buildHASwitchDiscovery()</div><div class=\"ttdoc\">Sends a HA discovery message for a single entity. Add as many functions like this as number of entiti...</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a9fc25e3bff52d9d4a642e5a604dd7c44\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status) override</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00109\">ButtonController.cpp:109</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a1bd8a543ed665f9e48ca47b220123063\"><div class=\"ttname\"><a href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">HAEntity::setNameSufix</a></div><div class=\"ttdeci\">void setNameSufix(const char *payload)</div><div class=\"ttdoc\">Sets name suffix. Used for multi entity nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00200\">haEntity.h:200</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a58d4755d08863514f81805d29d96605b\"><div class=\"ttname\"><a href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">HASwitch::setPayloadOn</a></div><div class=\"ttdeci\">void setPayloadOn(const char *payload)</div><div class=\"ttdoc\">The payload that represents on state. If specified, will be used for both comparing to the value in t...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00014\">haSwitch.cpp:14</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00040\">ButtonController.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a70aba1aad4cbd0a4b833b61bf67bcca9\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9\">CONTROLLER_CLASS_NAME::setLinked</a></div><div class=\"ttdeci\">void setLinked(bool state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00240\">SmartSwitchController.cpp:240</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4dea211610b294d5c4cce6f272fc1c9e\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e\">CONTROLLER_CLASS_NAME::sendLinkStatus</a></div><div class=\"ttdeci\">bool sendLinkStatus()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00150\">SmartSwitchController.cpp:150</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a237b5b70434642df1031dac738955634\"><div class=\"ttname\"><a href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">HASwitch::setValueField</a></div><div class=\"ttdeci\">void setValueField(const char *payload)</div><div class=\"ttdoc\">Defines a json key to extract device’s state from the state_topic. To determine the switches’s state ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00054\">haSwitch.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a440e2979ce22f7fac243f6063469db6c\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override</div><div class=\"ttdoc\">Called to process a downlink command.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00019\">ButtonController.cpp:19</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab2dd07a8fecca7f083f2776dbc294dc9\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig() override</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00114\">ButtonController.cpp:114</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aa91c1e67648d15fcd667e0bb070a79ba\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba\">CONTROLLER_CLASS_NAME::toggleRelay</a></div><div class=\"ttdeci\">void toggleRelay()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00213\">SmartSwitchController.cpp:213</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a64de7d7ca01199243ccc9876fcd596c6\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6\">DEFAULT_BUTTON_PIN</a></div><div class=\"ttdeci\">#define DEFAULT_BUTTON_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00030\">SmartSwitchController.h:30</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8cpp_html_a0a5b20c0a44622656e3028948ca20a47\"><div class=\"ttname\"><a href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a></div><div class=\"ttdeci\">constexpr auto CONFIG_FILE</div><div class=\"ttdoc\">Custom configuration file name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00011\">SmartSwitchController.cpp:11</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_adda48fb69d4ad6c9f95dfb7f7f92b79c\"><div class=\"ttname\"><a href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">HATrigger::setType</a></div><div class=\"ttdeci\">void setType(ha_triggerType_t type)</div><div class=\"ttdoc\">Set trigger type as ha_triggerType_t https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00178\">haTrigger.h:178</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/SmartSwitchController_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-SmartSwitch-Controller/SmartSwitchController.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_85c13f167532cd35b89eb457361e1e18.html\">EnigmaIOT-SmartSwitch-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">SmartSwitchController.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n</div>\n<p><a href=\"SmartSwitchController_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8h.html#a8257556540571a0fe1f5f05eb434af87\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;SmartSwitchController</td></tr>\n<tr class=\"separator:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a64de7d7ca01199243ccc9876fcd596c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6\">DEFAULT_BUTTON_PIN</a>&#160;&#160;&#160;4</td></tr>\n<tr class=\"separator:a64de7d7ca01199243ccc9876fcd596c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a77b012ee4a034b57e61216c2f25b92bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8h.html#a77b012ee4a034b57e61216c2f25b92bf\">DEFAULT_RELAY_PIN</a>&#160;&#160;&#160;14</td></tr>\n<tr class=\"separator:a77b012ee4a034b57e61216c2f25b92bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad76d1750a6cdeebd506bfcd6752554d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">ON</a>&#160;&#160;&#160;HIGH</td></tr>\n<tr class=\"separator:ad76d1750a6cdeebd506bfcd6752554d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a29e413f6725b2ba32d165ffaa35b01e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8h.html#a29e413f6725b2ba32d165ffaa35b01e5\">OFF</a>&#160;&#160;&#160;!<a class=\"el\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">ON</a></td></tr>\n<tr class=\"separator:a29e413f6725b2ba32d165ffaa35b01e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:a53ec8322ae36a86ecab4a1cf69b5064a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">bootRelayStatus_t</a> { <a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">RELAY_OFF</a> = 0, \n<a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\">RELAY_ON</a> = 1, \n<a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SAVE_RELAY_STATUS</a> = 2\n }</td></tr>\n<tr class=\"separator:a53ec8322ae36a86ecab4a1cf69b5064a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = &quot;SamrtSwitch <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>&quot;</td></tr>\n<tr class=\"separator:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a8257556540571a0fe1f5f05eb434af87\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8257556540571a0fe1f5f05eb434af87\">&#9670;&nbsp;</a></span>CONTROLLER_CLASS_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;SmartSwitchController</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00019\">19</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a64de7d7ca01199243ccc9876fcd596c6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a64de7d7ca01199243ccc9876fcd596c6\">&#9670;&nbsp;</a></span>DEFAULT_BUTTON_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define DEFAULT_BUTTON_PIN&#160;&#160;&#160;4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00030\">30</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a77b012ee4a034b57e61216c2f25b92bf\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a77b012ee4a034b57e61216c2f25b92bf\">&#9670;&nbsp;</a></span>DEFAULT_RELAY_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define DEFAULT_RELAY_PIN&#160;&#160;&#160;14</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00031\">31</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a29e413f6725b2ba32d165ffaa35b01e5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a29e413f6725b2ba32d165ffaa35b01e5\">&#9670;&nbsp;</a></span>OFF</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define OFF&#160;&#160;&#160;!<a class=\"el\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">ON</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00033\">33</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad76d1750a6cdeebd506bfcd6752554d2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad76d1750a6cdeebd506bfcd6752554d2\">&#9670;&nbsp;</a></span>ON</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define ON&#160;&#160;&#160;HIGH</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00032\">32</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a id=\"a53ec8322ae36a86ecab4a1cf69b5064a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a53ec8322ae36a86ecab4a1cf69b5064a\">&#9670;&nbsp;</a></span>bootRelayStatus_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">bootRelayStatus_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\"></a>RELAY_OFF&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\"></a>RELAY_ON&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\"></a>SAVE_RELAY_STATUS&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00035\">35</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0cf4eba0801e84be66f6198f07bfe287\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0cf4eba0801e84be66f6198f07bfe287\">&#9670;&nbsp;</a></span>CONTROLLER_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* CONTROLLER_NAME = &quot;SamrtSwitch <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00020\">20</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/SmartSwitchController_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-SmartSwitch-Controller/SmartSwitchController.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_85c13f167532cd35b89eb457361e1e18.html\">EnigmaIOT-SmartSwitch-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">SmartSwitchController.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"SmartSwitchController_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// BasicController.h</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160; </div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#ifndef _BASICCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#define _BASICCONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160; </div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"comment\">//#define DEBUG_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8h.html#a8257556540571a0fe1f5f05eb434af87\">   19</a></span>&#160;<span class=\"preprocessor\">#define CONTROLLER_CLASS_NAME SmartSwitchController</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">   20</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"SmartSwitchController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = <span class=\"stringliteral\">&quot;SamrtSwitch controller&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"haTrigger_8h.html\">haTrigger.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"haSwitch_8h.html\">haSwitch.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160; </div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\">// You may define data structures and constants here</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6\">   30</a></span>&#160;<span class=\"preprocessor\">#define DEFAULT_BUTTON_PIN 4</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8h.html#a77b012ee4a034b57e61216c2f25b92bf\">   31</a></span>&#160;<span class=\"preprocessor\">#define DEFAULT_RELAY_PIN 14</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">   32</a></span>&#160;<span class=\"preprocessor\">#define ON HIGH</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8h.html#a29e413f6725b2ba32d165ffaa35b01e5\">   33</a></span>&#160;<span class=\"preprocessor\">#define OFF !ON</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">   35</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> {</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">   36</a></span>&#160;    <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">RELAY_OFF</a> = 0,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\">   37</a></span>&#160;    <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\">RELAY_ON</a> = 1,</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;    <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SAVE_RELAY_STATUS</a> = 2</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">   39</a></span>&#160;} <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">bootRelayStatus_t</a>;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160; </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"structsmartSwitchControllerHw__t.html\">   41</a></span>&#160;<span class=\"keyword\">struct </span><a class=\"code\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a> {</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"structsmartSwitchControllerHw__t.html#a383953b4e6d9f3a294ed0cc56da0064a\">   42</a></span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"structsmartSwitchControllerHw__t.html#a383953b4e6d9f3a294ed0cc56da0064a\">relayPin</a>;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"structsmartSwitchControllerHw__t.html#aebd780051c191b829135d424b0b504a3\">   43</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"structsmartSwitchControllerHw__t.html#aebd780051c191b829135d424b0b504a3\">relayStatus</a>;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"structsmartSwitchControllerHw__t.html#a52575acecb3433d8a42b5eae1d036484\">   44</a></span>&#160;    uint8_t <a class=\"code\" href=\"structsmartSwitchControllerHw__t.html#a52575acecb3433d8a42b5eae1d036484\">buttonPin</a>;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"structsmartSwitchControllerHw__t.html#a311c8e216f6f9b9f492a4bf6758edf80\">   45</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"structsmartSwitchControllerHw__t.html#a311c8e216f6f9b9f492a4bf6758edf80\">linked</a>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"structsmartSwitchControllerHw__t.html#a460a8b71cd14d353299b85f46a9cf9f6\">   46</a></span>&#160;    <a class=\"code\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">bootRelayStatus_t</a> <a class=\"code\" href=\"structsmartSwitchControllerHw__t.html#a460a8b71cd14d353299b85f46a9cf9f6\">bootStatus</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"structsmartSwitchControllerHw__t.html#a4655115d731c63e4f4e98f3b2cf0f743\">   47</a></span>&#160;    <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"structsmartSwitchControllerHw__t.html#a4655115d731c63e4f4e98f3b2cf0f743\">ON_STATE</a>;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> : <a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> {</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    <span class=\"comment\">// add all parameters that your project needs here</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a\">pushTriggered</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be\">pushReleased</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a1ff33c36324249c1791357337ed932c6\">   57</a></span>&#160;    <a class=\"code\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a1ff33c36324249c1791357337ed932c6\">config</a>;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#af137736da8e1cb6c92aba6972807704a\">   58</a></span>&#160;    AsyncWiFiManagerParameter* <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af137736da8e1cb6c92aba6972807704a\">buttonPinParam</a>;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a4c81e6c8ec96a457e0e8f3e1bad4525f\">   59</a></span>&#160;    AsyncWiFiManagerParameter* <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4c81e6c8ec96a457e0e8f3e1bad4525f\">relayPinParam</a>;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ab2947853c9c4746ab59e067f00359bff\">   60</a></span>&#160;    AsyncWiFiManagerParameter* <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab2947853c9c4746ab59e067f00359bff\">bootStatusParam</a>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a652db9c565625d205fa589b5b7922431\">   61</a></span>&#160;    AsyncWiFiManagerParameter* <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a652db9c565625d205fa589b5b7922431\">bootStatusListParam</a>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160; </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">   64</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> = NULL);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">   66</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160; </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">   68</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a> ();</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160; </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">   70</a></span>&#160;    <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ();</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">   76</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">   82</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160; </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">   88</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160; </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">   90</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">   97</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160; </div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">   99</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">  101</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a> () {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"comment\">// You can send a &#39;hello&#39; message when your node starts. Useful to detect unexpected reboot</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (10);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        json[<span class=\"stringliteral\">&quot;status&quot;</span>] = <span class=\"stringliteral\">&quot;start&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        json[<span class=\"stringliteral\">&quot;device&quot;</span>] = <a class=\"code\" href=\"SmartSwitchController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a>;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"keywordtype\">char</span> version_buf[10];</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        snprintf (version_buf, 10, <span class=\"stringliteral\">&quot;%d.%d.%d&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                  <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[0], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[1], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[2]);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        json[<span class=\"stringliteral\">&quot;version&quot;</span>] = String (version_buf);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160; </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a> (json);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">  119</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">buildHASwitchDiscovery</a> ();</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071\">  120</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071\">buildHATriggerDiscovery</a> ();</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8\">  121</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8\">buildHALinkDiscovery</a> ();</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160; </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <span class=\"comment\">// You may add additional method definitions that you need here</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659\">defaultConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160; </div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba\">toggleRelay</a> ();</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160; </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488\">setRelay</a> (<span class=\"keywordtype\">bool</span> state);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160; </div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6\">sendRelayStatus</a> ();</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160; </div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9\">setLinked</a> (<span class=\"keywordtype\">bool</span> state);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160; </div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e\">sendLinkStatus</a> ();</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160; </div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897\">setBoot</a> (<span class=\"keywordtype\">int</span> state);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b\">sendBootStatus</a> ();</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160; </div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"astructsmartSwitchControllerHw__t_html_a460a8b71cd14d353299b85f46a9cf9f6\"><div class=\"ttname\"><a href=\"structsmartSwitchControllerHw__t.html#a460a8b71cd14d353299b85f46a9cf9f6\">smartSwitchControllerHw_t::bootStatus</a></div><div class=\"ttdeci\">bootRelayStatus_t bootStatus</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00046\">SmartSwitchController.h:46</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae06988e4ad4c8ca29e1979d14e787488\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488\">CONTROLLER_CLASS_NAME::setRelay</a></div><div class=\"ttdeci\">void setRelay(bool state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00227\">SmartSwitchController.cpp:227</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aa6218f8b72b75932946bb5ca74b5bc14\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart()</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a129f24f1d0d268144edb3760f2153897\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897\">CONTROLLER_CLASS_NAME::setBoot</a></div><div class=\"ttdeci\">void setBoot(int state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00250\">SmartSwitchController.cpp:250</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SAVE_RELAY_STATUS</a></div><div class=\"ttdeci\">@ SAVE_RELAY_STATUS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00039\">SmartSwitchController.h:38</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4848555c02bbbddd9af9f3f60a9117f5\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a1ff33c36324249c1791357337ed932c6\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a1ff33c36324249c1791357337ed932c6\">CONTROLLER_CLASS_NAME::config</a></div><div class=\"ttdeci\">smartSwitchControllerHw_t config</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00057\">SmartSwitchController.h:57</a></div></div>\n<div class=\"ttc\" id=\"astructsmartSwitchControllerHw__t_html_a52575acecb3433d8a42b5eae1d036484\"><div class=\"ttname\"><a href=\"structsmartSwitchControllerHw__t.html#a52575acecb3433d8a42b5eae1d036484\">smartSwitchControllerHw_t::buttonPin</a></div><div class=\"ttdeci\">uint8_t buttonPin</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00044\">SmartSwitchController.h:44</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a9c45ffb63a64a645032b9c132f86c821\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a></div><div class=\"ttdeci\">static const uint8_t ENIGMAIOT_PROT_VERS[3]</div><div class=\"ttdoc\">EnitmaIoT Version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00016\">EnigmaIoTconfig.h:16</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a584fb205957a7b3ca83fb76066af5268\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"astructsmartSwitchControllerHw__t_html_a4655115d731c63e4f4e98f3b2cf0f743\"><div class=\"ttname\"><a href=\"structsmartSwitchControllerHw__t.html#a4655115d731c63e4f4e98f3b2cf0f743\">smartSwitchControllerHw_t::ON_STATE</a></div><div class=\"ttdeci\">int ON_STATE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00047\">SmartSwitchController.h:47</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae572fe1f0d2bb7b4fb99067d815d5807\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig()</div><div class=\"ttdoc\">Saves output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a273cc1f87e12fd51fd630b9716760071\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071\">CONTROLLER_CLASS_NAME::buildHATriggerDiscovery</a></div><div class=\"ttdeci\">void buildHATriggerDiscovery()</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a594adba299c47b03e4af833d224c0659\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659\">CONTROLLER_CLASS_NAME::defaultConfig</a></div><div class=\"ttdeci\">void defaultConfig()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00382\">SmartSwitchController.cpp:382</a></div></div>\n<div class=\"ttc\" id=\"ahaSwitch_8h_html\"><div class=\"ttname\"><a href=\"haSwitch_8h.html\">haSwitch.h</a></div><div class=\"ttdoc\">Home Assistant switch integration.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae5ece1c030d9063e46127b8a48b7bfa9\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">EnigmaIOTjsonController::sendJson</a></div><div class=\"ttdeci\">bool sendJson(DynamicJsonDocument &amp;json)</div><div class=\"ttdoc\">Sends a JSON encoded message to lower layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00170\">EnigmaIOTjsonController.h:170</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a97993aade6d2d6e22e48872f71b7f40a\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a\">CONTROLLER_CLASS_NAME::pushTriggered</a></div><div class=\"ttdeci\">bool pushTriggered</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00032\">ButtonController.h:32</a></div></div>\n<div class=\"ttc\" id=\"astructsmartSwitchControllerHw__t_html_aebd780051c191b829135d424b0b504a3\"><div class=\"ttname\"><a href=\"structsmartSwitchControllerHw__t.html#aebd780051c191b829135d424b0b504a3\">smartSwitchControllerHw_t::relayStatus</a></div><div class=\"ttdeci\">bool relayStatus</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00043\">SmartSwitchController.h:43</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab1766a261776bbdd0aa7c9016b6502be\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be\">CONTROLLER_CLASS_NAME::pushReleased</a></div><div class=\"ttdeci\">bool pushReleased</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00033\">ButtonController.h:33</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a0965ba804f4f0d1533f888fa9011aa86\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result)</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\">RELAY_ON</a></div><div class=\"ttdeci\">@ RELAY_ON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00037\">SmartSwitchController.h:37</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aebfd793413a629a8dad7b9565c6fa5d6\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6\">CONTROLLER_CLASS_NAME::sendRelayStatus</a></div><div class=\"ttdeci\">bool sendRelayStatus()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00138\">SmartSwitchController.cpp:138</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af137736da8e1cb6c92aba6972807704a\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af137736da8e1cb6c92aba6972807704a\">CONTROLLER_CLASS_NAME::buttonPinParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * buttonPinParam</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00058\">SmartSwitchController.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ade4924f6fec6b9984ecb542fb0e6aae8\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8\">CONTROLLER_CLASS_NAME::buildHALinkDiscovery</a></div><div class=\"ttdeci\">void buildHALinkDiscovery()</div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">RELAY_OFF</a></div><div class=\"ttdeci\">@ RELAY_OFF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00036\">SmartSwitchController.h:36</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html\"><div class=\"ttname\"><a href=\"haTrigger_8h.html\">haTrigger.h</a></div><div class=\"ttdoc\">Home Assistant trigger integration.</div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a53ec8322ae36a86ecab4a1cf69b5064a\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">bootRelayStatus_t</a></div><div class=\"ttdeci\">bootRelayStatus_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00035\">SmartSwitchController.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div></div>\n<div class=\"ttc\" id=\"astructsmartSwitchControllerHw__t_html_a311c8e216f6f9b9f492a4bf6758edf80\"><div class=\"ttname\"><a href=\"structsmartSwitchControllerHw__t.html#a311c8e216f6f9b9f492a4bf6758edf80\">smartSwitchControllerHw_t::linked</a></div><div class=\"ttdeci\">bool linked</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00045\">SmartSwitchController.h:45</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a92a9cd1826a1a8aaca06c6e208928cdc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a652db9c565625d205fa589b5b7922431\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a652db9c565625d205fa589b5b7922431\">CONTROLLER_CLASS_NAME::bootStatusListParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * bootStatusListParam</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00061\">SmartSwitchController.h:61</a></div></div>\n<div class=\"ttc\" id=\"aSmartSwitchController_8h_html_a0cf4eba0801e84be66f6198f07bfe287\"><div class=\"ttname\"><a href=\"SmartSwitchController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a></div><div class=\"ttdeci\">static const char * CONTROLLER_NAME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00020\">SmartSwitchController.h:20</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"astructsmartSwitchControllerHw__t_html\"><div class=\"ttname\"><a href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00041\">SmartSwitchController.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a5f1c10369d22214cc912239f6973202b\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b\">CONTROLLER_CLASS_NAME::sendBootStatus</a></div><div class=\"ttdeci\">bool sendBootStatus()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00160\">SmartSwitchController.cpp:160</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a7c56c54fe627a7668789e2d5bc6d89e1\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">CONTROLLER_CLASS_NAME::buildHASwitchDiscovery</a></div><div class=\"ttdeci\">void buildHASwitchDiscovery()</div><div class=\"ttdoc\">Sends a HA discovery message for a single entity. Add as many functions like this as number of entiti...</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab2947853c9c4746ab59e067f00359bff\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab2947853c9c4746ab59e067f00359bff\">CONTROLLER_CLASS_NAME::bootStatusParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * bootStatusParam</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00060\">SmartSwitchController.h:60</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"astructsmartSwitchControllerHw__t_html_a383953b4e6d9f3a294ed0cc56da0064a\"><div class=\"ttname\"><a href=\"structsmartSwitchControllerHw__t.html#a383953b4e6d9f3a294ed0cc56da0064a\">smartSwitchControllerHw_t::relayPin</a></div><div class=\"ttdeci\">int relayPin</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00042\">SmartSwitchController.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a70aba1aad4cbd0a4b833b61bf67bcca9\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9\">CONTROLLER_CLASS_NAME::setLinked</a></div><div class=\"ttdeci\">void setLinked(bool state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00240\">SmartSwitchController.cpp:240</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4dea211610b294d5c4cce6f272fc1c9e\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e\">CONTROLLER_CLASS_NAME::sendLinkStatus</a></div><div class=\"ttdeci\">bool sendLinkStatus()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00150\">SmartSwitchController.cpp:150</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a2af1a99bb4a2d7b83125861f127279e8\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">CONTROLLER_CLASS_NAME::sendStartAnouncement</a></div><div class=\"ttdeci\">bool sendStartAnouncement()</div><div class=\"ttdoc\">Send a message to notify node has started running.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00101\">SmartSwitchController.h:101</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4c81e6c8ec96a457e0e8f3e1bad4525f\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4c81e6c8ec96a457e0e8f3e1bad4525f\">CONTROLLER_CLASS_NAME::relayPinParam</a></div><div class=\"ttdeci\">AsyncWiFiManagerParameter * relayPinParam</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8h_source.html#l00059\">SmartSwitchController.h:59</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aa91c1e67648d15fcd667e0bb070a79ba\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba\">CONTROLLER_CLASS_NAME::toggleRelay</a></div><div class=\"ttdeci\">void toggleRelay()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"SmartSwitchController_8cpp_source.html#l00213\">SmartSwitchController.cpp:213</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_afad5a8415e36756b812a53bc889fcd4b\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/annotated.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Class List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classComms__halClass.html\" target=\"_self\">Comms_halClass</a></td><td class=\"desc\">Interface for communication subsystem abstraction layer definition </td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structcomms__queue__item__t.html\" target=\"_self\">comms_queue_item_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\" target=\"_self\">CONTROLLER_CLASS_NAME</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classCryptModule.html\" target=\"_self\">CryptModule</a></td><td class=\"desc\">EnigmaIoT Crypto module. Wraps Arduino CryptoLib classes and methods </td></tr>\n<tr id=\"row_4_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\" target=\"_self\">EnigmaIOTGatewayClass</a></td><td class=\"desc\">Main gateway class. Manages communication with nodes and sends data to upper layer </td></tr>\n<tr id=\"row_5_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTjsonController.html\" target=\"_self\">EnigmaIOTjsonController</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_6_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\" target=\"_self\">EnigmaIOTNodeClass</a></td><td class=\"desc\">Main node class. Manages communication with gateway and allows sending and receiving user data </td></tr>\n<tr id=\"row_7_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\" target=\"_self\">EnigmaIOTRingBuffer</a></td><td class=\"desc\">Ring buffer class. Used to implement message buffer </td></tr>\n<tr id=\"row_8_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEspnow__halClass.html\" target=\"_self\">Espnow_halClass</a></td><td class=\"desc\">Definition for ESP-NOW hardware abstraction layer </td></tr>\n<tr id=\"row_9_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classFilterClass.html\" target=\"_self\">FilterClass</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_10_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structgateway__config__t.html\" target=\"_self\">gateway_config_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classGatewayAPI.html\" target=\"_self\">GatewayAPI</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_12_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classGatewayOutput__dummy.html\" target=\"_self\">GatewayOutput_dummy</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_13_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classGatewayOutput__generic.html\" target=\"_self\">GatewayOutput_generic</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_14_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classGwOutput__MQTT.html\" target=\"_self\">GwOutput_MQTT</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_15_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHABinarySensor.html\" target=\"_self\">HABinarySensor</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_16_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHACover.html\" target=\"_self\">HACover</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_17_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHAEntity.html\" target=\"_self\">HAEntity</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_18_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHASensor.html\" target=\"_self\">HASensor</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_19_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHASwitch.html\" target=\"_self\">HASwitch</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_20_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHATrigger.html\" target=\"_self\">HATrigger</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_21_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structmqtt__queue__item__t.html\" target=\"_self\">mqtt_queue_item_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_22_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structmqttgw__config__t.html\" target=\"_self\">mqttgw_config_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_23_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structmsg__queue__item__t.html\" target=\"_self\">msg_queue_item_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_24_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classNode.html\" target=\"_self\">Node</a></td><td class=\"desc\">Class definition for a single sensor <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> </td></tr>\n<tr id=\"row_25_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structnode__instance.html\" target=\"_self\">node_instance</a></td><td class=\"desc\">Struct that define node fields. Used for long term storage needs </td></tr>\n<tr id=\"row_26_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classNodeList.html\" target=\"_self\">NodeList</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_27_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structrtcmem__data__t.html\" target=\"_self\">rtcmem_data_t</a></td><td class=\"desc\">Context data to be stored con persistent storage to be used after wake from sleep mode </td></tr>\n<tr id=\"row_28_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\" target=\"_self\">smartSwitchControllerHw_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_29_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classTimeManagerClass.html\" target=\"_self\">TimeManagerClass</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/api_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: docs/api.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">docs/api.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classCONTROLLER__CLASS__NAME-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">CONTROLLER_CLASS_NAME Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a652db9c565625d205fa589b5b7922431\">bootStatusListParam</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab2947853c9c4746ab59e067f00359bff\">bootStatusParam</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8\">buildHALinkDiscovery</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">buildHASwitchDiscovery</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071\">buildHATriggerDiscovery</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af137736da8e1cb6c92aba6972807704a\">buttonPinParam</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab9f55dca7e50e7bbccd5b01d77fc0f05\">buttonPressSent</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a1ff33c36324249c1791357337ed932c6\">config</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">configManagerExit</a>(bool status) override</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a>(bool status)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a>(bool status)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a>(bool status)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a>(bool status)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a>(bool status)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">configManagerStart</a>() override</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659\">defaultConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">disconnectInform</a>(nodeInvalidateReason_t reason)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">private</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">enigmaIotNode</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">private</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab6ae5865908255a9379c8c60632a3e3b\">insideThermometer</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa202545b98827df6cdfeea82898cba6c\">led</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">loadConfig</a>() override</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">loop</a>() override</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa83d1a9fa08dfeb08690d132e77883db\">oneWire</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">processRxCommand</a>(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a>(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a>(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a>(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a>(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a>(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be\">pushReleased</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a\">pushTriggered</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4c81e6c8ec96a457e0e8f3e1bad4525f\">relayPinParam</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">saveConfig</a>() override</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b\">sendBootStatus</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">sendCommandResp</a>(const char *command, bool result) override</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a>(const char *command, bool result)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a>(const char *command, bool result)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a>(const char *command, bool result)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a>(const char *command, bool result)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a>(const char *command, bool result)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">sendData</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">private</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a>(sendData_cb cb)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">private</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a>(DynamicJsonDocument &amp;json)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">private</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a\">sendLedStatus</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e\">sendLinkStatus</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6\">sendRelayStatus</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d\">sendStartAnouncement</a>() override</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99\">sendTemperature</a>(float temp)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae875eb77d530db257752d87a010ec6c7\">sensors</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897\">setBoot</a>(int state)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9\">setLinked</a>(bool state)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488\">setRelay</a>(bool state)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a>(EnigmaIOTNodeClass *node, void *data=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a>(EnigmaIOTNodeClass *node, void *data=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a>(EnigmaIOTNodeClass *node, void *data=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a>(EnigmaIOTNodeClass *node, void *data=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a>(EnigmaIOTNodeClass *node, void *data=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a>(EnigmaIOTNodeClass *node, void *data=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a31b856de204d6bf15ed12641ff748dc3\">tempC</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab566b0093af7f84c645a5c35342c6a51\">tempSent</a></td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba\">toggleRelay</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classCONTROLLER__CLASS__NAME.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: CONTROLLER_CLASS_NAME Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classCONTROLLER__CLASS__NAME-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">CONTROLLER_CLASS_NAME Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for CONTROLLER_CLASS_NAME:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classCONTROLLER__CLASS__NAME.png\" usemap=\"#CONTROLLER_5FCLASS_5FNAME_map\" alt=\"\"/>\n  <map id=\"CONTROLLER_5FCLASS_5FNAME_map\" name=\"CONTROLLER_5FCLASS_5FNAME_map\">\n<area href=\"classEnigmaIOTjsonController.html\" alt=\"EnigmaIOTjsonController\" shape=\"rect\" coords=\"0,0,187,24\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *node, void *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>=NULL)</td></tr>\n<tr class=\"memdesc:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initialize data structures.  <a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">More...</a><br /></td></tr>\n<tr class=\"separator:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a440e2979ce22f7fac243f6063469db6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">processRxCommand</a> (const uint8_t *address, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) override</td></tr>\n<tr class=\"memdesc:a440e2979ce22f7fac243f6063469db6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called to process a downlink command.  <a href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">More...</a><br /></td></tr>\n<tr class=\"separator:a440e2979ce22f7fac243f6063469db6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae744508f79e2bdfcc7352908d537a671\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">loop</a> () override</td></tr>\n<tr class=\"memdesc:ae744508f79e2bdfcc7352908d537a671\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This should be called periodically for module handling.  <a href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">More...</a><br /></td></tr>\n<tr class=\"separator:ae744508f79e2bdfcc7352908d537a671\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af6ef186cd6f5518739ef722213151284\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ()</td></tr>\n<tr class=\"separator:af6ef186cd6f5518739ef722213151284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6fc95acd652b504ae0e342f7ce5450c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">configManagerStart</a> () override</td></tr>\n<tr class=\"memdesc:a6fc95acd652b504ae0e342f7ce5450c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager starts config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">More...</a><br /></td></tr>\n<tr class=\"separator:a6fc95acd652b504ae0e342f7ce5450c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9fc25e3bff52d9d4a642e5a604dd7c44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">configManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) override</td></tr>\n<tr class=\"memdesc:a9fc25e3bff52d9d4a642e5a604dd7c44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager exits config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">More...</a><br /></td></tr>\n<tr class=\"separator:a9fc25e3bff52d9d4a642e5a604dd7c44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab2dd07a8fecca7f083f2776dbc294dc9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">loadConfig</a> () override</td></tr>\n<tr class=\"memdesc:ab2dd07a8fecca7f083f2776dbc294dc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">More...</a><br /></td></tr>\n<tr class=\"separator:ab2dd07a8fecca7f083f2776dbc294dc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ()</td></tr>\n<tr class=\"memdesc:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to notify controller that it is registered on EnigmaIOT network.  <a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *node, void *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>=NULL)</td></tr>\n<tr class=\"memdesc:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initialize data structures.  <a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">More...</a><br /></td></tr>\n<tr class=\"separator:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a584fb205957a7b3ca83fb76066af5268\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a> (const uint8_t *address, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"memdesc:a584fb205957a7b3ca83fb76066af5268\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called to process a downlink command.  <a href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">More...</a><br /></td></tr>\n<tr class=\"separator:a584fb205957a7b3ca83fb76066af5268\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a> ()</td></tr>\n<tr class=\"memdesc:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This should be called periodically for module handling.  <a href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">More...</a><br /></td></tr>\n<tr class=\"separator:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af6ef186cd6f5518739ef722213151284\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ()</td></tr>\n<tr class=\"separator:af6ef186cd6f5518739ef722213151284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a> ()</td></tr>\n<tr class=\"memdesc:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager starts config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">More...</a><br /></td></tr>\n<tr class=\"separator:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager exits config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">More...</a><br /></td></tr>\n<tr class=\"separator:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a> ()</td></tr>\n<tr class=\"memdesc:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">More...</a><br /></td></tr>\n<tr class=\"separator:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ()</td></tr>\n<tr class=\"memdesc:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to notify controller that it is registered on EnigmaIOT network.  <a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *node, void *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>=NULL)</td></tr>\n<tr class=\"memdesc:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initializes controller structures.  <a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">More...</a><br /></td></tr>\n<tr class=\"separator:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a584fb205957a7b3ca83fb76066af5268\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a> (const uint8_t *address, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"memdesc:a584fb205957a7b3ca83fb76066af5268\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes received GET or SET commands.  <a href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">More...</a><br /></td></tr>\n<tr class=\"separator:a584fb205957a7b3ca83fb76066af5268\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a> ()</td></tr>\n<tr class=\"memdesc:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Executes repetitive tasks on controller.  <a href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">More...</a><br /></td></tr>\n<tr class=\"separator:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af6ef186cd6f5518739ef722213151284\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ()</td></tr>\n<tr class=\"memdesc:af6ef186cd6f5518739ef722213151284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default destructor.  <a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">More...</a><br /></td></tr>\n<tr class=\"separator:af6ef186cd6f5518739ef722213151284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a> ()</td></tr>\n<tr class=\"memdesc:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager starts config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">More...</a><br /></td></tr>\n<tr class=\"separator:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager exits config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">More...</a><br /></td></tr>\n<tr class=\"separator:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a> ()</td></tr>\n<tr class=\"memdesc:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">More...</a><br /></td></tr>\n<tr class=\"separator:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ()</td></tr>\n<tr class=\"memdesc:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Executed as soon as node is registered on EnigmaIOT network.  <a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *node, void *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>=NULL)</td></tr>\n<tr class=\"memdesc:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initialize data structures.  <a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">More...</a><br /></td></tr>\n<tr class=\"separator:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a584fb205957a7b3ca83fb76066af5268\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a> (const uint8_t *address, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"memdesc:a584fb205957a7b3ca83fb76066af5268\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called to process a downlink command.  <a href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">More...</a><br /></td></tr>\n<tr class=\"separator:a584fb205957a7b3ca83fb76066af5268\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a> ()</td></tr>\n<tr class=\"memdesc:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This should be called periodically for module handling.  <a href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">More...</a><br /></td></tr>\n<tr class=\"separator:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af6ef186cd6f5518739ef722213151284\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ()</td></tr>\n<tr class=\"separator:af6ef186cd6f5518739ef722213151284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a> ()</td></tr>\n<tr class=\"memdesc:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager starts config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">More...</a><br /></td></tr>\n<tr class=\"separator:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager exits config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">More...</a><br /></td></tr>\n<tr class=\"separator:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a> ()</td></tr>\n<tr class=\"memdesc:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">More...</a><br /></td></tr>\n<tr class=\"separator:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ()</td></tr>\n<tr class=\"memdesc:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to notify controller that it is registered on EnigmaIOT network.  <a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *node, void *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>=NULL)</td></tr>\n<tr class=\"memdesc:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initialize data structures.  <a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">More...</a><br /></td></tr>\n<tr class=\"separator:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a584fb205957a7b3ca83fb76066af5268\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a> (const uint8_t *address, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"memdesc:a584fb205957a7b3ca83fb76066af5268\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called to process a downlink command.  <a href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">More...</a><br /></td></tr>\n<tr class=\"separator:a584fb205957a7b3ca83fb76066af5268\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a> ()</td></tr>\n<tr class=\"memdesc:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This should be called periodically for module handling.  <a href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">More...</a><br /></td></tr>\n<tr class=\"separator:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af6ef186cd6f5518739ef722213151284\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ()</td></tr>\n<tr class=\"separator:af6ef186cd6f5518739ef722213151284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a> ()</td></tr>\n<tr class=\"memdesc:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager starts config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">More...</a><br /></td></tr>\n<tr class=\"separator:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager exits config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">More...</a><br /></td></tr>\n<tr class=\"separator:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a> ()</td></tr>\n<tr class=\"memdesc:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">More...</a><br /></td></tr>\n<tr class=\"separator:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ()</td></tr>\n<tr class=\"memdesc:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to notify controller that it is registered on EnigmaIOT network.  <a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *node, void *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>=NULL)</td></tr>\n<tr class=\"memdesc:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initialize data structures.  <a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">More...</a><br /></td></tr>\n<tr class=\"separator:a826124fa1f5c24d99cc8e4f49c555bee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a584fb205957a7b3ca83fb76066af5268\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a> (const uint8_t *address, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"memdesc:a584fb205957a7b3ca83fb76066af5268\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called to process a downlink command.  <a href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">More...</a><br /></td></tr>\n<tr class=\"separator:a584fb205957a7b3ca83fb76066af5268\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a> ()</td></tr>\n<tr class=\"memdesc:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This should be called periodically for module handling.  <a href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">More...</a><br /></td></tr>\n<tr class=\"separator:a4848555c02bbbddd9af9f3f60a9117f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af6ef186cd6f5518739ef722213151284\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ()</td></tr>\n<tr class=\"separator:af6ef186cd6f5518739ef722213151284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a> ()</td></tr>\n<tr class=\"memdesc:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager starts config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">More...</a><br /></td></tr>\n<tr class=\"separator:aa6218f8b72b75932946bb5ca74b5bc14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager exits config portal.  <a href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">More...</a><br /></td></tr>\n<tr class=\"separator:a92a9cd1826a1a8aaca06c6e208928cdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a> ()</td></tr>\n<tr class=\"memdesc:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">More...</a><br /></td></tr>\n<tr class=\"separator:afad5a8415e36756b812a53bc889fcd4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ()</td></tr>\n<tr class=\"memdesc:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to notify controller that it is registered on EnigmaIOT network.  <a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ad5a5b5eb5068a97a6e41c74d264707eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a4a58511842391487187927dd1b87a0dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">saveConfig</a> () override</td></tr>\n<tr class=\"memdesc:a4a58511842391487187927dd1b87a0dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">More...</a><br /></td></tr>\n<tr class=\"separator:a4a58511842391487187927dd1b87a0dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a68bf2951e6f5ba11894856104e062e6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">sendCommandResp</a> (const char *command, bool result) override</td></tr>\n<tr class=\"memdesc:a68bf2951e6f5ba11894856104e062e6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends command processing response acknowledge.  <a href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">More...</a><br /></td></tr>\n<tr class=\"separator:a68bf2951e6f5ba11894856104e062e6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aef6618576cf2ac9afa7e8685ae953b5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d\">sendStartAnouncement</a> () override</td></tr>\n<tr class=\"memdesc:aef6618576cf2ac9afa7e8685ae953b5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send a message to notify node has started running.  <a href=\"classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d\">More...</a><br /></td></tr>\n<tr class=\"separator:aef6618576cf2ac9afa7e8685ae953b5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5ec6ad2c5cd0f6edfb7635aba862915\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a> ()</td></tr>\n<tr class=\"separator:ab5ec6ad2c5cd0f6edfb7635aba862915\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a> ()</td></tr>\n<tr class=\"memdesc:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">More...</a><br /></td></tr>\n<tr class=\"separator:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a> (const char *command, bool result)</td></tr>\n<tr class=\"memdesc:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends command processing response acknowledge.  <a href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">More...</a><br /></td></tr>\n<tr class=\"separator:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a> ()</td></tr>\n<tr class=\"memdesc:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send a message to notify node has started running.  <a href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">More...</a><br /></td></tr>\n<tr class=\"separator:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5ec6ad2c5cd0f6edfb7635aba862915\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a> ()</td></tr>\n<tr class=\"separator:ab5ec6ad2c5cd0f6edfb7635aba862915\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a> ()</td></tr>\n<tr class=\"memdesc:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">More...</a><br /></td></tr>\n<tr class=\"separator:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a> (const char *command, bool result)</td></tr>\n<tr class=\"memdesc:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send response to commands to gateway.  <a href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">More...</a><br /></td></tr>\n<tr class=\"separator:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a> ()</td></tr>\n<tr class=\"memdesc:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends a notification message including configurable controller name and protocol version.  <a href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">More...</a><br /></td></tr>\n<tr class=\"separator:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5ec6ad2c5cd0f6edfb7635aba862915\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a> ()</td></tr>\n<tr class=\"memdesc:ab5ec6ad2c5cd0f6edfb7635aba862915\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends a HA discovery message for a single entity. Add as many functions like this as number of entities you need to create.  <a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">More...</a><br /></td></tr>\n<tr class=\"separator:ab5ec6ad2c5cd0f6edfb7635aba862915\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a> ()</td></tr>\n<tr class=\"memdesc:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">More...</a><br /></td></tr>\n<tr class=\"separator:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a> (const char *command, bool result)</td></tr>\n<tr class=\"memdesc:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends command processing response acknowledge.  <a href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">More...</a><br /></td></tr>\n<tr class=\"separator:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a> ()</td></tr>\n<tr class=\"memdesc:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send a message to notify node has started running.  <a href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">More...</a><br /></td></tr>\n<tr class=\"separator:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5ec6ad2c5cd0f6edfb7635aba862915\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a> ()</td></tr>\n<tr class=\"separator:ab5ec6ad2c5cd0f6edfb7635aba862915\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a47fedfe44e3cd9d8055adddce8b2b40a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a\">sendLedStatus</a> ()</td></tr>\n<tr class=\"separator:a47fedfe44e3cd9d8055adddce8b2b40a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a> ()</td></tr>\n<tr class=\"memdesc:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">More...</a><br /></td></tr>\n<tr class=\"separator:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a> (const char *command, bool result)</td></tr>\n<tr class=\"memdesc:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends command processing response acknowledge.  <a href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">More...</a><br /></td></tr>\n<tr class=\"separator:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a> ()</td></tr>\n<tr class=\"memdesc:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send a message to notify node has started running.  <a href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">More...</a><br /></td></tr>\n<tr class=\"separator:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a195ba73498234d43ed74f44eb849ff99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99\">sendTemperature</a> (float temp)</td></tr>\n<tr class=\"separator:a195ba73498234d43ed74f44eb849ff99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a> ()</td></tr>\n<tr class=\"memdesc:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves output module configuration.  <a href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">More...</a><br /></td></tr>\n<tr class=\"separator:ae572fe1f0d2bb7b4fb99067d815d5807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a> (const char *command, bool result)</td></tr>\n<tr class=\"memdesc:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends command processing response acknowledge.  <a href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">More...</a><br /></td></tr>\n<tr class=\"separator:a0965ba804f4f0d1533f888fa9011aa86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a> ()</td></tr>\n<tr class=\"memdesc:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send a message to notify node has started running.  <a href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">More...</a><br /></td></tr>\n<tr class=\"separator:a2af1a99bb4a2d7b83125861f127279e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7c56c54fe627a7668789e2d5bc6d89e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">buildHASwitchDiscovery</a> ()</td></tr>\n<tr class=\"memdesc:a7c56c54fe627a7668789e2d5bc6d89e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends a HA discovery message for a single entity. Add as many functions like this as number of entities you need to create.  <a href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">More...</a><br /></td></tr>\n<tr class=\"separator:a7c56c54fe627a7668789e2d5bc6d89e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a273cc1f87e12fd51fd630b9716760071\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071\">buildHATriggerDiscovery</a> ()</td></tr>\n<tr class=\"separator:a273cc1f87e12fd51fd630b9716760071\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ade4924f6fec6b9984ecb542fb0e6aae8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8\">buildHALinkDiscovery</a> ()</td></tr>\n<tr class=\"separator:ade4924f6fec6b9984ecb542fb0e6aae8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a594adba299c47b03e4af833d224c0659\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659\">defaultConfig</a> ()</td></tr>\n<tr class=\"separator:a594adba299c47b03e4af833d224c0659\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa91c1e67648d15fcd667e0bb070a79ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba\">toggleRelay</a> ()</td></tr>\n<tr class=\"separator:aa91c1e67648d15fcd667e0bb070a79ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae06988e4ad4c8ca29e1979d14e787488\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488\">setRelay</a> (bool state)</td></tr>\n<tr class=\"separator:ae06988e4ad4c8ca29e1979d14e787488\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aebfd793413a629a8dad7b9565c6fa5d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6\">sendRelayStatus</a> ()</td></tr>\n<tr class=\"separator:aebfd793413a629a8dad7b9565c6fa5d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a70aba1aad4cbd0a4b833b61bf67bcca9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9\">setLinked</a> (bool state)</td></tr>\n<tr class=\"separator:a70aba1aad4cbd0a4b833b61bf67bcca9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4dea211610b294d5c4cce6f272fc1c9e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e\">sendLinkStatus</a> ()</td></tr>\n<tr class=\"separator:a4dea211610b294d5c4cce6f272fc1c9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a129f24f1d0d268144edb3760f2153897\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897\">setBoot</a> (int state)</td></tr>\n<tr class=\"separator:a129f24f1d0d268144edb3760f2153897\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5f1c10369d22214cc912239f6973202b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b\">sendBootStatus</a> ()</td></tr>\n<tr class=\"separator:a5f1c10369d22214cc912239f6973202b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a97993aade6d2d6e22e48872f71b7f40a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a\">pushTriggered</a> = false</td></tr>\n<tr class=\"separator:a97993aade6d2d6e22e48872f71b7f40a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab1766a261776bbdd0aa7c9016b6502be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be\">pushReleased</a> = true</td></tr>\n<tr class=\"separator:ab1766a261776bbdd0aa7c9016b6502be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab9f55dca7e50e7bbccd5b01d77fc0f05\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab9f55dca7e50e7bbccd5b01d77fc0f05\">buttonPressSent</a> = false</td></tr>\n<tr class=\"separator:ab9f55dca7e50e7bbccd5b01d77fc0f05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa202545b98827df6cdfeea82898cba6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa202545b98827df6cdfeea82898cba6c\">led</a> = <a class=\"el\" href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">_LED_OFF</a></td></tr>\n<tr class=\"separator:aa202545b98827df6cdfeea82898cba6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa83d1a9fa08dfeb08690d132e77883db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">OneWire *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa83d1a9fa08dfeb08690d132e77883db\">oneWire</a></td></tr>\n<tr class=\"separator:aa83d1a9fa08dfeb08690d132e77883db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae875eb77d530db257752d87a010ec6c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">DallasTemperature *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae875eb77d530db257752d87a010ec6c7\">sensors</a></td></tr>\n<tr class=\"separator:ae875eb77d530db257752d87a010ec6c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab6ae5865908255a9379c8c60632a3e3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">DeviceAddress&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab6ae5865908255a9379c8c60632a3e3b\">insideThermometer</a></td></tr>\n<tr class=\"separator:ab6ae5865908255a9379c8c60632a3e3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab566b0093af7f84c645a5c35342c6a51\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab566b0093af7f84c645a5c35342c6a51\">tempSent</a> = false</td></tr>\n<tr class=\"separator:ab566b0093af7f84c645a5c35342c6a51\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a31b856de204d6bf15ed12641ff748dc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a31b856de204d6bf15ed12641ff748dc3\">tempC</a></td></tr>\n<tr class=\"separator:a31b856de204d6bf15ed12641ff748dc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ff33c36324249c1791357337ed932c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a1ff33c36324249c1791357337ed932c6\">config</a></td></tr>\n<tr class=\"separator:a1ff33c36324249c1791357337ed932c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af137736da8e1cb6c92aba6972807704a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWiFiManagerParameter *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af137736da8e1cb6c92aba6972807704a\">buttonPinParam</a></td></tr>\n<tr class=\"separator:af137736da8e1cb6c92aba6972807704a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c81e6c8ec96a457e0e8f3e1bad4525f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWiFiManagerParameter *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4c81e6c8ec96a457e0e8f3e1bad4525f\">relayPinParam</a></td></tr>\n<tr class=\"separator:a4c81e6c8ec96a457e0e8f3e1bad4525f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab2947853c9c4746ab59e067f00359bff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWiFiManagerParameter *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab2947853c9c4746ab59e067f00359bff\">bootStatusParam</a></td></tr>\n<tr class=\"separator:ab2947853c9c4746ab59e067f00359bff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a652db9c565625d205fa589b5b7922431\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWiFiManagerParameter *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a652db9c565625d205fa589b5b7922431\">bootStatusListParam</a></td></tr>\n<tr class=\"separator:a652db9c565625d205fa589b5b7922431\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_methods_classEnigmaIOTjsonController\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_classEnigmaIOTjsonController')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Private Member Functions inherited from <a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td></tr>\n<tr class=\"memitem:ae59a645aaed1e5b550bdc7967c45c170 inherit pub_methods_classEnigmaIOTjsonController\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a> (sendData_cb cb)</td></tr>\n<tr class=\"memdesc:ae59a645aaed1e5b550bdc7967c45c170 inherit pub_methods_classEnigmaIOTjsonController\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Register send data callback to run when module needs to send a message.  <a href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">More...</a><br /></td></tr>\n<tr class=\"separator:ae59a645aaed1e5b550bdc7967c45c170 inherit pub_methods_classEnigmaIOTjsonController\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2e1940f901e2ad05701b238374db9c0 inherit pub_methods_classEnigmaIOTjsonController\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">disconnectInform</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"memdesc:af2e1940f901e2ad05701b238374db9c0 inherit pub_methods_classEnigmaIOTjsonController\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to notify controller that it is unregistered on EnigmaIOT network.  <a href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">More...</a><br /></td></tr>\n<tr class=\"separator:af2e1940f901e2ad05701b238374db9c0 inherit pub_methods_classEnigmaIOTjsonController\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae5ece1c030d9063e46127b8a48b7bfa9 inherit pub_methods_classEnigmaIOTjsonController\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a> (DynamicJsonDocument &amp;json)</td></tr>\n<tr class=\"memdesc:ae5ece1c030d9063e46127b8a48b7bfa9 inherit pub_methods_classEnigmaIOTjsonController\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends a JSON encoded message to lower layer.  <a href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">More...</a><br /></td></tr>\n<tr class=\"separator:ae5ece1c030d9063e46127b8a48b7bfa9 inherit pub_methods_classEnigmaIOTjsonController\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_attribs_classEnigmaIOTjsonController\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_attribs_classEnigmaIOTjsonController')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Private Attributes inherited from <a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td></tr>\n<tr class=\"memitem:a13b9adbb1aaab6ec87042889289e701d inherit pub_attribs_classEnigmaIOTjsonController\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">sendData_cb&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">sendData</a></td></tr>\n<tr class=\"separator:a13b9adbb1aaab6ec87042889289e701d inherit pub_attribs_classEnigmaIOTjsonController\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a661a7d9fe760c19b6992aba5b4978cde inherit pub_attribs_classEnigmaIOTjsonController\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">enigmaIotNode</a></td></tr>\n<tr class=\"separator:a661a7d9fe760c19b6992aba5b4978cde inherit pub_attribs_classEnigmaIOTjsonController\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8h_source.html#l00027\">27</a> of file <a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"af6ef186cd6f5518739ef722213151284\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af6ef186cd6f5518739ef722213151284\">&#9670;&nbsp;</a></span>~CONTROLLER_CLASS_NAME() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00098\">98</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af6ef186cd6f5518739ef722213151284\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af6ef186cd6f5518739ef722213151284\">&#9670;&nbsp;</a></span>~CONTROLLER_CLASS_NAME() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"af6ef186cd6f5518739ef722213151284\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af6ef186cd6f5518739ef722213151284\">&#9670;&nbsp;</a></span>~CONTROLLER_CLASS_NAME() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default destructor. </p>\n\n</div>\n</div>\n<a id=\"af6ef186cd6f5518739ef722213151284\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af6ef186cd6f5518739ef722213151284\">&#9670;&nbsp;</a></span>~CONTROLLER_CLASS_NAME() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"af6ef186cd6f5518739ef722213151284\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af6ef186cd6f5518739ef722213151284\">&#9670;&nbsp;</a></span>~CONTROLLER_CLASS_NAME() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"af6ef186cd6f5518739ef722213151284\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af6ef186cd6f5518739ef722213151284\">&#9670;&nbsp;</a></span>~CONTROLLER_CLASS_NAME() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"ab5ec6ad2c5cd0f6edfb7635aba862915\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab5ec6ad2c5cd0f6edfb7635aba862915\">&#9670;&nbsp;</a></span>buildHADiscovery() <span class=\"overload\">[1/4]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::buildHADiscovery </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00124\">124</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab5ec6ad2c5cd0f6edfb7635aba862915\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab5ec6ad2c5cd0f6edfb7635aba862915\">&#9670;&nbsp;</a></span>buildHADiscovery() <span class=\"overload\">[2/4]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::buildHADiscovery </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"ab5ec6ad2c5cd0f6edfb7635aba862915\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab5ec6ad2c5cd0f6edfb7635aba862915\">&#9670;&nbsp;</a></span>buildHADiscovery() <span class=\"overload\">[3/4]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::buildHADiscovery </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends a HA discovery message for a single entity. Add as many functions like this as number of entities you need to create. </p>\n\n</div>\n</div>\n<a id=\"ab5ec6ad2c5cd0f6edfb7635aba862915\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab5ec6ad2c5cd0f6edfb7635aba862915\">&#9670;&nbsp;</a></span>buildHADiscovery() <span class=\"overload\">[4/4]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::buildHADiscovery </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"ade4924f6fec6b9984ecb542fb0e6aae8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ade4924f6fec6b9984ecb542fb0e6aae8\">&#9670;&nbsp;</a></span>buildHALinkDiscovery()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::buildHALinkDiscovery </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"a7c56c54fe627a7668789e2d5bc6d89e1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7c56c54fe627a7668789e2d5bc6d89e1\">&#9670;&nbsp;</a></span>buildHASwitchDiscovery()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::buildHASwitchDiscovery </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends a HA discovery message for a single entity. Add as many functions like this as number of entities you need to create. </p>\n\n</div>\n</div>\n<a id=\"a273cc1f87e12fd51fd630b9716760071\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a273cc1f87e12fd51fd630b9716760071\">&#9670;&nbsp;</a></span>buildHATriggerDiscovery()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::buildHATriggerDiscovery </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n</div>\n</div>\n<a id=\"a92a9cd1826a1a8aaca06c6e208928cdc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a92a9cd1826a1a8aaca06c6e208928cdc\">&#9670;&nbsp;</a></span>configManagerExit() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager exits config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><code>true</code> if configuration was successful </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a92a9cd1826a1a8aaca06c6e208928cdc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a92a9cd1826a1a8aaca06c6e208928cdc\">&#9670;&nbsp;</a></span>configManagerExit() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager exits config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><code>true</code> if configuration was successful </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a92a9cd1826a1a8aaca06c6e208928cdc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a92a9cd1826a1a8aaca06c6e208928cdc\">&#9670;&nbsp;</a></span>configManagerExit() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager exits config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><code>true</code> if configuration was successful </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a92a9cd1826a1a8aaca06c6e208928cdc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a92a9cd1826a1a8aaca06c6e208928cdc\">&#9670;&nbsp;</a></span>configManagerExit() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager exits config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><code>true</code> if configuration was successful </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a92a9cd1826a1a8aaca06c6e208928cdc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a92a9cd1826a1a8aaca06c6e208928cdc\">&#9670;&nbsp;</a></span>configManagerExit() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager exits config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><code>true</code> if configuration was successful </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a9fc25e3bff52d9d4a642e5a604dd7c44\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9fc25e3bff52d9d4a642e5a604dd7c44\">&#9670;&nbsp;</a></span>configManagerExit() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager exits config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><code>true</code> if configuration was successful </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00109\">109</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa6218f8b72b75932946bb5ca74b5bc14\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa6218f8b72b75932946bb5ca74b5bc14\">&#9670;&nbsp;</a></span>configManagerStart() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerStart </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager starts config portal. </p>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"aa6218f8b72b75932946bb5ca74b5bc14\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa6218f8b72b75932946bb5ca74b5bc14\">&#9670;&nbsp;</a></span>configManagerStart() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerStart </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager starts config portal. </p>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"aa6218f8b72b75932946bb5ca74b5bc14\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa6218f8b72b75932946bb5ca74b5bc14\">&#9670;&nbsp;</a></span>configManagerStart() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerStart </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager starts config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to EnigmaIOT gateway instance </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"aa6218f8b72b75932946bb5ca74b5bc14\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa6218f8b72b75932946bb5ca74b5bc14\">&#9670;&nbsp;</a></span>configManagerStart() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerStart </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager starts config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to EnigmaIOT gateway instance </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"aa6218f8b72b75932946bb5ca74b5bc14\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa6218f8b72b75932946bb5ca74b5bc14\">&#9670;&nbsp;</a></span>configManagerStart() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerStart </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager starts config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node&lt;</td><td>Pointer to EnigmaIOT gateway instance </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a6fc95acd652b504ae0e342f7ce5450c3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6fc95acd652b504ae0e342f7ce5450c3\">&#9670;&nbsp;</a></span>configManagerStart() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::configManagerStart </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager starts config portal. </p>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00103\">103</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad5a5b5eb5068a97a6e41c74d264707eb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad5a5b5eb5068a97a6e41c74d264707eb\">&#9670;&nbsp;</a></span>connectInform() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::connectInform </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Used to notify controller that it is registered on EnigmaIOT network. </p>\n\n<p>Reimplemented from <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00031\">31</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad5a5b5eb5068a97a6e41c74d264707eb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad5a5b5eb5068a97a6e41c74d264707eb\">&#9670;&nbsp;</a></span>connectInform() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::connectInform </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Used to notify controller that it is registered on EnigmaIOT network. </p>\n\n<p>Reimplemented from <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"ad5a5b5eb5068a97a6e41c74d264707eb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad5a5b5eb5068a97a6e41c74d264707eb\">&#9670;&nbsp;</a></span>connectInform() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::connectInform </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Executed as soon as node is registered on EnigmaIOT network. </p>\n\n<p>Reimplemented from <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"ad5a5b5eb5068a97a6e41c74d264707eb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad5a5b5eb5068a97a6e41c74d264707eb\">&#9670;&nbsp;</a></span>connectInform() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::connectInform </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Used to notify controller that it is registered on EnigmaIOT network. </p>\n\n<p>Reimplemented from <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"ad5a5b5eb5068a97a6e41c74d264707eb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad5a5b5eb5068a97a6e41c74d264707eb\">&#9670;&nbsp;</a></span>connectInform() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::connectInform </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Used to notify controller that it is registered on EnigmaIOT network. </p>\n\n<p>Reimplemented from <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"ad5a5b5eb5068a97a6e41c74d264707eb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad5a5b5eb5068a97a6e41c74d264707eb\">&#9670;&nbsp;</a></span>connectInform() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::connectInform </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Used to notify controller that it is registered on EnigmaIOT network. </p>\n\n<p>Reimplemented from <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a594adba299c47b03e4af833d224c0659\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a594adba299c47b03e4af833d224c0659\">&#9670;&nbsp;</a></span>defaultConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::defaultConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00382\">382</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afad5a8415e36756b812a53bc889fcd4b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afad5a8415e36756b812a53bc889fcd4b\">&#9670;&nbsp;</a></span>loadConfig() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::loadConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if load was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"afad5a8415e36756b812a53bc889fcd4b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afad5a8415e36756b812a53bc889fcd4b\">&#9670;&nbsp;</a></span>loadConfig() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::loadConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if load was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"afad5a8415e36756b812a53bc889fcd4b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afad5a8415e36756b812a53bc889fcd4b\">&#9670;&nbsp;</a></span>loadConfig() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::loadConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if load was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"afad5a8415e36756b812a53bc889fcd4b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afad5a8415e36756b812a53bc889fcd4b\">&#9670;&nbsp;</a></span>loadConfig() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::loadConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if load was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"afad5a8415e36756b812a53bc889fcd4b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afad5a8415e36756b812a53bc889fcd4b\">&#9670;&nbsp;</a></span>loadConfig() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::loadConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if load was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"ab2dd07a8fecca7f083f2776dbc294dc9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab2dd07a8fecca7f083f2776dbc294dc9\">&#9670;&nbsp;</a></span>loadConfig() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::loadConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if load was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00114\">114</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4848555c02bbbddd9af9f3f60a9117f5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4848555c02bbbddd9af9f3f60a9117f5\">&#9670;&nbsp;</a></span>loop() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>This should be called periodically for module handling. </p>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a4848555c02bbbddd9af9f3f60a9117f5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4848555c02bbbddd9af9f3f60a9117f5\">&#9670;&nbsp;</a></span>loop() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Executes repetitive tasks on controller. </p>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a4848555c02bbbddd9af9f3f60a9117f5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4848555c02bbbddd9af9f3f60a9117f5\">&#9670;&nbsp;</a></span>loop() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>This should be called periodically for module handling. </p>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a4848555c02bbbddd9af9f3f60a9117f5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4848555c02bbbddd9af9f3f60a9117f5\">&#9670;&nbsp;</a></span>loop() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>This should be called periodically for module handling. </p>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a4848555c02bbbddd9af9f3f60a9117f5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4848555c02bbbddd9af9f3f60a9117f5\">&#9670;&nbsp;</a></span>loop() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>This should be called periodically for module handling. </p>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"ae744508f79e2bdfcc7352908d537a671\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae744508f79e2bdfcc7352908d537a671\">&#9670;&nbsp;</a></span>loop() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>This should be called periodically for module handling. </p>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00053\">53</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a584fb205957a7b3ca83fb76066af5268\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a584fb205957a7b3ca83fb76066af5268\">&#9670;&nbsp;</a></span>processRxCommand() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::processRxCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called to process a downlink command. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address of sender </td></tr>\n    <tr><td class=\"paramname\">buffer</td><td>Message bytes </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Message length </td></tr>\n    <tr><td class=\"paramname\">command</td><td>Type of command. nodeMessageType_t </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Payload encoding of type nodePayloadEncoding_t </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> on success </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a584fb205957a7b3ca83fb76066af5268\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a584fb205957a7b3ca83fb76066af5268\">&#9670;&nbsp;</a></span>processRxCommand() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::processRxCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes received GET or SET commands. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td>Origin MAC address </td></tr>\n    <tr><td class=\"paramname\">buffer</td><td>Command payload </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Payload length in bytes </td></tr>\n    <tr><td class=\"paramname\">command</td><td>Command type. nodeMessageType_t::DOWNSTREAM_DATA_GET or nodeMessageType_t::DOWNSTREAM_DATA_SET </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Payload encoding. MSG_PACK is recommended </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a584fb205957a7b3ca83fb76066af5268\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a584fb205957a7b3ca83fb76066af5268\">&#9670;&nbsp;</a></span>processRxCommand() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::processRxCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called to process a downlink command. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address of sender </td></tr>\n    <tr><td class=\"paramname\">buffer</td><td>Message bytes </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Message length </td></tr>\n    <tr><td class=\"paramname\">command</td><td>Type of command. nodeMessageType_t </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Payload encoding of type nodePayloadEncoding_t </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> on success </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a584fb205957a7b3ca83fb76066af5268\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a584fb205957a7b3ca83fb76066af5268\">&#9670;&nbsp;</a></span>processRxCommand() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::processRxCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called to process a downlink command. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address of sender </td></tr>\n    <tr><td class=\"paramname\">buffer</td><td>Message bytes </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Message length </td></tr>\n    <tr><td class=\"paramname\">command</td><td>Type of command. nodeMessageType_t </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Payload encoding of type nodePayloadEncoding_t </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> on success </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a584fb205957a7b3ca83fb76066af5268\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a584fb205957a7b3ca83fb76066af5268\">&#9670;&nbsp;</a></span>processRxCommand() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::processRxCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called to process a downlink command. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address of sender </td></tr>\n    <tr><td class=\"paramname\">buffer</td><td>Message bytes </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Message length </td></tr>\n    <tr><td class=\"paramname\">command</td><td>Type of command. nodeMessageType_t </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Payload encoding of type nodePayloadEncoding_t </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> on success </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a440e2979ce22f7fac243f6063469db6c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a440e2979ce22f7fac243f6063469db6c\">&#9670;&nbsp;</a></span>processRxCommand() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::processRxCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called to process a downlink command. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address of sender </td></tr>\n    <tr><td class=\"paramname\">buffer</td><td>Message bytes </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Message length </td></tr>\n    <tr><td class=\"paramname\">command</td><td>Type of command. nodeMessageType_t </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Payload encoding of type nodePayloadEncoding_t </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> on success </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00019\">19</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae572fe1f0d2bb7b4fb99067d815d5807\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae572fe1f0d2bb7b4fb99067d815d5807\">&#9670;&nbsp;</a></span>saveConfig() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::saveConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if save was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"ae572fe1f0d2bb7b4fb99067d815d5807\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae572fe1f0d2bb7b4fb99067d815d5807\">&#9670;&nbsp;</a></span>saveConfig() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::saveConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if save was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"ae572fe1f0d2bb7b4fb99067d815d5807\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae572fe1f0d2bb7b4fb99067d815d5807\">&#9670;&nbsp;</a></span>saveConfig() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::saveConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if save was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"ae572fe1f0d2bb7b4fb99067d815d5807\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae572fe1f0d2bb7b4fb99067d815d5807\">&#9670;&nbsp;</a></span>saveConfig() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::saveConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if save was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"ae572fe1f0d2bb7b4fb99067d815d5807\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae572fe1f0d2bb7b4fb99067d815d5807\">&#9670;&nbsp;</a></span>saveConfig() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::saveConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if save was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a4a58511842391487187927dd1b87a0dc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4a58511842391487187927dd1b87a0dc\">&#9670;&nbsp;</a></span>saveConfig() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::saveConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if save was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00119\">119</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5f1c10369d22214cc912239f6973202b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5f1c10369d22214cc912239f6973202b\">&#9670;&nbsp;</a></span>sendBootStatus()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendBootStatus </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00160\">160</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0965ba804f4f0d1533f888fa9011aa86\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0965ba804f4f0d1533f888fa9011aa86\">&#9670;&nbsp;</a></span>sendCommandResp() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendCommandResp </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>result</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends command processing response acknowledge. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">command</td><td>Command name </td></tr>\n    <tr><td class=\"paramname\">result</td><td>Command execution success </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a0965ba804f4f0d1533f888fa9011aa86\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0965ba804f4f0d1533f888fa9011aa86\">&#9670;&nbsp;</a></span>sendCommandResp() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendCommandResp </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>result</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send response to commands to gateway. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">command</td><td>Refered command </td></tr>\n    <tr><td class=\"paramname\">result</td><td><code>true</code> if command was correctly executed, <code>false</code> otherwise </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a0965ba804f4f0d1533f888fa9011aa86\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0965ba804f4f0d1533f888fa9011aa86\">&#9670;&nbsp;</a></span>sendCommandResp() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendCommandResp </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>result</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends command processing response acknowledge. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">command</td><td>Command name </td></tr>\n    <tr><td class=\"paramname\">result</td><td>Command execution success </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a0965ba804f4f0d1533f888fa9011aa86\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0965ba804f4f0d1533f888fa9011aa86\">&#9670;&nbsp;</a></span>sendCommandResp() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendCommandResp </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>result</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends command processing response acknowledge. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">command</td><td>Command name </td></tr>\n    <tr><td class=\"paramname\">result</td><td>Command execution success </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a0965ba804f4f0d1533f888fa9011aa86\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0965ba804f4f0d1533f888fa9011aa86\">&#9670;&nbsp;</a></span>sendCommandResp() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendCommandResp </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>result</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends command processing response acknowledge. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">command</td><td>Command name </td></tr>\n    <tr><td class=\"paramname\">result</td><td>Command execution success </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a68bf2951e6f5ba11894856104e062e6e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a68bf2951e6f5ba11894856104e062e6e\">&#9670;&nbsp;</a></span>sendCommandResp() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendCommandResp </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>result</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends command processing response acknowledge. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">command</td><td>Command name </td></tr>\n    <tr><td class=\"paramname\">result</td><td>Command execution success </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00026\">26</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a47fedfe44e3cd9d8055adddce8b2b40a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a47fedfe44e3cd9d8055adddce8b2b40a\">&#9670;&nbsp;</a></span>sendLedStatus()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendLedStatus </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8cpp_source.html#l00105\">105</a> of file <a class=\"el\" href=\"LedController_8cpp_source.html\">LedController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4dea211610b294d5c4cce6f272fc1c9e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4dea211610b294d5c4cce6f272fc1c9e\">&#9670;&nbsp;</a></span>sendLinkStatus()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendLinkStatus </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00150\">150</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aebfd793413a629a8dad7b9565c6fa5d6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aebfd793413a629a8dad7b9565c6fa5d6\">&#9670;&nbsp;</a></span>sendRelayStatus()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendRelayStatus </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00138\">138</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2af1a99bb4a2d7b83125861f127279e8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2af1a99bb4a2d7b83125861f127279e8\">&#9670;&nbsp;</a></span>sendStartAnouncement() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendStartAnouncement </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send a message to notify node has started running. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"DashButtonController_8h_source.html#l00073\">73</a> of file <a class=\"el\" href=\"DashButtonController_8h_source.html\">DashButtonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2af1a99bb4a2d7b83125861f127279e8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2af1a99bb4a2d7b83125861f127279e8\">&#9670;&nbsp;</a></span>sendStartAnouncement() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendStartAnouncement </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends a notification message including configurable controller name and protocol version. </p>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"BasicController_8h_source.html#l00099\">99</a> of file <a class=\"el\" href=\"BasicController_8h_source.html\">BasicController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2af1a99bb4a2d7b83125861f127279e8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2af1a99bb4a2d7b83125861f127279e8\">&#9670;&nbsp;</a></span>sendStartAnouncement() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendStartAnouncement </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send a message to notify node has started running. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8h_source.html#l00078\">78</a> of file <a class=\"el\" href=\"LedController_8h_source.html\">LedController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2af1a99bb4a2d7b83125861f127279e8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2af1a99bb4a2d7b83125861f127279e8\">&#9670;&nbsp;</a></span>sendStartAnouncement() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendStartAnouncement </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send a message to notify node has started running. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8h_source.html#l00081\">81</a> of file <a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2af1a99bb4a2d7b83125861f127279e8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2af1a99bb4a2d7b83125861f127279e8\">&#9670;&nbsp;</a></span>sendStartAnouncement() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendStartAnouncement </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send a message to notify node has started running. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00101\">101</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aef6618576cf2ac9afa7e8685ae953b5d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aef6618576cf2ac9afa7e8685ae953b5d\">&#9670;&nbsp;</a></span>sendStartAnouncement() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendStartAnouncement </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">override</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send a message to notify node has started running. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8h_source.html#l00072\">72</a> of file <a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a195ba73498234d43ed74f44eb849ff99\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a195ba73498234d43ed74f44eb849ff99\">&#9670;&nbsp;</a></span>sendTemperature()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::sendTemperature </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>temp</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8cpp_source.html#l00035\">35</a> of file <a class=\"el\" href=\"ds18b20Controller_8cpp_source.html\">ds18b20Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a129f24f1d0d268144edb3760f2153897\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a129f24f1d0d268144edb3760f2153897\">&#9670;&nbsp;</a></span>setBoot()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::setBoot </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>state</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00250\">250</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a70aba1aad4cbd0a4b833b61bf67bcca9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a70aba1aad4cbd0a4b833b61bf67bcca9\">&#9670;&nbsp;</a></span>setLinked()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::setLinked </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>state</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00240\">240</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae06988e4ad4c8ca29e1979d14e787488\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae06988e4ad4c8ca29e1979d14e787488\">&#9670;&nbsp;</a></span>setRelay()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::setRelay </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>state</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00227\">227</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a826124fa1f5c24d99cc8e4f49c555bee\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a826124fa1f5c24d99cc8e4f49c555bee\">&#9670;&nbsp;</a></span>setup() <span class=\"overload\">[1/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::setup </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>config</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Initialize data structures. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to EnigmaIOT node instance </td></tr>\n    <tr><td class=\"paramname\">config</td><td>Pointer to configuration structure. If it is <code>NULL</code> then it tries to load configuration from flash </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8cpp_source.html#l00040\">40</a> of file <a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a826124fa1f5c24d99cc8e4f49c555bee\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a826124fa1f5c24d99cc8e4f49c555bee\">&#9670;&nbsp;</a></span>setup() <span class=\"overload\">[2/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::setup </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>config</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Initialize data structures. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to EnigmaIOT node instance </td></tr>\n    <tr><td class=\"paramname\">config</td><td>Pointer to configuration structure. If it is <code>NULL</code> then it tries to load configuration from flash </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a826124fa1f5c24d99cc8e4f49c555bee\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a826124fa1f5c24d99cc8e4f49c555bee\">&#9670;&nbsp;</a></span>setup() <span class=\"overload\">[3/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::setup </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>data</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Initializes controller structures. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to EnigmaIOT gateway instance </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Parameter data for controller </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a826124fa1f5c24d99cc8e4f49c555bee\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a826124fa1f5c24d99cc8e4f49c555bee\">&#9670;&nbsp;</a></span>setup() <span class=\"overload\">[4/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::setup </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>config</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Initialize data structures. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to EnigmaIOT node instance </td></tr>\n    <tr><td class=\"paramname\">config</td><td>Pointer to configuration structure. If it is <code>NULL</code> then it tries to load configuration from flash </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a826124fa1f5c24d99cc8e4f49c555bee\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a826124fa1f5c24d99cc8e4f49c555bee\">&#9670;&nbsp;</a></span>setup() <span class=\"overload\">[5/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::setup </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>config</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Initialize data structures. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to EnigmaIOT node instance </td></tr>\n    <tr><td class=\"paramname\">config</td><td>Pointer to configuration structure. If it is <code>NULL</code> then it tries to load configuration from flash </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"a826124fa1f5c24d99cc8e4f49c555bee\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a826124fa1f5c24d99cc8e4f49c555bee\">&#9670;&nbsp;</a></span>setup() <span class=\"overload\">[6/6]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::setup </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>config</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Initialize data structures. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to EnigmaIOT node instance </td></tr>\n    <tr><td class=\"paramname\">config</td><td>Pointer to configuration structure. If it is <code>NULL</code> then it tries to load configuration from flash </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController</a>.</p>\n\n</div>\n</div>\n<a id=\"aa91c1e67648d15fcd667e0bb070a79ba\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa91c1e67648d15fcd667e0bb070a79ba\">&#9670;&nbsp;</a></span>toggleRelay()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CONTROLLER_CLASS_NAME::toggleRelay </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html#l00213\">213</a> of file <a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a652db9c565625d205fa589b5b7922431\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a652db9c565625d205fa589b5b7922431\">&#9670;&nbsp;</a></span>bootStatusListParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWiFiManagerParameter* CONTROLLER_CLASS_NAME::bootStatusListParam</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00061\">61</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab2947853c9c4746ab59e067f00359bff\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab2947853c9c4746ab59e067f00359bff\">&#9670;&nbsp;</a></span>bootStatusParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWiFiManagerParameter* CONTROLLER_CLASS_NAME::bootStatusParam</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00060\">60</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af137736da8e1cb6c92aba6972807704a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af137736da8e1cb6c92aba6972807704a\">&#9670;&nbsp;</a></span>buttonPinParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWiFiManagerParameter* CONTROLLER_CLASS_NAME::buttonPinParam</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00058\">58</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab9f55dca7e50e7bbccd5b01d77fc0f05\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab9f55dca7e50e7bbccd5b01d77fc0f05\">&#9670;&nbsp;</a></span>buttonPressSent</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::buttonPressSent = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"DashButtonController_8h_source.html#l00035\">35</a> of file <a class=\"el\" href=\"DashButtonController_8h_source.html\">DashButtonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1ff33c36324249c1791357337ed932c6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1ff33c36324249c1791357337ed932c6\">&#9670;&nbsp;</a></span>config</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a> CONTROLLER_CLASS_NAME::config</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00057\">57</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab6ae5865908255a9379c8c60632a3e3b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab6ae5865908255a9379c8c60632a3e3b\">&#9670;&nbsp;</a></span>insideThermometer</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">DeviceAddress CONTROLLER_CLASS_NAME::insideThermometer</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8h_source.html#l00039\">39</a> of file <a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa202545b98827df6cdfeea82898cba6c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa202545b98827df6cdfeea82898cba6c\">&#9670;&nbsp;</a></span>led</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int CONTROLLER_CLASS_NAME::led = <a class=\"el\" href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">_LED_OFF</a></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"LedController_8h_source.html#l00038\">38</a> of file <a class=\"el\" href=\"LedController_8h_source.html\">LedController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa83d1a9fa08dfeb08690d132e77883db\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa83d1a9fa08dfeb08690d132e77883db\">&#9670;&nbsp;</a></span>oneWire</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">OneWire* CONTROLLER_CLASS_NAME::oneWire</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8h_source.html#l00037\">37</a> of file <a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab1766a261776bbdd0aa7c9016b6502be\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab1766a261776bbdd0aa7c9016b6502be\">&#9670;&nbsp;</a></span>pushReleased</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::pushReleased = true</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8h_source.html#l00033\">33</a> of file <a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a97993aade6d2d6e22e48872f71b7f40a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a97993aade6d2d6e22e48872f71b7f40a\">&#9670;&nbsp;</a></span>pushTriggered</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::pushTriggered = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ButtonController_8h_source.html#l00032\">32</a> of file <a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4c81e6c8ec96a457e0e8f3e1bad4525f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4c81e6c8ec96a457e0e8f3e1bad4525f\">&#9670;&nbsp;</a></span>relayPinParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWiFiManagerParameter* CONTROLLER_CLASS_NAME::relayPinParam</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00059\">59</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae875eb77d530db257752d87a010ec6c7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae875eb77d530db257752d87a010ec6c7\">&#9670;&nbsp;</a></span>sensors</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">DallasTemperature* CONTROLLER_CLASS_NAME::sensors</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8h_source.html#l00038\">38</a> of file <a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a31b856de204d6bf15ed12641ff748dc3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a31b856de204d6bf15ed12641ff748dc3\">&#9670;&nbsp;</a></span>tempC</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">float CONTROLLER_CLASS_NAME::tempC</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8h_source.html#l00041\">41</a> of file <a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab566b0093af7f84c645a5c35342c6a51\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab566b0093af7f84c645a5c35342c6a51\">&#9670;&nbsp;</a></span>tempSent</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CONTROLLER_CLASS_NAME::tempSent = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8h_source.html#l00040\">40</a> of file <a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>examples/EnigmaIOT-Button-Controller/<a class=\"el\" href=\"ButtonController_8h_source.html\">ButtonController.h</a></li>\n<li>examples/EnigmaIOT-DashButton-Controller/<a class=\"el\" href=\"DashButtonController_8h_source.html\">DashButtonController.h</a></li>\n<li>examples/EnigmaIOT-Led-Controller/<a class=\"el\" href=\"LedController_8h_source.html\">LedController.h</a></li>\n<li>examples/EnigmaIOT-Sensor-Controller/<a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a></li>\n<li>examples/EnigmaIOT-SmartSwitch-Controller/<a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a></li>\n<li>examples/EnigmaIOT-Json-Controller-Template/<a class=\"el\" href=\"BasicController_8h_source.html\">BasicController.h</a></li>\n<li>examples/EnigmaIOT-Button-Controller/<a class=\"el\" href=\"ButtonController_8cpp_source.html\">ButtonController.cpp</a></li>\n<li>examples/EnigmaIOT-DashButton-Controller/<a class=\"el\" href=\"DashButtonController_8cpp_source.html\">DashButtonController.cpp</a></li>\n<li>examples/EnigmaIOT-Json-Controller-Template/<a class=\"el\" href=\"BasicController_8cpp_source.html\">BasicController.cpp</a></li>\n<li>examples/EnigmaIOT-Led-Controller/<a class=\"el\" href=\"LedController_8cpp_source.html\">LedController.cpp</a></li>\n<li>examples/EnigmaIOT-Sensor-Controller/<a class=\"el\" href=\"ds18b20Controller_8cpp_source.html\">ds18b20Controller.cpp</a></li>\n<li>examples/EnigmaIOT-SmartSwitch-Controller/<a class=\"el\" href=\"SmartSwitchController_8cpp_source.html\">SmartSwitchController.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classComms__halClass-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Comms_halClass Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">_ownPeerType</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">begin</a>(uint8_t *gateway, uint8_t channel, peerType_t peerType=COMM_NODE)=0</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">COMMS_HAL_ADDR_LEN</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316\">COMMS_HAL_MAX_MESSAGE_LENGTH</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac\">Comms_halClass</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">enableTransmit</a>(bool enable)=0</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">getAddressLength</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04\">handle</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a67d74c717b8f3919307738be9d963312\">initComms</a>(peerType_t peerType)=0</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">onDataRcvd</a>(comms_hal_rcvd_data dataRcvd)=0</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">onDataSent</a>(comms_hal_sent_data dataRcvd)=0</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a>(uint8_t *da, uint8_t *data, int len)=0</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">sentResult</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">stop</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classComms__halClass.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Comms_halClass Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classComms__halClass-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Comms_halClass Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Interface for communication subsystem abstraction layer definition.  \n <a href=\"classComms__halClass.html#details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for Comms_halClass:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classComms__halClass.png\" usemap=\"#Comms_5FhalClass_map\" alt=\"\"/>\n  <map id=\"Comms_5FhalClass_map\" name=\"Comms_5FhalClass_map\">\n<area href=\"classEspnow__halClass.html\" title=\"Definition for ESP-NOW hardware abstraction layer.\" alt=\"Espnow_halClass\" shape=\"rect\" coords=\"0,56,111,80\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a38e3e9572cead89962b66c2634a9e2ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac\">Comms_halClass</a> ()</td></tr>\n<tr class=\"separator:a38e3e9572cead89962b66c2634a9e2ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1b7f86efd799761dead77fcccf036d1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">begin</a> (uint8_t *<a class=\"el\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a>, uint8_t <a class=\"el\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a>, <a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> peerType=<a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a>)=0</td></tr>\n<tr class=\"memdesc:a1b7f86efd799761dead77fcccf036d1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Setup communication environment and establish the connection from node to gateway.  <a href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">More...</a><br /></td></tr>\n<tr class=\"separator:a1b7f86efd799761dead77fcccf036d1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa69c265e65ce31580af6d5dd9b3cd40f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">stop</a> ()=0</td></tr>\n<tr class=\"memdesc:aa69c265e65ce31580af6d5dd9b3cd40f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Terminates communication and closes all connectrions.  <a href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">More...</a><br /></td></tr>\n<tr class=\"separator:aa69c265e65ce31580af6d5dd9b3cd40f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac5a613a21aca12c2d2efbff02a2f0ff5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual int32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">send</a> (uint8_t *da, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, int len)=0</td></tr>\n<tr class=\"memdesc:ac5a613a21aca12c2d2efbff02a2f0ff5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends data to the other peer.  <a href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">More...</a><br /></td></tr>\n<tr class=\"separator:ac5a613a21aca12c2d2efbff02a2f0ff5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0db88323996d12342a9c60143d90c51f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">onDataRcvd</a> (<a class=\"el\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a> <a class=\"el\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a>)=0</td></tr>\n<tr class=\"memdesc:a0db88323996d12342a9c60143d90c51f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Attach a callback function to be run on every received message.  <a href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">More...</a><br /></td></tr>\n<tr class=\"separator:a0db88323996d12342a9c60143d90c51f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a393acd5ba5c49031b3c827f7cbce37fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">onDataSent</a> (<a class=\"el\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a> <a class=\"el\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a>)=0</td></tr>\n<tr class=\"memdesc:a393acd5ba5c49031b3c827f7cbce37fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Attach a callback function to be run after sending a message to receive its status.  <a href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">More...</a><br /></td></tr>\n<tr class=\"separator:a393acd5ba5c49031b3c827f7cbce37fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6093fd7b0a9eedba72c3622977639d92\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">getAddressLength</a> ()=0</td></tr>\n<tr class=\"memdesc:a6093fd7b0a9eedba72c3622977639d92\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get address length that a specific communication subsystem uses.  <a href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">More...</a><br /></td></tr>\n<tr class=\"separator:a6093fd7b0a9eedba72c3622977639d92\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1038d7620825a653dfa36af70a2fca04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04\">handle</a> ()=0</td></tr>\n<tr class=\"memdesc:a1038d7620825a653dfa36af70a2fca04\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends next message in the queue.  <a href=\"classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04\">More...</a><br /></td></tr>\n<tr class=\"separator:a1038d7620825a653dfa36af70a2fca04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae85cd6a5937cb47f88fb82d06b21087a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">enableTransmit</a> (bool enable)=0</td></tr>\n<tr class=\"memdesc:ae85cd6a5937cb47f88fb82d06b21087a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enables or disables transmission of queued messages. Used to disable communication during wifi scan.  <a href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">More...</a><br /></td></tr>\n<tr class=\"separator:ae85cd6a5937cb47f88fb82d06b21087a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:a3a0a66fe2fadc4a71dc2ac8eb7573316\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316\">COMMS_HAL_MAX_MESSAGE_LENGTH</a> = 0</td></tr>\n<tr class=\"memdesc:a3a0a66fe2fadc4a71dc2ac8eb7573316\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum message length.  <a href=\"classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316\">More...</a><br /></td></tr>\n<tr class=\"separator:a3a0a66fe2fadc4a71dc2ac8eb7573316\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6d372da9bf4d1d00c5445b26ef7d0f0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">COMMS_HAL_ADDR_LEN</a> = 1</td></tr>\n<tr class=\"memdesc:a6d372da9bf4d1d00c5445b26ef7d0f0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Address length.  <a href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">More...</a><br /></td></tr>\n<tr class=\"separator:a6d372da9bf4d1d00c5445b26ef7d0f0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a67d74c717b8f3919307738be9d963312\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a67d74c717b8f3919307738be9d963312\">initComms</a> (<a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> peerType)=0</td></tr>\n<tr class=\"memdesc:a67d74c717b8f3919307738be9d963312\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Communication subsistem initialization.  <a href=\"classComms__halClass.html#a67d74c717b8f3919307738be9d963312\">More...</a><br /></td></tr>\n<tr class=\"separator:a67d74c717b8f3919307738be9d963312\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:ac35585ecbc8e936d9f35d32b56164b8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a> [<a class=\"el\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">COMMS_HAL_ADDR_LEN</a>]</td></tr>\n<tr class=\"memdesc:ac35585ecbc8e936d9f35d32b56164b8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gateway address.  <a href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">More...</a><br /></td></tr>\n<tr class=\"separator:ac35585ecbc8e936d9f35d32b56164b8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac495fb3d9e576bb2717c1f43197b458e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a></td></tr>\n<tr class=\"memdesc:ac495fb3d9e576bb2717c1f43197b458e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Comms channel to be used.  <a href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">More...</a><br /></td></tr>\n<tr class=\"separator:ac495fb3d9e576bb2717c1f43197b458e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5bbed119e5e361b9be85a33404cf2e83\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a> = 0</td></tr>\n<tr class=\"memdesc:a5bbed119e5e361b9be85a33404cf2e83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to a function to be called on every received message.  <a href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">More...</a><br /></td></tr>\n<tr class=\"separator:a5bbed119e5e361b9be85a33404cf2e83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3fb9182d9e9b0729d8798c43f133a130\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">sentResult</a> = 0</td></tr>\n<tr class=\"memdesc:a3fb9182d9e9b0729d8798c43f133a130\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to a function to be called to notify last sending status.  <a href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">More...</a><br /></td></tr>\n<tr class=\"separator:a3fb9182d9e9b0729d8798c43f133a130\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6472373c178c2e77f4fc50eafaedc0ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">_ownPeerType</a></td></tr>\n<tr class=\"memdesc:a6472373c178c2e77f4fc50eafaedc0ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Stores peer type, node or gateway.  <a href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">More...</a><br /></td></tr>\n<tr class=\"separator:a6472373c178c2e77f4fc50eafaedc0ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Interface for communication subsystem abstraction layer definition. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00041\">41</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"a38e3e9572cead89962b66c2634a9e2ac\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a38e3e9572cead89962b66c2634a9e2ac\">&#9670;&nbsp;</a></span>Comms_halClass()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Comms_halClass::Comms_halClass </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00062\">62</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a1b7f86efd799761dead77fcccf036d1d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1b7f86efd799761dead77fcccf036d1d\">&#9670;&nbsp;</a></span>begin()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void Comms_halClass::begin </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>gateway</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>channel</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>peerType</em> = <code><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Setup communication environment and establish the connection from node to gateway. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">gateway</td><td>Address of gateway. It may be <code>NULL</code> in case this is used in the own gateway </td></tr>\n    <tr><td class=\"paramname\">channel</td><td>Establishes a channel for the communication. Its use depends on actual communications subsystem </td></tr>\n    <tr><td class=\"paramname\">peerType</td><td>Role that peer plays into the system, node or gateway. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implemented in <a class=\"el\" href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">Espnow_halClass</a>.</p>\n\n</div>\n</div>\n<a id=\"ae85cd6a5937cb47f88fb82d06b21087a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae85cd6a5937cb47f88fb82d06b21087a\">&#9670;&nbsp;</a></span>enableTransmit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void Comms_halClass::enableTransmit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>enable</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Enables or disables transmission of queued messages. Used to disable communication during wifi scan. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">enable</td><td><code>true</code> to enable transmission, <code>false</code> to disable it </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implemented in <a class=\"el\" href=\"classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f\">Espnow_halClass</a>.</p>\n\n</div>\n</div>\n<a id=\"a6093fd7b0a9eedba72c3622977639d92\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6093fd7b0a9eedba72c3622977639d92\">&#9670;&nbsp;</a></span>getAddressLength()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual uint8_t Comms_halClass::getAddressLength </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Get address length that a specific communication subsystem uses. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns number of bytes that is used to represent an address </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d\">Espnow_halClass</a>.</p>\n\n</div>\n</div>\n<a id=\"a1038d7620825a653dfa36af70a2fca04\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1038d7620825a653dfa36af70a2fca04\">&#9670;&nbsp;</a></span>handle()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void Comms_halClass::handle </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends next message in the queue. </p>\n\n<p>Implemented in <a class=\"el\" href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">Espnow_halClass</a>.</p>\n\n</div>\n</div>\n<a id=\"a67d74c717b8f3919307738be9d963312\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a67d74c717b8f3919307738be9d963312\">&#9670;&nbsp;</a></span>initComms()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void Comms_halClass::initComms </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>peerType</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Communication subsistem initialization. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">peerType</td><td>Role that peer plays into the system, node or gateway. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implemented in <a class=\"el\" href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">Espnow_halClass</a>.</p>\n\n</div>\n</div>\n<a id=\"a0db88323996d12342a9c60143d90c51f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0db88323996d12342a9c60143d90c51f\">&#9670;&nbsp;</a></span>onDataRcvd()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void Comms_halClass::onDataRcvd </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a>&#160;</td>\n          <td class=\"paramname\"><em>dataRcvd</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Attach a callback function to be run on every received message. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">dataRcvd</td><td>Pointer to the callback function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implemented in <a class=\"el\" href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">Espnow_halClass</a>.</p>\n\n</div>\n</div>\n<a id=\"a393acd5ba5c49031b3c827f7cbce37fa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a393acd5ba5c49031b3c827f7cbce37fa\">&#9670;&nbsp;</a></span>onDataSent()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void Comms_halClass::onDataSent </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a>&#160;</td>\n          <td class=\"paramname\"><em>dataRcvd</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Attach a callback function to be run after sending a message to receive its status. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">dataRcvd</td><td>Pointer to the callback function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implemented in <a class=\"el\" href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">Espnow_halClass</a>.</p>\n\n</div>\n</div>\n<a id=\"ac5a613a21aca12c2d2efbff02a2f0ff5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac5a613a21aca12c2d2efbff02a2f0ff5\">&#9670;&nbsp;</a></span>send()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual int32_t Comms_halClass::send </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>da</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends data to the other peer. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">da</td><td>Destination address to send the message to </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Data buffer that contain the message to be sent </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Data length in number of bytes </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns sending status. 0 for success, any other value to indicate an error. </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">Espnow_halClass</a>.</p>\n\n</div>\n</div>\n<a id=\"aa69c265e65ce31580af6d5dd9b3cd40f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa69c265e65ce31580af6d5dd9b3cd40f\">&#9670;&nbsp;</a></span>stop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void Comms_halClass::stop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Terminates communication and closes all connectrions. </p>\n\n<p>Implemented in <a class=\"el\" href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">Espnow_halClass</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a6472373c178c2e77f4fc50eafaedc0ab\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6472373c178c2e77f4fc50eafaedc0ab\">&#9670;&nbsp;</a></span>_ownPeerType</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> Comms_halClass::_ownPeerType</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Stores peer type, node or gateway. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00052\">52</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac495fb3d9e576bb2717c1f43197b458e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac495fb3d9e576bb2717c1f43197b458e\">&#9670;&nbsp;</a></span>channel</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t Comms_halClass::channel</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Comms channel to be used. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00048\">48</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6d372da9bf4d1d00c5445b26ef7d0f0b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6d372da9bf4d1d00c5445b26ef7d0f0b\">&#9670;&nbsp;</a></span>COMMS_HAL_ADDR_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t Comms_halClass::COMMS_HAL_ADDR_LEN = 1</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Address length. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00044\">44</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a3a0a66fe2fadc4a71dc2ac8eb7573316\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3a0a66fe2fadc4a71dc2ac8eb7573316\">&#9670;&nbsp;</a></span>COMMS_HAL_MAX_MESSAGE_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const size_t Comms_halClass::COMMS_HAL_MAX_MESSAGE_LENGTH = 0</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Maximum message length. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00043\">43</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5bbed119e5e361b9be85a33404cf2e83\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5bbed119e5e361b9be85a33404cf2e83\">&#9670;&nbsp;</a></span>dataRcvd</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a> Comms_halClass::dataRcvd = 0</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Pointer to a function to be called on every received message. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00050\">50</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac35585ecbc8e936d9f35d32b56164b8e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac35585ecbc8e936d9f35d32b56164b8e\">&#9670;&nbsp;</a></span>gateway</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t Comms_halClass::gateway[<a class=\"el\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">COMMS_HAL_ADDR_LEN</a>]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gateway address. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00047\">47</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a3fb9182d9e9b0729d8798c43f133a130\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3fb9182d9e9b0729d8798c43f133a130\">&#9670;&nbsp;</a></span>sentResult</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a> Comms_halClass::sentResult = 0</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Pointer to a function to be called to notify last sending status. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00051\">51</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>src/<a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classCryptModule-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">CryptModule Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classCryptModule.html\">CryptModule</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">decryptBuffer</a>(const uint8_t *data, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">encryptBuffer</a>(const uint8_t *data, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">getDH1</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">getDH2</a>(const uint8_t *remotePubKey)</td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#a9d106f893f329d8648aba205b3717806\">getPrivDHKey</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">getPubDHKey</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">getSHA256</a>(uint8_t *buffer, uint8_t length)</td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">privateDHKey</a></td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">publicDHKey</a></td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#a880b6a28ae062613f81b1524df884832\">random</a>(uint32_t max, uint32_t min=0)</td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html#a81975699307738712329b4ef8cb47675\">random</a>(const uint8_t *buf, size_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classCryptModule.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: CryptModule Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classCryptModule-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">CryptModule Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>EnigmaIoT Crypto module. Wraps Arduino CryptoLib classes and methods.  \n <a href=\"classCryptModule.html#details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ab043ae3361d34921f36d7d0189c058d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">getDH1</a> ()</td></tr>\n<tr class=\"memdesc:ab043ae3361d34921f36d7d0189c058d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts first stage of Diffie Hellman key agreement algorithm.  <a href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ab043ae3361d34921f36d7d0189c058d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1cd41eabb8dc153f74d42f263d168fee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">getDH2</a> (const uint8_t *remotePubKey)</td></tr>\n<tr class=\"memdesc:a1cd41eabb8dc153f74d42f263d168fee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts second stage of Diffie Hellman key agreement algorithm and calculate shares key.  <a href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">More...</a><br /></td></tr>\n<tr class=\"separator:a1cd41eabb8dc153f74d42f263d168fee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9d106f893f329d8648aba205b3717806\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#a9d106f893f329d8648aba205b3717806\">getPrivDHKey</a> ()</td></tr>\n<tr class=\"memdesc:a9d106f893f329d8648aba205b3717806\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets own private key used on Diffie Hellman algorithm.  <a href=\"classCryptModule.html#a9d106f893f329d8648aba205b3717806\">More...</a><br /></td></tr>\n<tr class=\"separator:a9d106f893f329d8648aba205b3717806\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aefc84d57eee3eceeadc3611866925804\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">getPubDHKey</a> ()</td></tr>\n<tr class=\"memdesc:aefc84d57eee3eceeadc3611866925804\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets own public key used on Diffie Hellman algorithm.  <a href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">More...</a><br /></td></tr>\n<tr class=\"separator:aefc84d57eee3eceeadc3611866925804\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a96b21ebe23b1914e09408bd3e41b34b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ()</td></tr>\n<tr class=\"memdesc:a96b21ebe23b1914e09408bd3e41b34b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets a random number.  <a href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">More...</a><br /></td></tr>\n<tr class=\"separator:a96b21ebe23b1914e09408bd3e41b34b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a880b6a28ae062613f81b1524df884832\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#a880b6a28ae062613f81b1524df884832\">random</a> (uint32_t max, uint32_t min=0)</td></tr>\n<tr class=\"separator:a880b6a28ae062613f81b1524df884832\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81975699307738712329b4ef8cb47675\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static uint8_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#a81975699307738712329b4ef8cb47675\">random</a> (const uint8_t *buf, size_t len)</td></tr>\n<tr class=\"memdesc:a81975699307738712329b4ef8cb47675\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fills a buffer with random values.  <a href=\"classCryptModule.html#a81975699307738712329b4ef8cb47675\">More...</a><br /></td></tr>\n<tr class=\"separator:a81975699307738712329b4ef8cb47675\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a55883c161c22f5182fc40f97a84a5da6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">decryptBuffer</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</td></tr>\n<tr class=\"memdesc:a55883c161c22f5182fc40f97a84a5da6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Decrypts a buffer using a shared key.  <a href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">More...</a><br /></td></tr>\n<tr class=\"separator:a55883c161c22f5182fc40f97a84a5da6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0bc27edb1340a28f92b43dd4f91e9a16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static uint8_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">getSHA256</a> (uint8_t *buffer, uint8_t length)</td></tr>\n<tr class=\"memdesc:a0bc27edb1340a28f92b43dd4f91e9a16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generates a SHA256 hash from input.  <a href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">More...</a><br /></td></tr>\n<tr class=\"separator:a0bc27edb1340a28f92b43dd4f91e9a16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae90dfe037c5e9b1a6804f0292c28bddc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">encryptBuffer</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</td></tr>\n<tr class=\"memdesc:ae90dfe037c5e9b1a6804f0292c28bddc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Decrypts a buffer using a shared key.  <a href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">More...</a><br /></td></tr>\n<tr class=\"separator:ae90dfe037c5e9b1a6804f0292c28bddc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a34795afc7eeb1110a1672d496b3d55a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">privateDHKey</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td></tr>\n<tr class=\"memdesc:a34795afc7eeb1110a1672d496b3d55a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Temporary private key store used during key agreement.  <a href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">More...</a><br /></td></tr>\n<tr class=\"separator:a34795afc7eeb1110a1672d496b3d55a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae55611b17617615a79de5325d2c3c02d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">publicDHKey</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td></tr>\n<tr class=\"memdesc:ae55611b17617615a79de5325d2c3c02d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Temporary public key store used during key agreement.  <a href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">More...</a><br /></td></tr>\n<tr class=\"separator:ae55611b17617615a79de5325d2c3c02d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>EnigmaIoT Crypto module. Wraps Arduino CryptoLib classes and methods. </p>\n<p>Uses <a href=\"https://rweather.github.io/arduinolibs/crypto.html\">Arduino CryptoLib</a> library </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8h_source.html#l00035\">35</a> of file <a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a55883c161c22f5182fc40f97a84a5da6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a55883c161c22f5182fc40f97a84a5da6\">&#9670;&nbsp;</a></span>decryptBuffer()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CryptModule::decryptBuffer </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>iv</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>ivlen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>key</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>keylen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>aad</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>aadLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>tag</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>tagLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Decrypts a buffer using a shared key. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Buffer to decrypt. It will be used as input and output </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Buffer length in number of bytes </td></tr>\n    <tr><td class=\"paramname\">iv</td><td>Initialization Vector used to encrypt this data </td></tr>\n    <tr><td class=\"paramname\">ivlen</td><td>IV length </td></tr>\n    <tr><td class=\"paramname\">key</td><td>Shared key used to encrypt data </td></tr>\n    <tr><td class=\"paramname\">keylen</td><td>Key length </td></tr>\n    <tr><td class=\"paramname\">aad</td><td>Additional Authentication Data for Poly1305 </td></tr>\n    <tr><td class=\"paramname\">aadLen</td><td>Additional Authentication Data length </td></tr>\n    <tr><td class=\"paramname\">tag</td><td>Buffer to store authentication tag calculated by Poly1305 </td></tr>\n    <tr><td class=\"paramname\">tagLen</td><td>Additional Authentication Tag length </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>True if decryption and tag checking was correct </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8cpp_source.html#l00052\">52</a> of file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae90dfe037c5e9b1a6804f0292c28bddc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae90dfe037c5e9b1a6804f0292c28bddc\">&#9670;&nbsp;</a></span>encryptBuffer()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CryptModule::encryptBuffer </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>iv</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>ivlen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>key</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>keylen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>aad</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>aadLen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>tag</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>tagLen</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Decrypts a buffer using a shared key. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Buffer to decrypt. It will be used as input and output </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Buffer length in number of bytes </td></tr>\n    <tr><td class=\"paramname\">iv</td><td>Initialization Vector used to encrypt this data </td></tr>\n    <tr><td class=\"paramname\">ivlen</td><td>IV length </td></tr>\n    <tr><td class=\"paramname\">key</td><td>Shared key used to encrypt data </td></tr>\n    <tr><td class=\"paramname\">keylen</td><td>Key length </td></tr>\n    <tr><td class=\"paramname\">aad</td><td>Additional Authentication Data for Poly1305 </td></tr>\n    <tr><td class=\"paramname\">aadLen</td><td>Additional Authentication Data length </td></tr>\n    <tr><td class=\"paramname\">tag</td><td>Buffer to store authentication tag calculated by Poly1305 </td></tr>\n    <tr><td class=\"paramname\">tagLen</td><td>Additional Authentication Tag length </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>True if encryption and tag generation was correct </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8cpp_source.html#l00086\">86</a> of file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab043ae3361d34921f36d7d0189c058d1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab043ae3361d34921f36d7d0189c058d1\">&#9670;&nbsp;</a></span>getDH1()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void CryptModule::getDH1 </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Starts first stage of Diffie Hellman key agreement algorithm. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8cpp_source.html#l00141\">141</a> of file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a1cd41eabb8dc153f74d42f263d168fee\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1cd41eabb8dc153f74d42f263d168fee\">&#9670;&nbsp;</a></span>getDH2()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool CryptModule::getDH2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>remotePubKey</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Starts second stage of Diffie Hellman key agreement algorithm and calculate shares key. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">remotePubKey</td><td>Public key got from the other peer </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if calculation worked normally, <code>false</code> otherwise. </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8cpp_source.html#l00148\">148</a> of file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a9d106f893f329d8648aba205b3717806\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9d106f893f329d8648aba205b3717806\">&#9670;&nbsp;</a></span>getPrivDHKey()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t* CryptModule::getPrivDHKey </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets own private key used on Diffie Hellman algorithm. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Pointer to private key </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8h_source.html#l00128\">128</a> of file <a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aefc84d57eee3eceeadc3611866925804\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aefc84d57eee3eceeadc3611866925804\">&#9670;&nbsp;</a></span>getPubDHKey()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t* CryptModule::getPubDHKey </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets own public key used on Diffie Hellman algorithm. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Pointer to public key </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8h_source.html#l00136\">136</a> of file <a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0bc27edb1340a28f92b43dd4f91e9a16\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0bc27edb1340a28f92b43dd4f91e9a16\">&#9670;&nbsp;</a></span>getSHA256()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t * CryptModule::getSHA256 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Generates a SHA256 hash from input. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">buffer</td><td>Buffer with data to hash. Hash will be stored here </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Buffer length in number of bytes. It should be 32 at least </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns buffer pointer </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8cpp_source.html#l00020\">20</a> of file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a96b21ebe23b1914e09408bd3e41b34b0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a96b21ebe23b1914e09408bd3e41b34b0\">&#9670;&nbsp;</a></span>random() <span class=\"overload\">[1/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint32_t CryptModule::random </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets a random number. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a random number </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8cpp_source.html#l00119\">119</a> of file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81975699307738712329b4ef8cb47675\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81975699307738712329b4ef8cb47675\">&#9670;&nbsp;</a></span>random() <span class=\"overload\">[2/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t * CryptModule::random </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Fills a buffer with random values. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">buf</td><td>Pointer to the buffer to fill </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Buffer length in number of bytes </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns the same buffer used as input, filled with random data </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8cpp_source.html#l00127\">127</a> of file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a880b6a28ae062613f81b1524df884832\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a880b6a28ae062613f81b1524df884832\">&#9670;&nbsp;</a></span>random() <span class=\"overload\">[3/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static uint32_t CryptModule::random </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint32_t&#160;</td>\n          <td class=\"paramname\"><em>max</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint32_t&#160;</td>\n          <td class=\"paramname\"><em>min</em> = <code>0</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8h_source.html#l00043\">43</a> of file <a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a34795afc7eeb1110a1672d496b3d55a3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a34795afc7eeb1110a1672d496b3d55a3\">&#9670;&nbsp;</a></span>privateDHKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t CryptModule::privateDHKey[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Temporary private key store used during key agreement. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8h_source.html#l00141\">141</a> of file <a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae55611b17617615a79de5325d2c3c02d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae55611b17617615a79de5325d2c3c02d\">&#9670;&nbsp;</a></span>publicDHKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t CryptModule::publicDHKey[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Temporary public key store used during key agreement. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8h_source.html#l00142\">142</a> of file <a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a></li>\n<li>src/<a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classEnigmaIOTGatewayClass-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGatewayClass Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">addInputMsgQueue</a>(const uint8_t *addr, const uint8_t *msg, size_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">addWiFiManagerParameter</a>(AsyncWiFiManagerParameter *p)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">begin</a>(Comms_halClass *comm, uint8_t *networkKey=NULL, bool useDataCounter=true)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\">clockResponse</a>(Node *node, uint64_t t1, uint64_t t2)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">configWiFiManager</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">dns</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">doResetConfig</a>(void)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">doSave</a>(void)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">downstreamDataMessage</a>(Node *node, const uint8_t *data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t encoding=ENIGMAIOT)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">flashRx</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">flashTx</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0b1bb7ec1dc2b4a244c77ffd04786a0c\">GatewayAPI</a> class</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">getActiveNodesNumber</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">getErrorPackets</a>(uint8_t *address)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">getInputMsgQueue</a>(msg_queue_item_t *buffer)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">getNetworkKey</a>(bool plain=false)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">getNetworkName</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">getNodes</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">getPacketsHour</a>(uint8_t *address)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">getPER</a>(uint8_t *address)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">getShouldSave</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">getStatus</a>(uint8_t *mac_addr, uint8_t status)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">getTotalPackets</a>(uint8_t *address)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a>(Node *node, gwInvalidateReason_t reason)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">loadFlashData</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">manageMessage</a>(const uint8_t *mac, uint8_t *buf, uint8_t count)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">myPublicKey</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381\">nodeNameSetRespose</a>(Node *node, int8_t error)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">notifyData</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">notifyHADiscovery</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">notifyNewNode</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">notifyNodeDisconnection</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">notifyRestartRequested</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">notifyWiFiManagerExit</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">notifyWiFiManagerStarted</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">onDataRx</a>(onGwDataRx_t handler)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db\">onGatewayRestartRequested</a>(simpleEventHandler_t handler)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83\">onHADiscovery</a>(onHADiscovery_t handler)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">onNewNode</a>(onNewNode_t handler)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">onNodeDisconnected</a>(onNodeDisconnected_t handler)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">onWiFiManagerExit</a>(onWiFiManagerExit_t handle)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">onWiFiManagerStarted</a>(simpleEventHandler_t handle)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">plainNetKey</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">popInputMsgQueue</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\">processClientHello</a>(const uint8_t mac[ENIGMAIOT_ADDR_LEN], const uint8_t *buf, size_t count, Node *node)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\">processClockRequest</a>(const uint8_t mac[ENIGMAIOT_ADDR_LEN], const uint8_t *buf, size_t count, Node *node)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\">processControlMessage</a>(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\">processDataMessage</a>(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node, bool encrypted=true)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\">processNodeNameSet</a>(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\">processUnencryptedDataMessage</a>(const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t *buf, size_t count, Node *node)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">rx_cb</a>(uint8_t *mac_addr, uint8_t *data, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">rxled</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">rxLedOnTime</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">saveFlashData</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\">sendBroadcastKey</a>(Node *node)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">sendDownstream</a>(uint8_t *mac, const uint8_t *data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t payload_type=RAW, char *nodeName=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\">sendHADiscoveryJSON</a>(uint8_t *address, uint8_t *data, size_t len, const char *networkName, const char *nodeName)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">server</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\">serverHello</a>(const uint8_t *key, Node *node)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">setRxLed</a>(uint8_t led, time_t onTime=FLASH_LED_TIME)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">setTxLed</a>(uint8_t led, time_t onTime=FLASH_LED_TIME)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74\">tempBuffer</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">tx_cb</a>(uint8_t *mac_addr, uint8_t status)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">txled</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">txLedOnTime</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classEnigmaIOTGatewayClass.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOTGatewayClass Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-static-methods\">Static Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"classEnigmaIOTGatewayClass-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGatewayClass Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Main gateway class. Manages communication with nodes and sends data to upper layer.  \n <a href=\"classEnigmaIOTGatewayClass.html#details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a446e327328ebbcbe9b20f38f1080b9e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">getShouldSave</a> ()</td></tr>\n<tr class=\"memdesc:a446e327328ebbcbe9b20f38f1080b9e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets flag that indicates if configuration should be saved.  <a href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">More...</a><br /></td></tr>\n<tr class=\"separator:a446e327328ebbcbe9b20f38f1080b9e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a29ed1ba0c2a04911013795cb11ff13e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">getNetworkName</a> ()</td></tr>\n<tr class=\"memdesc:a29ed1ba0c2a04911013795cb11ff13e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets EnigmaIOT network name.  <a href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">More...</a><br /></td></tr>\n<tr class=\"separator:a29ed1ba0c2a04911013795cb11ff13e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac015f00758aac57a7f7ef2ffe26298b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">getNetworkKey</a> (bool plain=false)</td></tr>\n<tr class=\"memdesc:ac015f00758aac57a7f7ef2ffe26298b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets hashed EnigmaIOT network key.  <a href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">More...</a><br /></td></tr>\n<tr class=\"separator:ac015f00758aac57a7f7ef2ffe26298b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad900c9546a9b2f0e99d2c7bec781dad7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">addWiFiManagerParameter</a> (AsyncWiFiManagerParameter *p)</td></tr>\n<tr class=\"memdesc:ad900c9546a9b2f0e99d2c7bec781dad7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Adds a parameter to configuration portal.  <a href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">More...</a><br /></td></tr>\n<tr class=\"separator:ad900c9546a9b2f0e99d2c7bec781dad7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a74f3b21d578650defdb63b334102dc48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">onWiFiManagerExit</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a> <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a>)</td></tr>\n<tr class=\"memdesc:a74f3b21d578650defdb63b334102dc48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Register callback to be called on wifi manager exit.  <a href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">More...</a><br /></td></tr>\n<tr class=\"separator:a74f3b21d578650defdb63b334102dc48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a037f8a0b338363b5555f353df30120ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">onWiFiManagerStarted</a> (<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a>)</td></tr>\n<tr class=\"memdesc:a037f8a0b338363b5555f353df30120ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Register callback to be called on wifi manager start.  <a href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">More...</a><br /></td></tr>\n<tr class=\"separator:a037f8a0b338363b5555f353df30120ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad6c301b780bd802ee98bbe25885c0cfd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">configWiFiManager</a> ()</td></tr>\n<tr class=\"memdesc:ad6c301b780bd802ee98bbe25885c0cfd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts configuration AP and web server and gets settings from it.  <a href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">More...</a><br /></td></tr>\n<tr class=\"separator:ad6c301b780bd802ee98bbe25885c0cfd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9a6b2d2a88c39a839f414e9ce861c5a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">begin</a> (<a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a>, uint8_t *networkKey=NULL, bool useDataCounter=true)</td></tr>\n<tr class=\"memdesc:a9a6b2d2a88c39a839f414e9ce861c5a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initalizes communication basic data and starts accepting node registration.  <a href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">More...</a><br /></td></tr>\n<tr class=\"separator:a9a6b2d2a88c39a839f414e9ce861c5a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a52bbd932eb2a7fac9a3dc1debbc62e5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">handle</a> ()</td></tr>\n<tr class=\"memdesc:a52bbd932eb2a7fac9a3dc1debbc62e5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This method should be called periodically for instance inside <code><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop()</a></code> function. It is used for internal gateway maintenance tasks.  <a href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">More...</a><br /></td></tr>\n<tr class=\"separator:a52bbd932eb2a7fac9a3dc1debbc62e5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a330863b8dd757d66f990a14298f2faf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">setTxLed</a> (uint8_t led, time_t onTime=<a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a>)</td></tr>\n<tr class=\"memdesc:a330863b8dd757d66f990a14298f2faf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets a LED to be flashed every time a message is transmitted.  <a href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">More...</a><br /></td></tr>\n<tr class=\"separator:a330863b8dd757d66f990a14298f2faf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a514a694eb41c0cbb43e43c1621313187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">setRxLed</a> (uint8_t led, time_t onTime=<a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a>)</td></tr>\n<tr class=\"memdesc:a514a694eb41c0cbb43e43c1621313187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets a LED to be flashed every time a message is received.  <a href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">More...</a><br /></td></tr>\n<tr class=\"separator:a514a694eb41c0cbb43e43c1621313187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2611c30452fc9785b3958eddca02daf8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">onDataRx</a> (<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">onGwDataRx_t</a> handler)</td></tr>\n<tr class=\"memdesc:a2611c30452fc9785b3958eddca02daf8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a function callback that will be called on every downlink data message that is received from a node.  <a href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">More...</a><br /></td></tr>\n<tr class=\"separator:a2611c30452fc9785b3958eddca02daf8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5ddb096aa5a0ec2113307a1480992a83\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83\">onHADiscovery</a> (onHADiscovery_t handler)</td></tr>\n<tr class=\"memdesc:a5ddb096aa5a0ec2113307a1480992a83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a function callback that will be called when a Home Assistant discovery message is received from a node.  <a href=\"classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83\">More...</a><br /></td></tr>\n<tr class=\"separator:a5ddb096aa5a0ec2113307a1480992a83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb41f49d1291eebbd676d4915ee193d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">getPER</a> (uint8_t *address)</td></tr>\n<tr class=\"memdesc:afb41f49d1291eebbd676d4915ee193d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets packet error rate of node that has a specific address.  <a href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">More...</a><br /></td></tr>\n<tr class=\"separator:afb41f49d1291eebbd676d4915ee193d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8eed8023d964354b6a2533c9662037e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">getTotalPackets</a> (uint8_t *address)</td></tr>\n<tr class=\"memdesc:a8eed8023d964354b6a2533c9662037e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets total packets sent by node that has a specific address.  <a href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">More...</a><br /></td></tr>\n<tr class=\"separator:a8eed8023d964354b6a2533c9662037e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a160b39becf7cdf8700059947eaf6a73b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">getErrorPackets</a> (uint8_t *address)</td></tr>\n<tr class=\"memdesc:a160b39becf7cdf8700059947eaf6a73b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets number of errored packets of node that has a specific address.  <a href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">More...</a><br /></td></tr>\n<tr class=\"separator:a160b39becf7cdf8700059947eaf6a73b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a77da5264eb27ff8d378a8b279c8b97c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">getPacketsHour</a> (uint8_t *address)</td></tr>\n<tr class=\"memdesc:a77da5264eb27ff8d378a8b279c8b97c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets packet rate sent by node that has a specific address, in packets per hour.  <a href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">More...</a><br /></td></tr>\n<tr class=\"separator:a77da5264eb27ff8d378a8b279c8b97c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d5ce4312735008866cf84559bc645c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">sendDownstream</a> (uint8_t *mac, const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> controlData, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> payload_type=<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a>, char *nodeName=NULL)</td></tr>\n<tr class=\"memdesc:a5d5ce4312735008866cf84559bc645c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts a downstream data message transmission.  <a href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">More...</a><br /></td></tr>\n<tr class=\"separator:a5d5ce4312735008866cf84559bc645c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1726020bc65217b9ec4d01bb0216a526\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">onNewNode</a> (<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">onNewNode_t</a> handler)</td></tr>\n<tr class=\"memdesc:a1726020bc65217b9ec4d01bb0216a526\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a function callback that will be called every time a node gets connected or reconnected.  <a href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">More...</a><br /></td></tr>\n<tr class=\"separator:a1726020bc65217b9ec4d01bb0216a526\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a975c9b549e113deebe5581d5107d34b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">onNodeDisconnected</a> (<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">onNodeDisconnected_t</a> handler)</td></tr>\n<tr class=\"memdesc:a975c9b549e113deebe5581d5107d34b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a function callback that will be called every time a node is disconnected.  <a href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">More...</a><br /></td></tr>\n<tr class=\"separator:a975c9b549e113deebe5581d5107d34b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5c8f994db7043a0e12f9c1d2149e63db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db\">onGatewayRestartRequested</a> (<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> handler)</td></tr>\n<tr class=\"memdesc:a5c8f994db7043a0e12f9c1d2149e63db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a function callback that will process a gateway restart request.  <a href=\"classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db\">More...</a><br /></td></tr>\n<tr class=\"separator:a5c8f994db7043a0e12f9c1d2149e63db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a43043a36c73d7de2ffe49e551cc6ae43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">addInputMsgQueue</a> (const uint8_t *addr, const uint8_t *msg, size_t len)</td></tr>\n<tr class=\"memdesc:a43043a36c73d7de2ffe49e551cc6ae43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add message to input queue.  <a href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">More...</a><br /></td></tr>\n<tr class=\"separator:a43043a36c73d7de2ffe49e551cc6ae43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac3355fe40cad325eddb8e37dd9ddfaf5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">getInputMsgQueue</a> (<a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a> *buffer)</td></tr>\n<tr class=\"memdesc:ac3355fe40cad325eddb8e37dd9ddfaf5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets next item in the queue.  <a href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">More...</a><br /></td></tr>\n<tr class=\"separator:ac3355fe40cad325eddb8e37dd9ddfaf5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abf7f0271c0938cf36f316bf3338aba4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">popInputMsgQueue</a> ()</td></tr>\n<tr class=\"memdesc:abf7f0271c0938cf36f316bf3338aba4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deletes next item in the queue.  <a href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">More...</a><br /></td></tr>\n<tr class=\"separator:abf7f0271c0938cf36f316bf3338aba4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4a8fee82bf25fa412846a5ffa2a3cbbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">getActiveNodesNumber</a> ()</td></tr>\n<tr class=\"memdesc:a4a8fee82bf25fa412846a5ffa2a3cbbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets number of active nodes.  <a href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">More...</a><br /></td></tr>\n<tr class=\"separator:a4a8fee82bf25fa412846a5ffa2a3cbbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aabb971124202457b2e8a3627217dd213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">getNodes</a> ()</td></tr>\n<tr class=\"memdesc:aabb971124202457b2e8a3627217dd213\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets nodes data structure.  <a href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">More...</a><br /></td></tr>\n<tr class=\"separator:aabb971124202457b2e8a3627217dd213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:aec8a0e96ff309d34ef19a5eaa66c40e0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\">serverHello</a> (const uint8_t *key, <a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)</td></tr>\n<tr class=\"memdesc:aec8a0e96ff309d34ef19a5eaa66c40e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a <b>ServerHello</b> message and send it to node.  <a href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\">More...</a><br /></td></tr>\n<tr class=\"separator:aec8a0e96ff309d34ef19a5eaa66c40e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fbf2cc61a51bdce3254f8478268f0c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\">sendBroadcastKey</a> (<a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)</td></tr>\n<tr class=\"memdesc:a2fbf2cc61a51bdce3254f8478268f0c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends broadcast key to node if it has requested it explicitly or it has notified during handshake.  <a href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\">More...</a><br /></td></tr>\n<tr class=\"separator:a2fbf2cc61a51bdce3254f8478268f0c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a17e46dd4d8b522e0ce91b729e9687350\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\">processClientHello</a> (const uint8_t mac[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], const uint8_t *buf, size_t count, <a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)</td></tr>\n<tr class=\"memdesc:a17e46dd4d8b522e0ce91b729e9687350\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets a buffer containing a <b>ClientHello</b> message and process it. This carries node public key to be used on Diffie Hellman algorithm.  <a href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\">More...</a><br /></td></tr>\n<tr class=\"separator:a17e46dd4d8b522e0ce91b729e9687350\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ea92c22b1d415d53d635391d9ef6b07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\">processClockRequest</a> (const uint8_t mac[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], const uint8_t *buf, size_t count, <a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)</td></tr>\n<tr class=\"memdesc:a0ea92c22b1d415d53d635391d9ef6b07\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts clock sync procedure from node to gateway.  <a href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\">More...</a><br /></td></tr>\n<tr class=\"separator:a0ea92c22b1d415d53d635391d9ef6b07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa132262cf2eee428208df22d2072acf9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\">clockResponse</a> (<a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, uint64_t t1, uint64_t t2)</td></tr>\n<tr class=\"memdesc:aa132262cf2eee428208df22d2072acf9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns timestaps needed so that node can calculate time difference.  <a href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\">More...</a><br /></td></tr>\n<tr class=\"separator:aa132262cf2eee428208df22d2072acf9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac241f6c48c82d297389d78ec338ddb33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">invalidateKey</a> (<a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"memdesc:ac241f6c48c82d297389d78ec338ddb33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates an <b>InvalidateKey</b> message and sned it. This trigger a new key agreement to start on related node.  <a href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">More...</a><br /></td></tr>\n<tr class=\"separator:ac241f6c48c82d297389d78ec338ddb33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a44cd0a3ac1595ecd3156af130a2cb130\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\">processDataMessage</a> (const uint8_t mac[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t *buf, size_t count, <a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, bool encrypted=true)</td></tr>\n<tr class=\"memdesc:a44cd0a3ac1595ecd3156af130a2cb130\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes data message from node.  <a href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\">More...</a><br /></td></tr>\n<tr class=\"separator:a44cd0a3ac1595ecd3156af130a2cb130\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a78b4e66eaf1e4a1cdb4baead912fb1cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\">processUnencryptedDataMessage</a> (const uint8_t mac[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t *buf, size_t count, <a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)</td></tr>\n<tr class=\"memdesc:a78b4e66eaf1e4a1cdb4baead912fb1cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes unencrypted data message from node.  <a href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\">More...</a><br /></td></tr>\n<tr class=\"separator:a78b4e66eaf1e4a1cdb4baead912fb1cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3e4fd7a7428749c7d8a375611f667165\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">downstreamDataMessage</a> (<a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a> controlData, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a> encoding=<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">ENIGMAIOT</a>)</td></tr>\n<tr class=\"memdesc:a3e4fd7a7428749c7d8a375611f667165\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds, encrypts and sends a <b>DownstreamData</b> message.  <a href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">More...</a><br /></td></tr>\n<tr class=\"separator:a3e4fd7a7428749c7d8a375611f667165\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a90c1c1bffe2884247a2e047d7d254767\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\">processControlMessage</a> (const uint8_t mac[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t *buf, size_t count, <a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)</td></tr>\n<tr class=\"memdesc:a90c1c1bffe2884247a2e047d7d254767\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes control message from node.  <a href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\">More...</a><br /></td></tr>\n<tr class=\"separator:a90c1c1bffe2884247a2e047d7d254767\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae9b4cf7f3cd2da454161b943ba285cd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\">processNodeNameSet</a> (const uint8_t mac[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>], uint8_t *buf, size_t count, <a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>)</td></tr>\n<tr class=\"memdesc:ae9b4cf7f3cd2da454161b943ba285cd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes new node name request fromn node.  <a href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\">More...</a><br /></td></tr>\n<tr class=\"separator:ae9b4cf7f3cd2da454161b943ba285cd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d854e8aa39bd51344951c5205c09381\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381\">nodeNameSetRespose</a> (<a class=\"el\" href=\"classNode.html\">Node</a> *<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a>, int8_t error)</td></tr>\n<tr class=\"memdesc:a5d854e8aa39bd51344951c5205c09381\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send back set name response.  <a href=\"classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381\">More...</a><br /></td></tr>\n<tr class=\"separator:a5d854e8aa39bd51344951c5205c09381\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e19a23469e04f87744ffc930e51cf8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">manageMessage</a> (const uint8_t *mac, uint8_t *buf, uint8_t count)</td></tr>\n<tr class=\"memdesc:a2e19a23469e04f87744ffc930e51cf8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Process every received message.  <a href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">More...</a><br /></td></tr>\n<tr class=\"separator:a2e19a23469e04f87744ffc930e51cf8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6d0c9737f65f857080b7d11c34f4141e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">getStatus</a> (uint8_t *mac_addr, uint8_t <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a6d0c9737f65f857080b7d11c34f4141e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Functrion to debug send status.  <a href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">More...</a><br /></td></tr>\n<tr class=\"separator:a6d0c9737f65f857080b7d11c34f4141e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaa13dfa56be2d1ad062cc69f6deef331\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">loadFlashData</a> ()</td></tr>\n<tr class=\"memdesc:aaa13dfa56be2d1ad062cc69f6deef331\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads configuration from flash memory.  <a href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">More...</a><br /></td></tr>\n<tr class=\"separator:aaa13dfa56be2d1ad062cc69f6deef331\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a179ab2224b2cb38ea355e8d770dc0d9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">saveFlashData</a> ()</td></tr>\n<tr class=\"memdesc:a179ab2224b2cb38ea355e8d770dc0d9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves configuration to flash memory.  <a href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">More...</a><br /></td></tr>\n<tr class=\"separator:a179ab2224b2cb38ea355e8d770dc0d9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae7c947e8bfc28c1b3731a5da874e24a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\">sendHADiscoveryJSON</a> (uint8_t *address, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, const char *networkName, const char *nodeName)</td></tr>\n<tr class=\"memdesc:ae7c947e8bfc28c1b3731a5da874e24a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends a Home Assistant discovery message after receiving it from node.  <a href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\">More...</a><br /></td></tr>\n<tr class=\"separator:ae7c947e8bfc28c1b3731a5da874e24a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-methods\"></a>\nStatic Protected Member Functions</h2></td></tr>\n<tr class=\"memitem:a0edb12da3fe0cc767cab53ba480f6508\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">doSave</a> (void)</td></tr>\n<tr class=\"memdesc:a0edb12da3fe0cc767cab53ba480f6508\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Activates a flag that signals that configuration has to be saved.  <a href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">More...</a><br /></td></tr>\n<tr class=\"separator:a0edb12da3fe0cc767cab53ba480f6508\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae91f344eeae1900179ab65a247e38eda\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">doResetConfig</a> (void)</td></tr>\n<tr class=\"memdesc:ae91f344eeae1900179ab65a247e38eda\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Activates a flag that signals that configuration has to be saved.  <a href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">More...</a><br /></td></tr>\n<tr class=\"separator:ae91f344eeae1900179ab65a247e38eda\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad43bd94c6aebd18abd374da313d3b299\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">rx_cb</a> (uint8_t *mac_addr, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len)</td></tr>\n<tr class=\"memdesc:ad43bd94c6aebd18abd374da313d3b299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function that will be called anytime this gateway receives a message.  <a href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">More...</a><br /></td></tr>\n<tr class=\"separator:ad43bd94c6aebd18abd374da313d3b299\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ab81e6867a72fc7dac05f24fe7fa484\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">tx_cb</a> (uint8_t *mac_addr, uint8_t <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a0ab81e6867a72fc7dac05f24fe7fa484\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function that will be called anytime this gateway sends a message to indicate status result of sending process.  <a href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">More...</a><br /></td></tr>\n<tr class=\"separator:a0ab81e6867a72fc7dac05f24fe7fa484\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:adefe71141a5aa6f9c46712487b6feb31\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">myPublicKey</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td></tr>\n<tr class=\"memdesc:adefe71141a5aa6f9c46712487b6feb31\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Temporary public key store used during key agreement.  <a href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">More...</a><br /></td></tr>\n<tr class=\"separator:adefe71141a5aa6f9c46712487b6feb31\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5eb353d426ea01a2aa183ae90855a3ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">flashTx</a> = false</td></tr>\n<tr class=\"memdesc:a5eb353d426ea01a2aa183ae90855a3ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><code>true</code> if Tx LED should flash  <a href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">More...</a><br /></td></tr>\n<tr class=\"separator:a5eb353d426ea01a2aa183ae90855a3ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab639ce1297059231304d90d41ab65197\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">volatile bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">flashRx</a> = false</td></tr>\n<tr class=\"memdesc:ab639ce1297059231304d90d41ab65197\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><code>true</code> if Rx LED should flash  <a href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">More...</a><br /></td></tr>\n<tr class=\"separator:ab639ce1297059231304d90d41ab65197\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a69e6d53334b842b054fc9e3cfdbb6067\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6\">node_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">node</a></td></tr>\n<tr class=\"memdesc:a69e6d53334b842b054fc9e3cfdbb6067\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">temporary store to keep node data while processing a message  <a href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">More...</a><br /></td></tr>\n<tr class=\"separator:a69e6d53334b842b054fc9e3cfdbb6067\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ef5d02770b1b3bf2acf0adf7b410a17\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">nodelist</a></td></tr>\n<tr class=\"memdesc:a1ef5d02770b1b3bf2acf0adf7b410a17\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> database that keeps status and shared keys.  <a href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">More...</a><br /></td></tr>\n<tr class=\"separator:a1ef5d02770b1b3bf2acf0adf7b410a17\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab049e20310e2a18bd1f8adc4ec975254\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">comm</a></td></tr>\n<tr class=\"memdesc:ab049e20310e2a18bd1f8adc4ec975254\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Instance of physical communication layer.  <a href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">More...</a><br /></td></tr>\n<tr class=\"separator:ab049e20310e2a18bd1f8adc4ec975254\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d86390169309396f3d21149c3649453\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">txled</a> = -1</td></tr>\n<tr class=\"memdesc:a8d86390169309396f3d21149c3649453\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">I/O pin to connect a led that flashes when gateway transmits data.  <a href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">More...</a><br /></td></tr>\n<tr class=\"separator:a8d86390169309396f3d21149c3649453\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a038ecd9541cb893eb58fb6aa49994816\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">rxled</a> = -1</td></tr>\n<tr class=\"memdesc:a038ecd9541cb893eb58fb6aa49994816\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">I/O pin to connect a led that flashes when gateway receives data.  <a href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">More...</a><br /></td></tr>\n<tr class=\"separator:a038ecd9541cb893eb58fb6aa49994816\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aacbd1597e7a6be2957ac4f3ade9dc243\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned long&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">txLedOnTime</a></td></tr>\n<tr class=\"memdesc:aacbd1597e7a6be2957ac4f3ade9dc243\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flash duration for Tx LED.  <a href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">More...</a><br /></td></tr>\n<tr class=\"separator:aacbd1597e7a6be2957ac4f3ade9dc243\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e93664145eb75e55ae4c6d3482c8a64\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned long&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">rxLedOnTime</a></td></tr>\n<tr class=\"memdesc:a5e93664145eb75e55ae4c6d3482c8a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flash duration for Rx LED.  <a href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">More...</a><br /></td></tr>\n<tr class=\"separator:a5e93664145eb75e55ae4c6d3482c8a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab21597ced9ee31298c8a8eefed562ff9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">onGwDataRx_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">notifyData</a></td></tr>\n<tr class=\"memdesc:ab21597ced9ee31298c8a8eefed562ff9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Callback function that will be invoked when data is received from a node.  <a href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">More...</a><br /></td></tr>\n<tr class=\"separator:ab21597ced9ee31298c8a8eefed562ff9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae0c52d330bfce048e9d8c4fb8cf1a967\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">onHADiscovery_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">notifyHADiscovery</a></td></tr>\n<tr class=\"memdesc:ae0c52d330bfce048e9d8c4fb8cf1a967\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Callback function that will be invoked when HomeAssistant discovery message is received from a node.  <a href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">More...</a><br /></td></tr>\n<tr class=\"separator:ae0c52d330bfce048e9d8c4fb8cf1a967\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a27ddc1b8decbcf821a0427faa3c1ced3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">onNewNode_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">notifyNewNode</a></td></tr>\n<tr class=\"memdesc:a27ddc1b8decbcf821a0427faa3c1ced3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Callback function that will be invoked when a new node is connected.  <a href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">More...</a><br /></td></tr>\n<tr class=\"separator:a27ddc1b8decbcf821a0427faa3c1ced3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac311b64885137edaab70f3692e47f061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">onNodeDisconnected_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">notifyNodeDisconnection</a></td></tr>\n<tr class=\"memdesc:ac311b64885137edaab70f3692e47f061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Callback function that will be invoked when a node gets disconnected.  <a href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">More...</a><br /></td></tr>\n<tr class=\"separator:ac311b64885137edaab70f3692e47f061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9f121c9f733353f210aa9725375fae4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">notifyRestartRequested</a></td></tr>\n<tr class=\"memdesc:a9f121c9f733353f210aa9725375fae4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Callback function that will be invoked when a hardware restart is requested.  <a href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">More...</a><br /></td></tr>\n<tr class=\"separator:a9f121c9f733353f210aa9725375fae4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a24cc18886d923df0320b6ac4eac19028\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">useCounter</a> = true</td></tr>\n<tr class=\"memdesc:a24cc18886d923df0320b6ac4eac19028\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><code>true</code> if counter is used to check data messages order  <a href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">More...</a><br /></td></tr>\n<tr class=\"separator:a24cc18886d923df0320b6ac4eac19028\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a77802389a0b41546f60ce114097bcadc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structgateway__config__t.html\">gateway_config_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">gwConfig</a></td></tr>\n<tr class=\"memdesc:a77802389a0b41546f60ce114097bcadc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gateway specific configuration to be stored on flash memory.  <a href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">More...</a><br /></td></tr>\n<tr class=\"separator:a77802389a0b41546f60ce114097bcadc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e875dd3fa022dfba029f1e1124fcded\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">plainNetKey</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td></tr>\n<tr class=\"separator:a5e875dd3fa022dfba029f1e1124fcded\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2dc1f081e8bf48d5c4e64db9caf94f74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74\">tempBuffer</a></td></tr>\n<tr class=\"memdesc:a2dc1f081e8bf48d5c4e64db9caf94f74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Temporary storage for input message got from buffer.  <a href=\"classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74\">More...</a><br /></td></tr>\n<tr class=\"separator:a2dc1f081e8bf48d5c4e64db9caf94f74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a492277b3df7f10f988c3d5cd087d1a40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; <a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a> &gt; *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">input_queue</a></td></tr>\n<tr class=\"memdesc:a492277b3df7f10f988c3d5cd087d1a40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Input messages buffer. It acts as a FIFO queue.  <a href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">More...</a><br /></td></tr>\n<tr class=\"separator:a492277b3df7f10f988c3d5cd087d1a40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6de87231a98aa132483ae97120b0f4d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWebServer *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">server</a></td></tr>\n<tr class=\"memdesc:a6de87231a98aa132483ae97120b0f4d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">WebServer that holds configuration portal.  <a href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">More...</a><br /></td></tr>\n<tr class=\"separator:a6de87231a98aa132483ae97120b0f4d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa057eae7440f60abe236ae5b121dbf7c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">DNSServer *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">dns</a></td></tr>\n<tr class=\"memdesc:aa057eae7440f60abe236ae5b121dbf7c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">DNS server used by configuration portal.  <a href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">More...</a><br /></td></tr>\n<tr class=\"separator:aa057eae7440f60abe236ae5b121dbf7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad7f3f86214c6989f2019f1df89e9f0b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWiFiManager *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">wifiManager</a></td></tr>\n<tr class=\"memdesc:ad7f3f86214c6989f2019f1df89e9f0b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wifi configuration portal.  <a href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ad7f3f86214c6989f2019f1df89e9f0b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a88c43de63b862f5a19a79e9d5558beba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">notifyWiFiManagerExit</a></td></tr>\n<tr class=\"memdesc:a88c43de63b862f5a19a79e9d5558beba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function called when configuration portal exits.  <a href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">More...</a><br /></td></tr>\n<tr class=\"separator:a88c43de63b862f5a19a79e9d5558beba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad704dfd5a37c58ef1311501b573f1251\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">notifyWiFiManagerStarted</a></td></tr>\n<tr class=\"memdesc:ad704dfd5a37c58ef1311501b573f1251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function called when configuration portal is started.  <a href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">More...</a><br /></td></tr>\n<tr class=\"separator:ad704dfd5a37c58ef1311501b573f1251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a0b1bb7ec1dc2b4a244c77ffd04786a0c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0b1bb7ec1dc2b4a244c77ffd04786a0c\">GatewayAPI</a></td></tr>\n<tr class=\"separator:a0b1bb7ec1dc2b4a244c77ffd04786a0c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Main gateway class. Manages communication with nodes and sends data to upper layer. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00120\">120</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a43043a36c73d7de2ffe49e551cc6ae43\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a43043a36c73d7de2ffe49e551cc6ae43\">&#9670;&nbsp;</a></span>addInputMsgQueue()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::addInputMsgQueue </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>addr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>msg</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Add message to input queue. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">addr</td><td>Origin address </td></tr>\n    <tr><td class=\"paramname\">msg</td><td>EnigmaIoT message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Message length </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00792\">792</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad900c9546a9b2f0e99d2c7bec781dad7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad900c9546a9b2f0e99d2c7bec781dad7\">&#9670;&nbsp;</a></span>addWiFiManagerParameter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::addWiFiManagerParameter </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWiFiManagerParameter *&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Adds a parameter to configuration portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">p</td><td>Configuration parameter </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00368\">368</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a9a6b2d2a88c39a839f414e9ce861c5a0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9a6b2d2a88c39a839f414e9ce861c5a0\">&#9670;&nbsp;</a></span>begin()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::begin </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>comm</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>networkKey</em> = <code>NULL</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>useDataCounter</em> = <code>true</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Initalizes communication basic data and starts accepting node registration. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">comm</td><td>Physical layer to be used on this network </td></tr>\n    <tr><td class=\"paramname\">networkKey</td><td>Network key to protect shared key agreement </td></tr>\n    <tr><td class=\"paramname\">useDataCounter</td><td>Indicates if a counter is going to be added to every message data to check message sequence. <code>true</code> by default </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00736\">736</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa132262cf2eee428208df22d2072acf9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa132262cf2eee428208df22d2072acf9\">&#9670;&nbsp;</a></span>clockResponse()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::clockResponse </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint64_t&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint64_t&#160;</td>\n          <td class=\"paramname\"><em>t2</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns timestaps needed so that node can calculate time difference. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to data that corresponds to originating node </td></tr>\n    <tr><td class=\"paramname\">t1</td><td>Origin clock </td></tr>\n    <tr><td class=\"paramname\">t2</td><td>Received clock </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01822\">1822</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad6c301b780bd802ee98bbe25885c0cfd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad6c301b780bd802ee98bbe25885c0cfd\">&#9670;&nbsp;</a></span>configWiFiManager()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::configWiFiManager </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Starts configuration AP and web server and gets settings from it. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if data was been correctly configured. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00494\">494</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae91f344eeae1900179ab65a247e38eda\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae91f344eeae1900179ab65a247e38eda\">&#9670;&nbsp;</a></span>doResetConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::doResetConfig </td>\n          <td>(</td>\n          <td class=\"paramtype\">void&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Activates a flag that signals that configuration has to be saved. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00047\">47</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0edb12da3fe0cc767cab53ba480f6508\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0edb12da3fe0cc767cab53ba480f6508\">&#9670;&nbsp;</a></span>doSave()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::doSave </td>\n          <td>(</td>\n          <td class=\"paramtype\">void&#160;</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Activates a flag that signals that configuration has to be saved. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00042\">42</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a3e4fd7a7428749c7d8a375611f667165\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3e4fd7a7428749c7d8a375611f667165\">&#9670;&nbsp;</a></span>downstreamDataMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::downstreamDataMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a>&#160;</td>\n          <td class=\"paramname\"><em>controlData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>encoding</em> = <code><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">ENIGMAIOT</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Builds, encrypts and sends a <b>DownstreamData</b> message. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> that downstream data message is going to </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Buffer to store payload to be sent </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n    <tr><td class=\"paramname\">controlData</td><td>Content data type if control data </td></tr>\n    <tr><td class=\"paramname\">encoding</td><td>Identifies data encoding of payload. It can be RAW, CAYENNELPP, MSGPACK </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly sent or scheduled </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01489\">1489</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4a8fee82bf25fa412846a5ffa2a3cbbb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4a8fee82bf25fa412846a5ffa2a3cbbb\">&#9670;&nbsp;</a></span>getActiveNodesNumber()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int EnigmaIOTGatewayClass::getActiveNodesNumber </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets number of active nodes. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Number of registered nodes </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00592\">592</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a160b39becf7cdf8700059947eaf6a73b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a160b39becf7cdf8700059947eaf6a73b\">&#9670;&nbsp;</a></span>getErrorPackets()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint32_t EnigmaIOTGatewayClass::getErrorPackets </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>address</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets number of errored packets of node that has a specific address. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> errored packets </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01476\">1476</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ac3355fe40cad325eddb8e37dd9ddfaf5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac3355fe40cad325eddb8e37dd9ddfaf5\">&#9670;&nbsp;</a></span>getInputMsgQueue()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a> * EnigmaIOTGatewayClass::getInputMsgQueue </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a> *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets next item in the queue. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Next message to be processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00815\">815</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ac015f00758aac57a7f7ef2ffe26298b3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac015f00758aac57a7f7ef2ffe26298b3\">&#9670;&nbsp;</a></span>getNetworkKey()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char* EnigmaIOTGatewayClass::getNetworkKey </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>plain</em> = <code>false</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets hashed EnigmaIOT network key. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns hashed EnigmaIOT network key </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00357\">357</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a29ed1ba0c2a04911013795cb11ff13e4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a29ed1ba0c2a04911013795cb11ff13e4\">&#9670;&nbsp;</a></span>getNetworkName()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char* EnigmaIOTGatewayClass::getNetworkName </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets EnigmaIOT network name. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns EnigmaIOT network name </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00349\">349</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aabb971124202457b2e8a3627217dd213\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aabb971124202457b2e8a3627217dd213\">&#9670;&nbsp;</a></span>getNodes()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a>* EnigmaIOTGatewayClass::getNodes </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets nodes data structure. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>All nodes data structure </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00600\">600</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a77da5264eb27ff8d378a8b279c8b97c0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a77da5264eb27ff8d378a8b279c8b97c0\">&#9670;&nbsp;</a></span>getPacketsHour()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">double EnigmaIOTGatewayClass::getPacketsHour </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>address</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets packet rate sent by node that has a specific address, in packets per hour. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> packet rate </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01482\">1482</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afb41f49d1291eebbd676d4915ee193d1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afb41f49d1291eebbd676d4915ee193d1\">&#9670;&nbsp;</a></span>getPER()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">double EnigmaIOTGatewayClass::getPER </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>address</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets packet error rate of node that has a specific address. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Packet error rate </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01460\">1460</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a446e327328ebbcbe9b20f38f1080b9e6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a446e327328ebbcbe9b20f38f1080b9e6\">&#9670;&nbsp;</a></span>getShouldSave()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::getShouldSave </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets flag that indicates if configuration should be saved. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if config data should be saved. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00055\">55</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6d0c9737f65f857080b7d11c34f4141e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6d0c9737f65f857080b7d11c34f4141e\">&#9670;&nbsp;</a></span>getStatus()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::getStatus </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac_addr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>status</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Functrion to debug send status. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac_addr</td><td>Address of message sender </td></tr>\n    <tr><td class=\"paramname\">status</td><td>Result status code </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00858\">858</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a8eed8023d964354b6a2533c9662037e4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8eed8023d964354b6a2533c9662037e4\">&#9670;&nbsp;</a></span>getTotalPackets()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint32_t EnigmaIOTGatewayClass::getTotalPackets </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>address</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets total packets sent by node that has a specific address. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> total sent packets </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01470\">1470</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a52bbd932eb2a7fac9a3dc1debbc62e5b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a52bbd932eb2a7fac9a3dc1debbc62e5b\">&#9670;&nbsp;</a></span>handle()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::handle </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>This method should be called periodically for instance inside <code><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop()</a></code> function. It is used for internal gateway maintenance tasks. </p>\n<p>digitalRead (rxled) &amp;&amp;</p>\n<p>digitalRead (txled) &amp;&amp;</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00867\">867</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ac241f6c48c82d297389d78ec338ddb33\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac241f6c48c82d297389d78ec338ddb33\">&#9670;&nbsp;</a></span>invalidateKey()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::invalidateKey </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Creates an <b>InvalidateKey</b> message and sned it. This trigger a new key agreement to start on related node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> to send Invalidate Key message to </td></tr>\n    <tr><td class=\"paramname\">reason</td><td>Reason that produced key invalidation in gwInvalidateReason_t format </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly sent </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01624\">1624</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aaa13dfa56be2d1ad062cc69f6deef331\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aaa13dfa56be2d1ad062cc69f6deef331\">&#9670;&nbsp;</a></span>loadFlashData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::loadFlashData </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads configuration from flash memory. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if data was read successfuly. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00611\">611</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2e19a23469e04f87744ffc930e51cf8e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2e19a23469e04f87744ffc930e51cf8e\">&#9670;&nbsp;</a></span>manageMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::manageMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Process every received message. </p>\n<p>It starts clasiffying message usint the first byte. After that it passes it to the corresponding method for decoding </p><dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address of message sender </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer that stores message bytes </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Length of message in number of bytes </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00935\">935</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5d854e8aa39bd51344951c5205c09381\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5d854e8aa39bd51344951c5205c09381\">&#9670;&nbsp;</a></span>nodeNameSetRespose()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::nodeNameSetRespose </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int8_t&#160;</td>\n          <td class=\"paramname\"><em>error</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send back set name response. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to data that corresponds to originating node </td></tr>\n    <tr><td class=\"paramname\">error</td><td>Result code of name set procedure (0: OK, -1: Already used, -2: Too long, -3: Empty name, -4: Message error) </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01106\">1106</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2611c30452fc9785b3958eddca02daf8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2611c30452fc9785b3958eddca02daf8\">&#9670;&nbsp;</a></span>onDataRx()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::onDataRx </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">onGwDataRx_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handler</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Defines a function callback that will be called on every downlink data message that is received from a node. </p>\n<p>Use example: </p><div class=\"fragment\"><div class=\"line\"><span class=\"comment\">// First define the callback function</span></div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, uint16_t lostMessages) {</div>\n<div class=\"line\">  <span class=\"comment\">// Do whatever you need with received data</span></div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">  <span class=\"comment\">// Now register function as data message handler</span></div>\n<div class=\"line\">  <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>);</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">  <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a>();</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handler</td><td>Pointer to the function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00449\">449</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5c8f994db7043a0e12f9c1d2149e63db\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5c8f994db7043a0e12f9c1d2149e63db\">&#9670;&nbsp;</a></span>onGatewayRestartRequested()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::onGatewayRestartRequested </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handler</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Defines a function callback that will process a gateway restart request. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handler</td><td>Pointer to the function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00565\">565</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5ddb096aa5a0ec2113307a1480992a83\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5ddb096aa5a0ec2113307a1480992a83\">&#9670;&nbsp;</a></span>onHADiscovery()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::onHADiscovery </td>\n          <td>(</td>\n          <td class=\"paramtype\">onHADiscovery_t&#160;</td>\n          <td class=\"paramname\"><em>handler</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Defines a function callback that will be called when a Home Assistant discovery message is received from a node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handler</td><td>Pointer to the function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00458\">458</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1726020bc65217b9ec4d01bb0216a526\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1726020bc65217b9ec4d01bb0216a526\">&#9670;&nbsp;</a></span>onNewNode()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::onNewNode </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">onNewNode_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handler</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Defines a function callback that will be called every time a node gets connected or reconnected. </p>\n<p>Use example: </p><div class=\"fragment\"><div class=\"line\"><span class=\"comment\">// First define the callback function</span></div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948\">newNodeConnected</a> (uint8_t* mac) {</div>\n<div class=\"line\">  <span class=\"comment\">// Do whatever you need new node address</span></div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">  <span class=\"comment\">// Now register function as new node condition handler</span></div>\n<div class=\"line\">  <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">onNewNode</a> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948\">newNodeConnected</a>);</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">  <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a>();</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handler</td><td>Pointer to the function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00528\">528</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a975c9b549e113deebe5581d5107d34b2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a975c9b549e113deebe5581d5107d34b2\">&#9670;&nbsp;</a></span>onNodeDisconnected()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::onNodeDisconnected </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">onNodeDisconnected_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handler</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Defines a function callback that will be called every time a node is disconnected. </p>\n<p>Use example: </p><div class=\"fragment\"><div class=\"line\"><span class=\"comment\">// First define the callback function</span></div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a> (uint8_t* mac, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason) {</div>\n<div class=\"line\">  <span class=\"comment\">// Do whatever you need node address and disconnection reason</span></div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">  <span class=\"comment\">// Now register function as new node condition handler</span></div>\n<div class=\"line\">  <a class=\"code\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a>.<a class=\"code\" href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">onNodeDisconnected</a> (<a class=\"code\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a>);</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">  <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a>();</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handler</td><td>Pointer to the function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00557\">557</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a74f3b21d578650defdb63b334102dc48\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a74f3b21d578650defdb63b334102dc48\">&#9670;&nbsp;</a></span>onWiFiManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::onWiFiManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Register callback to be called on wifi manager exit. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handle</td><td>Callback function pointer </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00378\">378</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a037f8a0b338363b5555f353df30120ca\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a037f8a0b338363b5555f353df30120ca\">&#9670;&nbsp;</a></span>onWiFiManagerStarted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::onWiFiManagerStarted </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Register callback to be called on wifi manager start. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handle</td><td>Callback function pointer </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00386\">386</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"abf7f0271c0938cf36f316bf3338aba4b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abf7f0271c0938cf36f316bf3338aba4b\">&#9670;&nbsp;</a></span>popInputMsgQueue()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::popInputMsgQueue </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Deletes next item in the queue. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00843\">843</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a17e46dd4d8b522e0ce91b729e9687350\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a17e46dd4d8b522e0ce91b729e9687350\">&#9670;&nbsp;</a></span>processClientHello()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::processClientHello </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t&#160;</td>\n          <td class=\"paramname\"><em>mac</em>[ENIGMAIOT_ADDR_LEN], </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets a buffer containing a <b>ClientHello</b> message and process it. This carries node public key to be used on Diffie Hellman algorithm. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address where this message was received from </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Pointer to the buffer that contains the message </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Message length in number of bytes of ClientHello message </td></tr>\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> entry that Client Hello message comes from </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01660\">1660</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0ea92c22b1d415d53d635391d9ef6b07\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0ea92c22b1d415d53d635391d9ef6b07\">&#9670;&nbsp;</a></span>processClockRequest()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::processClockRequest </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t&#160;</td>\n          <td class=\"paramname\"><em>mac</em>[ENIGMAIOT_ADDR_LEN], </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Starts clock sync procedure from node to gateway. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address where this message was received from </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Pointer to the buffer that contains the message </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Message length in number of bytes of ClockRequest message </td></tr>\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> entry that Client Hello message comes from </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01739\">1739</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a90c1c1bffe2884247a2e047d7d254767\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a90c1c1bffe2884247a2e047d7d254767\">&#9670;&nbsp;</a></span>processControlMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::processControlMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t&#160;</td>\n          <td class=\"paramname\"><em>mac</em>[ENIGMAIOT_ADDR_LEN], </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes control message from node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer that stores received message </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Length of received data </td></tr>\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> where data message comes from </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01250\">1250</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a44cd0a3ac1595ecd3156af130a2cb130\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a44cd0a3ac1595ecd3156af130a2cb130\">&#9670;&nbsp;</a></span>processDataMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::processDataMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t&#160;</td>\n          <td class=\"paramname\"><em>mac</em>[ENIGMAIOT_ADDR_LEN], </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>encrypted</em> = <code>true</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes data message from node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer that stores received message </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Length of received data </td></tr>\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> where data message comes from </td></tr>\n    <tr><td class=\"paramname\">encrypted</td><td><code>true</code> if received message is encrypted </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01377\">1377</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae9b4cf7f3cd2da454161b943ba285cd0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae9b4cf7f3cd2da454161b943ba285cd0\">&#9670;&nbsp;</a></span>processNodeNameSet()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::processNodeNameSet </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t&#160;</td>\n          <td class=\"paramname\"><em>mac</em>[ENIGMAIOT_ADDR_LEN], </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes new node name request fromn node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer that stores received message </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Length of received data </td></tr>\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> where data message comes from </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01175\">1175</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a78b4e66eaf1e4a1cdb4baead912fb1cc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a78b4e66eaf1e4a1cdb4baead912fb1cc\">&#9670;&nbsp;</a></span>processUnencryptedDataMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::processUnencryptedDataMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t&#160;</td>\n          <td class=\"paramname\"><em>mac</em>[ENIGMAIOT_ADDR_LEN], </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes unencrypted data message from node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer that stores received message </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Length of received data </td></tr>\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> where data message comes from </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01324\">1324</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad43bd94c6aebd18abd374da313d3b299\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad43bd94c6aebd18abd374da313d3b299\">&#9670;&nbsp;</a></span>rx_cb()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::rx_cb </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac_addr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function that will be called anytime this gateway receives a message. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac_addr</td><td>Address of message sender </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Buffer that stores message bytes </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of message in number of bytes </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00849\">849</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a179ab2224b2cb38ea355e8d770dc0d9a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a179ab2224b2cb38ea355e8d770dc0d9a\">&#9670;&nbsp;</a></span>saveFlashData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::saveFlashData </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves configuration to flash memory. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if data could be written successfuly. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00692\">692</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2fbf2cc61a51bdce3254f8478268f0c3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2fbf2cc61a51bdce3254f8478268f0c3\">&#9670;&nbsp;</a></span>sendBroadcastKey()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::sendBroadcastKey </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends broadcast key to node if it has requested it explicitly or it has notified during handshake. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Entry in node list database to get destination address </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message was successfully sent. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01903\">1903</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5d5ce4312735008866cf84559bc645c4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5d5ce4312735008866cf84559bc645c4\">&#9670;&nbsp;</a></span>sendDownstream()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::sendDownstream </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">control_message_type_t</a>&#160;</td>\n          <td class=\"paramname\"><em>controlData</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">gatewayPayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payload_type</em> = <code><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a></code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Starts a downstream data message transmission. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Payload buffer </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Payload length </td></tr>\n    <tr><td class=\"paramname\">controlData</td><td>Indicates if data is control data and its class </td></tr>\n    <tr><td class=\"paramname\">payload_type</td><td>Identifies data encoding of payload. It can be RAW, CAYENNELPP, MSGPACK </td></tr>\n    <tr><td class=\"paramname\">nodeName</td><td>Causes data to be sent to a node with this name instead of numeric address </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns true if everything went ok </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00364\">364</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae7c947e8bfc28c1b3731a5da874e24a7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae7c947e8bfc28c1b3731a5da874e24a7\">&#9670;&nbsp;</a></span>sendHADiscoveryJSON()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::sendHADiscoveryJSON </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>networkName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends a Home Assistant discovery message after receiving it from node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> physical address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>MsgPack input buffer </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Input buffer length </td></tr>\n    <tr><td class=\"paramname\">networkName</td><td>EnigmaIOT network name </td></tr>\n    <tr><td class=\"paramname\">nodeName</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name. Can be NULL </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if data could be written successfuly. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01989\">1989</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aec8a0e96ff309d34ef19a5eaa66c40e0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aec8a0e96ff309d34ef19a5eaa66c40e0\">&#9670;&nbsp;</a></span>serverHello()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::serverHello </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>key</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Build a <b>ServerHello</b> message and send it to node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">key</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> public key to be used on Diffie Hellman algorithm </td></tr>\n    <tr><td class=\"paramname\">node</td><td>Entry in node list database where node will be registered </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if ServerHello message was successfully sent. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l01910\">1910</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a514a694eb41c0cbb43e43c1621313187\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a514a694eb41c0cbb43e43c1621313187\">&#9670;&nbsp;</a></span>setRxLed()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::setRxLed </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>led</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">time_t&#160;</td>\n          <td class=\"paramname\"><em>onTime</em> = <code><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sets a LED to be flashed every time a message is received. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">led</td><td>LED I/O pin </td></tr>\n    <tr><td class=\"paramname\">onTime</td><td>Flash duration. 100ms by default. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00066\">66</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a330863b8dd757d66f990a14298f2faf0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a330863b8dd757d66f990a14298f2faf0\">&#9670;&nbsp;</a></span>setTxLed()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::setTxLed </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>led</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">time_t&#160;</td>\n          <td class=\"paramname\"><em>onTime</em> = <code><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sets a LED to be flashed every time a message is transmitted. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">led</td><td>LED I/O pin </td></tr>\n    <tr><td class=\"paramname\">onTime</td><td>Flash duration. 100ms by default. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00059\">59</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0ab81e6867a72fc7dac05f24fe7fa484\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0ab81e6867a72fc7dac05f24fe7fa484\">&#9670;&nbsp;</a></span>tx_cb()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTGatewayClass::tx_cb </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac_addr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>status</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function that will be called anytime this gateway sends a message to indicate status result of sending process. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac_addr</td><td>Address of message destination </td></tr>\n    <tr><td class=\"paramname\">status</td><td>Result of sending process </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html#l00854\">854</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Friends And Related Function Documentation</h2>\n<a id=\"a0b1bb7ec1dc2b4a244c77ffd04786a0c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0b1bb7ec1dc2b4a244c77ffd04786a0c\">&#9670;&nbsp;</a></span>GatewayAPI</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">friend class <a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">friend</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00155\">155</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"ab049e20310e2a18bd1f8adc4ec975254\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab049e20310e2a18bd1f8adc4ec975254\">&#9670;&nbsp;</a></span>comm</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a>* EnigmaIOTGatewayClass::comm</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Instance of physical communication layer. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00127\">127</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa057eae7440f60abe236ae5b121dbf7c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa057eae7440f60abe236ae5b121dbf7c\">&#9670;&nbsp;</a></span>dns</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">DNSServer* EnigmaIOTGatewayClass::dns</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>DNS server used by configuration portal. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00150\">150</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab639ce1297059231304d90d41ab65197\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab639ce1297059231304d90d41ab65197\">&#9670;&nbsp;</a></span>flashRx</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">volatile bool EnigmaIOTGatewayClass::flashRx = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><code>true</code> if Rx LED should flash </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00124\">124</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5eb353d426ea01a2aa183ae90855a3ae\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5eb353d426ea01a2aa183ae90855a3ae\">&#9670;&nbsp;</a></span>flashTx</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::flashTx = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><code>true</code> if Tx LED should flash </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00123\">123</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a77802389a0b41546f60ce114097bcadc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a77802389a0b41546f60ce114097bcadc\">&#9670;&nbsp;</a></span>gwConfig</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structgateway__config__t.html\">gateway_config_t</a> EnigmaIOTGatewayClass::gwConfig</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gateway specific configuration to be stored on flash memory. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00140\">140</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a492277b3df7f10f988c3d5cd087d1a40\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a492277b3df7f10f988c3d5cd087d1a40\">&#9670;&nbsp;</a></span>input_queue</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt;<a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>&gt;* EnigmaIOTGatewayClass::input_queue</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Input messages buffer. It acts as a FIFO queue. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00147\">147</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"adefe71141a5aa6f9c46712487b6feb31\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adefe71141a5aa6f9c46712487b6feb31\">&#9670;&nbsp;</a></span>myPublicKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t EnigmaIOTGatewayClass::myPublicKey[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Temporary public key store used during key agreement. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00122\">122</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a69e6d53334b842b054fc9e3cfdbb6067\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a69e6d53334b842b054fc9e3cfdbb6067\">&#9670;&nbsp;</a></span>node</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6\">node_t</a> EnigmaIOTGatewayClass::node</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>temporary store to keep node data while processing a message </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00125\">125</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1ef5d02770b1b3bf2acf0adf7b410a17\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1ef5d02770b1b3bf2acf0adf7b410a17\">&#9670;&nbsp;</a></span>nodelist</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a> EnigmaIOTGatewayClass::nodelist</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> database that keeps status and shared keys. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00126\">126</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab21597ced9ee31298c8a8eefed562ff9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab21597ced9ee31298c8a8eefed562ff9\">&#9670;&nbsp;</a></span>notifyData</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">onGwDataRx_t</a> EnigmaIOTGatewayClass::notifyData</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Callback function that will be invoked when data is received from a node. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00132\">132</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae0c52d330bfce048e9d8c4fb8cf1a967\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae0c52d330bfce048e9d8c4fb8cf1a967\">&#9670;&nbsp;</a></span>notifyHADiscovery</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">onHADiscovery_t EnigmaIOTGatewayClass::notifyHADiscovery</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Callback function that will be invoked when HomeAssistant discovery message is received from a node. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00134\">134</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a27ddc1b8decbcf821a0427faa3c1ced3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a27ddc1b8decbcf821a0427faa3c1ced3\">&#9670;&nbsp;</a></span>notifyNewNode</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">onNewNode_t</a> EnigmaIOTGatewayClass::notifyNewNode</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Callback function that will be invoked when a new node is connected. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00136\">136</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac311b64885137edaab70f3692e47f061\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac311b64885137edaab70f3692e47f061\">&#9670;&nbsp;</a></span>notifyNodeDisconnection</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">onNodeDisconnected_t</a> EnigmaIOTGatewayClass::notifyNodeDisconnection</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Callback function that will be invoked when a node gets disconnected. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00137\">137</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a9f121c9f733353f210aa9725375fae4b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9f121c9f733353f210aa9725375fae4b\">&#9670;&nbsp;</a></span>notifyRestartRequested</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> EnigmaIOTGatewayClass::notifyRestartRequested</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Callback function that will be invoked when a hardware restart is requested. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00138\">138</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a88c43de63b862f5a19a79e9d5558beba\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a88c43de63b862f5a19a79e9d5558beba\">&#9670;&nbsp;</a></span>notifyWiFiManagerExit</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a> EnigmaIOTGatewayClass::notifyWiFiManagerExit</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function called when configuration portal exits. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00152\">152</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad704dfd5a37c58ef1311501b573f1251\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad704dfd5a37c58ef1311501b573f1251\">&#9670;&nbsp;</a></span>notifyWiFiManagerStarted</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> EnigmaIOTGatewayClass::notifyWiFiManagerStarted</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function called when configuration portal is started. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00153\">153</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5e875dd3fa022dfba029f1e1124fcded\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5e875dd3fa022dfba029f1e1124fcded\">&#9670;&nbsp;</a></span>plainNetKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char EnigmaIOTGatewayClass::plainNetKey[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00141\">141</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a038ecd9541cb893eb58fb6aa49994816\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a038ecd9541cb893eb58fb6aa49994816\">&#9670;&nbsp;</a></span>rxled</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int8_t EnigmaIOTGatewayClass::rxled = -1</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>I/O pin to connect a led that flashes when gateway receives data. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00129\">129</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5e93664145eb75e55ae4c6d3482c8a64\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5e93664145eb75e55ae4c6d3482c8a64\">&#9670;&nbsp;</a></span>rxLedOnTime</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned long EnigmaIOTGatewayClass::rxLedOnTime</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Flash duration for Rx LED. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00131\">131</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6de87231a98aa132483ae97120b0f4d5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6de87231a98aa132483ae97120b0f4d5\">&#9670;&nbsp;</a></span>server</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWebServer* EnigmaIOTGatewayClass::server</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>WebServer that holds configuration portal. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00149\">149</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2dc1f081e8bf48d5c4e64db9caf94f74\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2dc1f081e8bf48d5c4e64db9caf94f74\">&#9670;&nbsp;</a></span>tempBuffer</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a> EnigmaIOTGatewayClass::tempBuffer</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Temporary storage for input message got from buffer. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00145\">145</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8d86390169309396f3d21149c3649453\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8d86390169309396f3d21149c3649453\">&#9670;&nbsp;</a></span>txled</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int8_t EnigmaIOTGatewayClass::txled = -1</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>I/O pin to connect a led that flashes when gateway transmits data. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00128\">128</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aacbd1597e7a6be2957ac4f3ade9dc243\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aacbd1597e7a6be2957ac4f3ade9dc243\">&#9670;&nbsp;</a></span>txLedOnTime</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned long EnigmaIOTGatewayClass::txLedOnTime</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Flash duration for Tx LED. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00130\">130</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a24cc18886d923df0320b6ac4eac19028\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a24cc18886d923df0320b6ac4eac19028\">&#9670;&nbsp;</a></span>useCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTGatewayClass::useCounter = true</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><code>true</code> if counter is used to check data messages order </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00139\">139</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad7f3f86214c6989f2019f1df89e9f0b6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad7f3f86214c6989f2019f1df89e9f0b6\">&#9670;&nbsp;</a></span>wifiManager</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWiFiManager* EnigmaIOTGatewayClass::wifiManager</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Wifi configuration portal. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00151\">151</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a></li>\n<li>src/<a class=\"el\" href=\"EnigmaIOTGateway_8cpp_source.html\">EnigmaIOTGateway.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a975c9b549e113deebe5581d5107d34b2\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">EnigmaIOTGatewayClass::onNodeDisconnected</a></div><div class=\"ttdeci\">void onNodeDisconnected(onNodeDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called every time a node is disconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00557\">EnigmaIOTGateway.h:557</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_ade106fbc95d08320451d9b901aafd230\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230\">nodeDisconnected</a></div><div class=\"ttdeci\">void nodeDisconnected(uint8_t *mac, gwInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00224\">EnigmaIOTGatewayDummy.cpp:224</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00157\">EnigmaIOT-Button-Controller.cpp:157</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTGatewayClass_html_a1726020bc65217b9ec4d01bb0216a526\"><div class=\"ttname\"><a href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">EnigmaIOTGatewayClass::onNewNode</a></div><div class=\"ttdeci\">void onNewNode(onNewNode_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called every time a node gets connected or reconnected.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00528\">EnigmaIOTGateway.h:528</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00101\">EnigmaIOT-Button-Controller.cpp:101</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8cpp_html_abcd4985de3ef6fbe1994af85093ca034\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway</a></div><div class=\"ttdeci\">EnigmaIOTGatewayClass EnigmaIOTGateway</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8cpp_source.html#l02050\">EnigmaIOTGateway.cpp:2050</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGatewayDummy_8cpp_html_a60e672b8465063bff29ed39899e15948\"><div class=\"ttname\"><a href=\"EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948\">newNodeConnected</a></div><div class=\"ttdeci\">void newNodeConnected(uint8_t *mac, uint16_t node_id, char *nodeName=NULL)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html#l00205\">EnigmaIOTGatewayDummy.cpp:205</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00083\">EnigmaIOT-Button-Controller.cpp:83</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a4272866ccf327ab11a97c334d16cf977\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a></div><div class=\"ttdeci\">gwInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00075\">EnigmaIOTGateway.h:75</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classEnigmaIOTNodeClass-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTNodeClass Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">addWiFiManagerParameter</a>(AsyncWiFiManagerParameter *p)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a>(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a742b9e627fee356913b069c64499cd5f\">broadcastIsEnabled</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">checkCRC</a>(const uint8_t *buf, size_t count, uint32_t *crc)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">checkResetButton</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">clearFlash</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">clearRTC</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\">clientHello</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">clock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\">clockRequest</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">clockSyncEnabled</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">configCleared</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">configWiFiManager</a>(rtcmem_data_t *data)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">cycleStartedTime</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">dataMessage</a>(const uint8_t *data, size_t len, dataMessageType_t dataMsgType=DATA_TYPE, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">dataMessageEncrypt</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">dataMessageSendEncoding</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">dataMessageSendPending</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">dataMessageSent</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">dataMessageSentLength</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">enableBroadcast</a>(bool broadcast=true)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a>(bool clockSync=true)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">flashBlue</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">gatewaySearchStarted</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">getNode</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3398ebecf52e1d7b5493d34ed011c38f\">getOTArunning</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93\">getRSSI</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">getSleepTime</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\">getStatus</a>(uint8_t *mac_addr, uint8_t status)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">hasClockSync</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">identifyStart</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">indentifying</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">invalidateReason</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf\">isRegistered</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">lastBroadcastMsgCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">lastOTAmsg</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">ledOnTime</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">loadFlashData</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">loadRTCData</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\">manageMessage</a>(const uint8_t *mac, const uint8_t *buf, uint8_t count)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">notifyConnection</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">notifyData</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">notifyDisconnection</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">notifyWiFiManagerExit</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">notifyWiFiManagerStarted</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a>(onConnected_t handler)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a>(onNodeDataRx_t handler)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a>(onDisconnected_t handler)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">onWiFiManagerExit</a>(onWiFiManagerExit_t handle)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">onWiFiManagerStarted</a>(simpleEventHandler_t handle)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">otaError</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">processBroadcastKeyMessage</a>(const uint8_t *mac, const uint8_t *buf, size_t count)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\">processClockResponse</a>(const uint8_t *mac, const uint8_t *buf, size_t count)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\">processControlCommand</a>(const uint8_t *mac, const uint8_t *data, size_t len, bool broadcast)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">processDownstreamData</a>(const uint8_t *mac, const uint8_t *buf, size_t count, bool control=false)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\">processGetNameCommand</a>(const uint8_t *mac, const uint8_t *data, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\">processGetRSSICommand</a>(const uint8_t *mac, const uint8_t *data, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\">processGetSleepTimeCommand</a>(const uint8_t *mac, const uint8_t *buf, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\">processInvalidateKey</a>(const uint8_t *mac, const uint8_t *buf, size_t count)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\">processOTACommand</a>(const uint8_t *mac, const uint8_t *data, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\">processServerHello</a>(const uint8_t *mac, const uint8_t *buf, size_t count)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\">processSetIdentifyCommand</a>(const uint8_t *mac, const uint8_t *buf, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\">processSetNameCommand</a>(const uint8_t *mac, const uint8_t *data, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\">processSetNameResponse</a>(const uint8_t *mac, const uint8_t *data, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\">processSetResetConfigCommand</a>(const uint8_t *mac, const uint8_t *buf, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\">processSetRestartCommand</a>(const uint8_t *mac, const uint8_t *buf, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\">processSetSleepTimeCommand</a>(const uint8_t *mac, const uint8_t *buf, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\">processVersionCommand</a>(const uint8_t *mac, const uint8_t *buf, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">protectOTA</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">reportRSSI</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">requestReportRSSI</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">requestSearchGateway</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325\">resetConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">resetPin</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">restart</a>(restartReason_t reason, bool reboot=true)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">restartReason</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\">rx_cb</a>(uint8_t *mac_addr, uint8_t *data, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">saveFlashData</a>(bool fsOpen=false)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">searchForGateway</a>(rtcmem_data_t *data, bool shouldStoreData=false)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a>(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a15f69c66601b59bfc4bae47cf6075e55\">sendData</a>(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">sendHADiscoveryMessage</a>(const uint8_t *data, size_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">sendNodeNameSet</a>(const char *name)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">sendRestart</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2e6973be4195ba354607c631c587297e\">sendUnencryptedData</a>(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a>(uint8_t led, time_t onTime=FLASH_LED_TIME)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a>(uint8_t address[ENIGMAIOT_ADDR_LEN])</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a>(int pin)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">setSleepTime</a>(uint32_t sleepTime, bool forceSleepForever=false)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">shouldRestart</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">sleepRequested</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">startIdentifying</a>(time_t period)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22\">stop</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">stopIdentifying</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">timeSyncPeriod</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\">tx_cb</a>(uint8_t *mac_addr, uint8_t status)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\">unencryptedDataMessage</a>(const uint8_t *data, size_t len, dataMessageType_t dataMsgType=DATA_TYPE, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">unixtime</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classEnigmaIOTNodeClass.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOTNodeClass Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-static-methods\">Static Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classEnigmaIOTNodeClass-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTNodeClass Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Main node class. Manages communication with gateway and allows sending and receiving user data.  \n <a href=\"classEnigmaIOTNodeClass.html#details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:abff1de59af5ff0f9fd2e89b996f31f06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (<a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a> *<a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a>, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a>=true, bool sleepy=true)</td></tr>\n<tr class=\"memdesc:abff1de59af5ff0f9fd2e89b996f31f06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initalizes communication basic data and starts node registration.  <a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">More...</a><br /></td></tr>\n<tr class=\"separator:abff1de59af5ff0f9fd2e89b996f31f06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae1729724a332e907bddbe7b27c2f3c22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22\">stop</a> ()</td></tr>\n<tr class=\"memdesc:ae1729724a332e907bddbe7b27c2f3c22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Stops EnigmaIoT protocol.  <a href=\"classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22\">More...</a><br /></td></tr>\n<tr class=\"separator:ae1729724a332e907bddbe7b27c2f3c22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d5403fd3a4bcaea590b3aa919c141dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">restart</a> (<a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a> reason, bool reboot=true)</td></tr>\n<tr class=\"memdesc:a7d5403fd3a4bcaea590b3aa919c141dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets connection as unregistered to force a resyncrhonisation after boot.  <a href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">More...</a><br /></td></tr>\n<tr class=\"separator:a7d5403fd3a4bcaea590b3aa919c141dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6432011ed34012e55d393bfd0c99219e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">setSleepTime</a> (uint32_t <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a>, bool forceSleepForever=false)</td></tr>\n<tr class=\"memdesc:a6432011ed34012e55d393bfd0c99219e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows to configure a new sleep time period from user code.  <a href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">More...</a><br /></td></tr>\n<tr class=\"separator:a6432011ed34012e55d393bfd0c99219e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a13509c40faa91f1ea6fa1bb9fa0097c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (uint8_t address[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>])</td></tr>\n<tr class=\"memdesc:a13509c40faa91f1ea6fa1bb9fa0097c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set node address to be used in EnigmaIOT communication.  <a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">More...</a><br /></td></tr>\n<tr class=\"separator:a13509c40faa91f1ea6fa1bb9fa0097c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0144b183ee216aa5b977086ae1753d3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">getSleepTime</a> ()</td></tr>\n<tr class=\"memdesc:a0144b183ee216aa5b977086ae1753d3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns sleep period in seconds.  <a href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">More...</a><br /></td></tr>\n<tr class=\"separator:a0144b183ee216aa5b977086ae1753d3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a742b9e627fee356913b069c64499cd5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a742b9e627fee356913b069c64499cd5f\">broadcastIsEnabled</a> ()</td></tr>\n<tr class=\"memdesc:a742b9e627fee356913b069c64499cd5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted broadcast messages. If this is enabled this will be notified to gateway so that it sends broadcast key. Notice this mode is optional and does not disable the ability to send normal messages.  <a href=\"classEnigmaIOTNodeClass.html#a742b9e627fee356913b069c64499cd5f\">More...</a><br /></td></tr>\n<tr class=\"separator:a742b9e627fee356913b069c64499cd5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aafdd17efe90bfc2dd9af758633034f82\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">enableBroadcast</a> (bool broadcast=true)</td></tr>\n<tr class=\"memdesc:aafdd17efe90bfc2dd9af758633034f82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enables node broadcast mode. <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> will request broadcast key to Gateway. When it is received node will be able to send and receive encrypted broadcast messages.  <a href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">More...</a><br /></td></tr>\n<tr class=\"separator:aafdd17efe90bfc2dd9af758633034f82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a53bbbb07409315ada40ad53d00344252\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> ()</td></tr>\n<tr class=\"memdesc:a53bbbb07409315ada40ad53d00344252\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This method should be called periodically for instance inside <code><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop()</a></code> function. It is used for internal node maintenance tasks.  <a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">More...</a><br /></td></tr>\n<tr class=\"separator:a53bbbb07409315ada40ad53d00344252\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe087ce005069779bf699e39695397f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a> (bool clockSync=true)</td></tr>\n<tr class=\"memdesc:afe087ce005069779bf699e39695397f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Controls clock synchronization function.  <a href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">More...</a><br /></td></tr>\n<tr class=\"separator:afe087ce005069779bf699e39695397f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a187f3eb82f9948d5b53bd7eb480f1dd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a> (uint8_t <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a>, time_t onTime=<a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a>)</td></tr>\n<tr class=\"memdesc:a187f3eb82f9948d5b53bd7eb480f1dd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets a LED to be flashed every time a message is transmitted.  <a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">More...</a><br /></td></tr>\n<tr class=\"separator:a187f3eb82f9948d5b53bd7eb480f1dd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a50b37ec711dc25df93a1aba827d59263\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (int pin)</td></tr>\n<tr class=\"memdesc:a50b37ec711dc25df93a1aba827d59263\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets a pin to be used to reset configuration it it is connected to ground during startup.  <a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">More...</a><br /></td></tr>\n<tr class=\"separator:a50b37ec711dc25df93a1aba827d59263\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15f69c66601b59bfc4bae47cf6075e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a15f69c66601b59bfc4bae47cf6075e55\">sendData</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding=<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>)</td></tr>\n<tr class=\"memdesc:a15f69c66601b59bfc4bae47cf6075e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts a data message transmission.  <a href=\"classEnigmaIOTNodeClass.html#a15f69c66601b59bfc4bae47cf6075e55\">More...</a><br /></td></tr>\n<tr class=\"separator:a15f69c66601b59bfc4bae47cf6075e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a436eb0a595405e52dc3a937c5968447f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">sendHADiscoveryMessage</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len)</td></tr>\n<tr class=\"memdesc:a436eb0a595405e52dc3a937c5968447f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds, encrypts and sends a <b>HomeAssistant discovery</b> message.  <a href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">More...</a><br /></td></tr>\n<tr class=\"separator:a436eb0a595405e52dc3a937c5968447f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e6973be4195ba354607c631c587297e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2e6973be4195ba354607c631c587297e\">sendUnencryptedData</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding=<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>)</td></tr>\n<tr class=\"memdesc:a2e6973be4195ba354607c631c587297e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts a data message transmission.  <a href=\"classEnigmaIOTNodeClass.html#a2e6973be4195ba354607c631c587297e\">More...</a><br /></td></tr>\n<tr class=\"separator:a2e6973be4195ba354607c631c587297e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2c8523627fb660441dbdcbc8a796c3b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">onNodeDataRx_t</a> handler)</td></tr>\n<tr class=\"memdesc:a2c8523627fb660441dbdcbc8a796c3b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a function callback that will be called on every downlink data message that is received from gateway.  <a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">More...</a><br /></td></tr>\n<tr class=\"separator:a2c8523627fb660441dbdcbc8a796c3b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acce855b22bb1045a9cf4af9c4130500f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">onConnected_t</a> handler)</td></tr>\n<tr class=\"memdesc:acce855b22bb1045a9cf4af9c4130500f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a function callback that will be called everytime node is registered on gateway.  <a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">More...</a><br /></td></tr>\n<tr class=\"separator:acce855b22bb1045a9cf4af9c4130500f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a636b6779d3c5a41e52fd6bb4b0ef31c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">onDisconnected_t</a> handler)</td></tr>\n<tr class=\"memdesc:a636b6779d3c5a41e52fd6bb4b0ef31c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a function callback that will be called everytime node is disconnected from gateway.  <a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">More...</a><br /></td></tr>\n<tr class=\"separator:a636b6779d3c5a41e52fd6bb4b0ef31c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a43809462401bef0a7697175450f025ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">onWiFiManagerExit</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a> <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a>)</td></tr>\n<tr class=\"memdesc:a43809462401bef0a7697175450f025ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Register callback to be called on wifi manager exit.  <a href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">More...</a><br /></td></tr>\n<tr class=\"separator:a43809462401bef0a7697175450f025ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92cabfdedc76da41398b548ff7e6e799\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">onWiFiManagerStarted</a> (<a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a>)</td></tr>\n<tr class=\"memdesc:a92cabfdedc76da41398b548ff7e6e799\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Register callback to be called on wifi manager start.  <a href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">More...</a><br /></td></tr>\n<tr class=\"separator:a92cabfdedc76da41398b548ff7e6e799\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d168a19f1c868e2cdcd7f11f70e0742\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">addWiFiManagerParameter</a> (AsyncWiFiManagerParameter *p)</td></tr>\n<tr class=\"memdesc:a8d168a19f1c868e2cdcd7f11f70e0742\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Adds a parameter to configuration portal.  <a href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">More...</a><br /></td></tr>\n<tr class=\"separator:a8d168a19f1c868e2cdcd7f11f70e0742\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81ab5be7b67c28948ea5de40e5d3c360\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a> ()</td></tr>\n<tr class=\"memdesc:a81ab5be7b67c28948ea5de40e5d3c360\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Requests transition to sleep mode (low energy state)  <a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">More...</a><br /></td></tr>\n<tr class=\"separator:a81ab5be7b67c28948ea5de40e5d3c360\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6830ae2f6b8dafa588f5baa1fe4e8a99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int64_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">clock</a> ()</td></tr>\n<tr class=\"memdesc:a6830ae2f6b8dafa588f5baa1fe4e8a99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets current clock counter. millis() + offset.  <a href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">More...</a><br /></td></tr>\n<tr class=\"separator:a6830ae2f6b8dafa588f5baa1fe4e8a99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab35d557fff42f0a565ee2cae63d86140\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">unixtime</a> ()</td></tr>\n<tr class=\"memdesc:ab35d557fff42f0a565ee2cae63d86140\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets current time in seconds from 1970, if time is synchronized.  <a href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">More...</a><br /></td></tr>\n<tr class=\"separator:ab35d557fff42f0a565ee2cae63d86140\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1c015860a4a1650d3e2653212d13179e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">hasClockSync</a> ()</td></tr>\n<tr class=\"memdesc:a1c015860a4a1650d3e2653212d13179e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if internal clock is synchronized to gateway.  <a href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">More...</a><br /></td></tr>\n<tr class=\"separator:a1c015860a4a1650d3e2653212d13179e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a43abab3a73d46ff99f33c8596512dcaf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf\">isRegistered</a> ()</td></tr>\n<tr class=\"memdesc:a43abab3a73d46ff99f33c8596512dcaf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if node is registered.  <a href=\"classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf\">More...</a><br /></td></tr>\n<tr class=\"separator:a43abab3a73d46ff99f33c8596512dcaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae6176d81e34ccc835f6886c23ba47d93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93\">getRSSI</a> ()</td></tr>\n<tr class=\"memdesc:ae6176d81e34ccc835f6886c23ba47d93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets latest RSSI measurement. It is updated during start up or in case of transmission errors.  <a href=\"classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93\">More...</a><br /></td></tr>\n<tr class=\"separator:ae6176d81e34ccc835f6886c23ba47d93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a256f6a64dac541f374d00349d3a3e325\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325\">resetConfig</a> ()</td></tr>\n<tr class=\"memdesc:a256f6a64dac541f374d00349d3a3e325\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deletes configuration file stored on flash. It makes neccessary to configure it again using WiFi Portal.  <a href=\"classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325\">More...</a><br /></td></tr>\n<tr class=\"separator:a256f6a64dac541f374d00349d3a3e325\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3398ebecf52e1d7b5493d34ed011c38f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3398ebecf52e1d7b5493d34ed011c38f\">getOTArunning</a> ()</td></tr>\n<tr class=\"memdesc:a3398ebecf52e1d7b5493d34ed011c38f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if OTA is running.  <a href=\"classEnigmaIOTNodeClass.html#a3398ebecf52e1d7b5493d34ed011c38f\">More...</a><br /></td></tr>\n<tr class=\"separator:a3398ebecf52e1d7b5493d34ed011c38f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6aaa73dd705c9bdaa7c2b1fe70cb91ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">getNode</a> ()</td></tr>\n<tr class=\"memdesc:a6aaa73dd705c9bdaa7c2b1fe70cb91ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance.  <a href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">More...</a><br /></td></tr>\n<tr class=\"separator:a6aaa73dd705c9bdaa7c2b1fe70cb91ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a461dd5c9def2768c3c4b87cfc9be6ef8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">checkCRC</a> (const uint8_t *buf, size_t count, uint32_t *crc)</td></tr>\n<tr class=\"memdesc:a461dd5c9def2768c3c4b87cfc9be6ef8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check that a given CRC matches to calulated value from a buffer.  <a href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">More...</a><br /></td></tr>\n<tr class=\"separator:a461dd5c9def2768c3c4b87cfc9be6ef8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1701a6f85406e5deef210c74d509a471\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">startIdentifying</a> (time_t period)</td></tr>\n<tr class=\"memdesc:a1701a6f85406e5deef210c74d509a471\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts node identification by flashing led.  <a href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">More...</a><br /></td></tr>\n<tr class=\"separator:a1701a6f85406e5deef210c74d509a471\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a659fca03ecdfd18e19be1b39b4e703b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">stopIdentifying</a> ()</td></tr>\n<tr class=\"memdesc:a659fca03ecdfd18e19be1b39b4e703b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Stops node identification.  <a href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">More...</a><br /></td></tr>\n<tr class=\"separator:a659fca03ecdfd18e19be1b39b4e703b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af1408c0ed378a9b46e62d98f88545893\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">loadRTCData</a> ()</td></tr>\n<tr class=\"memdesc:af1408c0ed378a9b46e62d98f88545893\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads configuration from RTC data. Uses a CRC to check data integrity.  <a href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">More...</a><br /></td></tr>\n<tr class=\"separator:af1408c0ed378a9b46e62d98f88545893\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8574c3435e748fbca1b99eeec4c770c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">loadFlashData</a> ()</td></tr>\n<tr class=\"memdesc:a8574c3435e748fbca1b99eeec4c770c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads configuration from flash memory.  <a href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">More...</a><br /></td></tr>\n<tr class=\"separator:a8574c3435e748fbca1b99eeec4c770c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a77b2c62dbadc2b7546d74d8ebf931cc2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">saveFlashData</a> (bool fsOpen=false)</td></tr>\n<tr class=\"memdesc:a77b2c62dbadc2b7546d74d8ebf931cc2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves configuration to flash memory.  <a href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">More...</a><br /></td></tr>\n<tr class=\"separator:a77b2c62dbadc2b7546d74d8ebf931cc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41984c7560df0af008fc526ee38b0b42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">configWiFiManager</a> (<a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>)</td></tr>\n<tr class=\"memdesc:a41984c7560df0af008fc526ee38b0b42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts configuration AP and web server and gets settings from it.  <a href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">More...</a><br /></td></tr>\n<tr class=\"separator:a41984c7560df0af008fc526ee38b0b42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a55aa8affe03e929129ee30ac33c954c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">sendRestart</a> ()</td></tr>\n<tr class=\"memdesc:a55aa8affe03e929129ee30ac33c954c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends a restart notification control message.  <a href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">More...</a><br /></td></tr>\n<tr class=\"separator:a55aa8affe03e929129ee30ac33c954c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ddc7fce5233d3959cfb52dd3c7f605c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\">clientHello</a> ()</td></tr>\n<tr class=\"memdesc:a1ddc7fce5233d3959cfb52dd3c7f605c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a <b>ClientHello</b> messange and send it to gateway.  <a href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\">More...</a><br /></td></tr>\n<tr class=\"separator:a1ddc7fce5233d3959cfb52dd3c7f605c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1d62eaa08920568f019ef240dd98dc3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\">clockRequest</a> ()</td></tr>\n<tr class=\"memdesc:a1d62eaa08920568f019ef240dd98dc3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a <b>ClockRequest</b> messange and send it to gateway.  <a href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\">More...</a><br /></td></tr>\n<tr class=\"separator:a1d62eaa08920568f019ef240dd98dc3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad35575e4aa02a2ef38baa14a2dea0f67\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\">processClockResponse</a> (const uint8_t *mac, const uint8_t *buf, size_t count)</td></tr>\n<tr class=\"memdesc:ad35575e4aa02a2ef38baa14a2dea0f67\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets a buffer containing a <b>ClockResponse</b> message and process it. It uses that message to calculate clock difference against gateway and synchronize to it.  <a href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\">More...</a><br /></td></tr>\n<tr class=\"separator:ad35575e4aa02a2ef38baa14a2dea0f67\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a777ffbcfe25563aae4ddbb77bdca4fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\">processServerHello</a> (const uint8_t *mac, const uint8_t *buf, size_t count)</td></tr>\n<tr class=\"memdesc:a777ffbcfe25563aae4ddbb77bdca4fc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets a buffer containing a <b>ServerHello</b> message and process it. It uses that message to calculate a shared key using Diffie Hellman algorithm.  <a href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\">More...</a><br /></td></tr>\n<tr class=\"separator:a777ffbcfe25563aae4ddbb77bdca4fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a22c565018d72ac1df23a765a713fd768\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\">processInvalidateKey</a> (const uint8_t *mac, const uint8_t *buf, size_t count)</td></tr>\n<tr class=\"memdesc:a22c565018d72ac1df23a765a713fd768\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets a buffer containing an <b>InvalidateKey</b> message and process it. This trigger a new key agreement to start.  <a href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\">More...</a><br /></td></tr>\n<tr class=\"separator:a22c565018d72ac1df23a765a713fd768\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a95a7b8677828b1fe4c6e45a13deeb83b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">processBroadcastKeyMessage</a> (const uint8_t *mac, const uint8_t *buf, size_t count)</td></tr>\n<tr class=\"memdesc:a95a7b8677828b1fe4c6e45a13deeb83b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets a buffer containing a <b>BroadcastKey</b> message and process it. This key is used to send and receive broadcast messages.  <a href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">More...</a><br /></td></tr>\n<tr class=\"separator:a95a7b8677828b1fe4c6e45a13deeb83b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a09782f9f3ca09d7fd79b8b70e130a206\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">dataMessage</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType=<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>, bool encrypt=true, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding=<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>)</td></tr>\n<tr class=\"memdesc:a09782f9f3ca09d7fd79b8b70e130a206\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds, encrypts and sends a <b>Data</b> message.  <a href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">More...</a><br /></td></tr>\n<tr class=\"separator:a09782f9f3ca09d7fd79b8b70e130a206\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac6f82e2e104008daffa7b6f17abbcfdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\">unencryptedDataMessage</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType=<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a>, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding=<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>)</td></tr>\n<tr class=\"memdesc:ac6f82e2e104008daffa7b6f17abbcfdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds and sends a <b>Data</b> message without encryption. Not recommended, use it only if you absolutely need more performance.  <a href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\">More...</a><br /></td></tr>\n<tr class=\"separator:ac6f82e2e104008daffa7b6f17abbcfdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa632927a0a9da18d3605e29aa3a055f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\">processOTACommand</a> (const uint8_t *mac, const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len)</td></tr>\n<tr class=\"memdesc:aa632927a0a9da18d3605e29aa3a055f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a single OTA update command or data.  <a href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\">More...</a><br /></td></tr>\n<tr class=\"separator:aa632927a0a9da18d3605e29aa3a055f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59f5ef49f540e586fb43dc984c0ed696\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\">processControlCommand</a> (const uint8_t *mac, const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, bool broadcast)</td></tr>\n<tr class=\"memdesc:a59f5ef49f540e586fb43dc984c0ed696\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a control command. Does not propagate to user code.  <a href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\">More...</a><br /></td></tr>\n<tr class=\"separator:a59f5ef49f540e586fb43dc984c0ed696\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aab18d9b24e08c00bcbac6bd5f1792d63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">processDownstreamData</a> (const uint8_t *mac, const uint8_t *buf, size_t count, bool control=false)</td></tr>\n<tr class=\"memdesc:aab18d9b24e08c00bcbac6bd5f1792d63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes downstream data from gateway.  <a href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">More...</a><br /></td></tr>\n<tr class=\"separator:aab18d9b24e08c00bcbac6bd5f1792d63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a846d3d0dd41fcaa8944e7cbe804bef93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\">manageMessage</a> (const uint8_t *mac, const uint8_t *buf, uint8_t count)</td></tr>\n<tr class=\"memdesc:a846d3d0dd41fcaa8944e7cbe804bef93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Process every received message.  <a href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\">More...</a><br /></td></tr>\n<tr class=\"separator:a846d3d0dd41fcaa8944e7cbe804bef93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a726847ca0ed458b01c23e78672aa4059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\">getStatus</a> (uint8_t *mac_addr, uint8_t <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a726847ca0ed458b01c23e78672aa4059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Functrion to debug send status.  <a href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\">More...</a><br /></td></tr>\n<tr class=\"separator:a726847ca0ed458b01c23e78672aa4059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5b8a2368449f3fd7a1986fb80d9e4274\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\">processGetSleepTimeCommand</a> (const uint8_t *mac, const uint8_t *buf, uint8_t len)</td></tr>\n<tr class=\"memdesc:a5b8a2368449f3fd7a1986fb80d9e4274\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a request of sleep time configuration.  <a href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\">More...</a><br /></td></tr>\n<tr class=\"separator:a5b8a2368449f3fd7a1986fb80d9e4274\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab348fec65af29c28ebc8c1a342e3b241\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\">processSetSleepTimeCommand</a> (const uint8_t *mac, const uint8_t *buf, uint8_t len)</td></tr>\n<tr class=\"memdesc:ab348fec65af29c28ebc8c1a342e3b241\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a request to set new sleep time configuration.  <a href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\">More...</a><br /></td></tr>\n<tr class=\"separator:ab348fec65af29c28ebc8c1a342e3b241\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a04a1d59adae7dc0786ac6e066c5d1263\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\">processSetIdentifyCommand</a> (const uint8_t *mac, const uint8_t *buf, uint8_t len)</td></tr>\n<tr class=\"memdesc:a04a1d59adae7dc0786ac6e066c5d1263\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a request to start indicate to identify a node visually.  <a href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\">More...</a><br /></td></tr>\n<tr class=\"separator:a04a1d59adae7dc0786ac6e066c5d1263\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3c807080f0701745c68182181677a98d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\">processSetResetConfigCommand</a> (const uint8_t *mac, const uint8_t *buf, uint8_t len)</td></tr>\n<tr class=\"memdesc:a3c807080f0701745c68182181677a98d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a request to reset node configuration.  <a href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\">More...</a><br /></td></tr>\n<tr class=\"separator:a3c807080f0701745c68182181677a98d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9233d49a0d125e9c7054c6e70f377d56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\">processSetRestartCommand</a> (const uint8_t *mac, const uint8_t *buf, uint8_t len)</td></tr>\n<tr class=\"memdesc:a9233d49a0d125e9c7054c6e70f377d56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a request to restar node mcu.  <a href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\">More...</a><br /></td></tr>\n<tr class=\"separator:a9233d49a0d125e9c7054c6e70f377d56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac2c135a9d3623b28dda13acdbd4d5615\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\">processVersionCommand</a> (const uint8_t *mac, const uint8_t *buf, uint8_t len)</td></tr>\n<tr class=\"memdesc:ac2c135a9d3623b28dda13acdbd4d5615\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a request firmware version.  <a href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\">More...</a><br /></td></tr>\n<tr class=\"separator:ac2c135a9d3623b28dda13acdbd4d5615\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af83a2fb76f23a90f98f42bdb6856213b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t len, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a> dataMsgType, bool encrypt=true, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding=<a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>)</td></tr>\n<tr class=\"memdesc:af83a2fb76f23a90f98f42bdb6856213b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initiades data transmission distinguissing if it is payload or control data.  <a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">More...</a><br /></td></tr>\n<tr class=\"separator:af83a2fb76f23a90f98f42bdb6856213b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad7a98adabe272649c3c65efd1c2cfe45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">searchForGateway</a> (<a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, bool shouldStoreData=false)</td></tr>\n<tr class=\"memdesc:ad7a98adabe272649c3c65efd1c2cfe45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts searching for a gateway that it using configured Network Name as WiFi AP. Stores this info for subsequent use.  <a href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">More...</a><br /></td></tr>\n<tr class=\"separator:ad7a98adabe272649c3c65efd1c2cfe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa97e9b5f9e73702c545a5e7b4c2c15f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">clearRTC</a> ()</td></tr>\n<tr class=\"memdesc:afa97e9b5f9e73702c545a5e7b4c2c15f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clears configuration stored in RTC memory to recover factory state.  <a href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">More...</a><br /></td></tr>\n<tr class=\"separator:afa97e9b5f9e73702c545a5e7b4c2c15f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a531eee8dc001da6f1f1393c1cc632b09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">clearFlash</a> ()</td></tr>\n<tr class=\"memdesc:a531eee8dc001da6f1f1393c1cc632b09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clears configuration stored in flash to recover factory state.  <a href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">More...</a><br /></td></tr>\n<tr class=\"separator:a531eee8dc001da6f1f1393c1cc632b09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae1bb8b93c739fced2c695e47a5242f9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">saveRTCData</a> ()</td></tr>\n<tr class=\"memdesc:ae1bb8b93c739fced2c695e47a5242f9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Save configuration to RTC to store current status and recover it after deep sleep.  <a href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">More...</a><br /></td></tr>\n<tr class=\"separator:ae1bb8b93c739fced2c695e47a5242f9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2cf188fbd1d22775605eea93ed561a53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">checkResetButton</a> ()</td></tr>\n<tr class=\"memdesc:a2cf188fbd1d22775605eea93ed561a53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks reset button status during startup.  <a href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">More...</a><br /></td></tr>\n<tr class=\"separator:a2cf188fbd1d22775605eea93ed561a53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab95b384ed3f016217d9669c7982e8c08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">reportRSSI</a> ()</td></tr>\n<tr class=\"memdesc:ab95b384ed3f016217d9669c7982e8c08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends RSSI value and channel to Gateway.  <a href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">More...</a><br /></td></tr>\n<tr class=\"separator:ab95b384ed3f016217d9669c7982e8c08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0d4446a73e230333f972b233fa2dffdd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\">processGetRSSICommand</a> (const uint8_t *mac, const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len)</td></tr>\n<tr class=\"memdesc:a0d4446a73e230333f972b233fa2dffdd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a request to measure RSSI.  <a href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\">More...</a><br /></td></tr>\n<tr class=\"separator:a0d4446a73e230333f972b233fa2dffdd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a32a98693bfc71a16f8f3c6db7053221c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\">processGetNameCommand</a> (const uint8_t *mac, const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len)</td></tr>\n<tr class=\"memdesc:a32a98693bfc71a16f8f3c6db7053221c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a request to get <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name and address.  <a href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\">More...</a><br /></td></tr>\n<tr class=\"separator:a32a98693bfc71a16f8f3c6db7053221c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acd0424de61195d76ff09a7462d539d7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\">processSetNameResponse</a> (const uint8_t *mac, const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len)</td></tr>\n<tr class=\"memdesc:acd0424de61195d76ff09a7462d539d7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a response to set <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name.  <a href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\">More...</a><br /></td></tr>\n<tr class=\"separator:acd0424de61195d76ff09a7462d539d7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a27731975d4dc4feeafb7ac42ab5a4035\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\">processSetNameCommand</a> (const uint8_t *mac, const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len)</td></tr>\n<tr class=\"memdesc:a27731975d4dc4feeafb7ac42ab5a4035\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes a request to set <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name.  <a href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\">More...</a><br /></td></tr>\n<tr class=\"separator:a27731975d4dc4feeafb7ac42ab5a4035\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a45670fbcb6213e0a028e97569d988249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">sendNodeNameSet</a> (const char *name)</td></tr>\n<tr class=\"memdesc:a45670fbcb6213e0a028e97569d988249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Informs Gateway about custom node name.  <a href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">More...</a><br /></td></tr>\n<tr class=\"separator:a45670fbcb6213e0a028e97569d988249\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-methods\"></a>\nStatic Protected Member Functions</h2></td></tr>\n<tr class=\"memitem:a4efeeca90488a14e95283c31d70ee0e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\">rx_cb</a> (uint8_t *mac_addr, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len)</td></tr>\n<tr class=\"memdesc:a4efeeca90488a14e95283c31d70ee0e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function that will be called anytime this node receives a message.  <a href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\">More...</a><br /></td></tr>\n<tr class=\"separator:a4efeeca90488a14e95283c31d70ee0e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3e50f907a24843d7752e81664e28fde9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\">tx_cb</a> (uint8_t *mac_addr, uint8_t <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a3e50f907a24843d7752e81664e28fde9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function that will be called anytime this node sends a message to indicate status result of sending process.  <a href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\">More...</a><br /></td></tr>\n<tr class=\"separator:a3e50f907a24843d7752e81664e28fde9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a59edd64bf4bf9acf6b18b6af90c9a435\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">node</a></td></tr>\n<tr class=\"memdesc:a59edd64bf4bf9acf6b18b6af90c9a435\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> abstraction to store context.  <a href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">More...</a><br /></td></tr>\n<tr class=\"separator:a59edd64bf4bf9acf6b18b6af90c9a435\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4be66e40b4882a486cf8ee80a4277438\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">flashBlue</a> = false</td></tr>\n<tr class=\"memdesc:a4be66e40b4882a486cf8ee80a4277438\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If true Tx LED will be flashed.  <a href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">More...</a><br /></td></tr>\n<tr class=\"separator:a4be66e40b4882a486cf8ee80a4277438\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a416d8a7660d1eaa85422247e9e918781\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">led</a> = -1</td></tr>\n<tr class=\"memdesc:a416d8a7660d1eaa85422247e9e918781\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">IO Pin that corresponds to Tx LED. Default value disables LED. It is initialized with <code>setLed</code> method.  <a href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">More...</a><br /></td></tr>\n<tr class=\"separator:a416d8a7660d1eaa85422247e9e918781\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a13b4e0476b9afe933303985e9a7025f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">ledOnTime</a></td></tr>\n<tr class=\"memdesc:a13b4e0476b9afe933303985e9a7025f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Time that LED is On during flash. Initalized on <code>setLed</code>  <a href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">More...</a><br /></td></tr>\n<tr class=\"separator:a13b4e0476b9afe933303985e9a7025f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7fca29c7cd9cba0115ec42566250275d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">comm</a></td></tr>\n<tr class=\"memdesc:a7fca29c7cd9cba0115ec42566250275d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Comms abstraction layer.  <a href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">More...</a><br /></td></tr>\n<tr class=\"separator:a7fca29c7cd9cba0115ec42566250275d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5c188f7db5bdde5837a02e4095c3b549\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">onNodeDataRx_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">notifyData</a></td></tr>\n<tr class=\"memdesc:a5c188f7db5bdde5837a02e4095c3b549\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Callback that will be called on every message reception.  <a href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">More...</a><br /></td></tr>\n<tr class=\"separator:a5c188f7db5bdde5837a02e4095c3b549\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae2da55526a67b70c0b724fe1d856cc72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">onConnected_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">notifyConnection</a></td></tr>\n<tr class=\"memdesc:ae2da55526a67b70c0b724fe1d856cc72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Callback that will be called anytime a new node is registered.  <a href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">More...</a><br /></td></tr>\n<tr class=\"separator:ae2da55526a67b70c0b724fe1d856cc72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0e506efc2aa99694bfa13a59b07d55cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">onDisconnected_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">notifyDisconnection</a></td></tr>\n<tr class=\"memdesc:a0e506efc2aa99694bfa13a59b07d55cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Callback that will be called anytime a node is disconnected.  <a href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">More...</a><br /></td></tr>\n<tr class=\"separator:a0e506efc2aa99694bfa13a59b07d55cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acb396ad8481d5fe7c99227cae4a1f1cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">useCounter</a> = true</td></tr>\n<tr class=\"memdesc:acb396ad8481d5fe7c99227cae4a1f1cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><code>true</code> means that data message counter will be used to mark message order  <a href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">More...</a><br /></td></tr>\n<tr class=\"separator:acb396ad8481d5fe7c99227cae4a1f1cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad3f6f92f204d4667e2a577cd23965f69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">rtcmem_data</a></td></tr>\n<tr class=\"memdesc:ad3f6f92f204d4667e2a577cd23965f69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Context data to be stored on persistent storage.  <a href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">More...</a><br /></td></tr>\n<tr class=\"separator:ad3f6f92f204d4667e2a577cd23965f69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0186926009fc565b05f5a2c37dfb3649\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">sleepRequested</a> = false</td></tr>\n<tr class=\"memdesc:a0186926009fc565b05f5a2c37dfb3649\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><code>true</code> means that this node will sleep as soon a message is sent and downlink wait time has passed  <a href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">More...</a><br /></td></tr>\n<tr class=\"separator:a0186926009fc565b05f5a2c37dfb3649\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a358bcf3efcf3a3c08249409852590e91\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint64_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">sleepTime</a></td></tr>\n<tr class=\"memdesc:a358bcf3efcf3a3c08249409852590e91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Time in microseconds that this node will be slept between measurements.  <a href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">More...</a><br /></td></tr>\n<tr class=\"separator:a358bcf3efcf3a3c08249409852590e91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3d6b6cce8aa2484af80617db10da4ea4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">dataMessageSent</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]</td></tr>\n<tr class=\"memdesc:a3d6b6cce8aa2484af80617db10da4ea4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Buffer where sent message is stored in case of retransmission is needed.  <a href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">More...</a><br /></td></tr>\n<tr class=\"separator:a3d6b6cce8aa2484af80617db10da4ea4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a77067c58362c3beb192545cb3ba1a775\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">dataMessageSentLength</a> = 0</td></tr>\n<tr class=\"memdesc:a77067c58362c3beb192545cb3ba1a775\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Message length stored for use in case of message retransmission is needed.  <a href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">More...</a><br /></td></tr>\n<tr class=\"separator:a77067c58362c3beb192545cb3ba1a775\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a074be31e720b8d50da8e94b1c0012afe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">dataMessageSendPending</a> = false</td></tr>\n<tr class=\"memdesc:a074be31e720b8d50da8e94b1c0012afe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True in case of message retransmission is needed.  <a href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">More...</a><br /></td></tr>\n<tr class=\"separator:a074be31e720b8d50da8e94b1c0012afe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4505b55fce99b105adc4993a404c7d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">dataMessageSendEncoding</a> = <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a></td></tr>\n<tr class=\"memdesc:ac4505b55fce99b105adc4993a404c7d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Encoding of the message pending to be sent.  <a href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ac4505b55fce99b105adc4993a404c7d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fbd4d4a8c9e29873e69d408bff0d735\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">dataMessageEncrypt</a> = true</td></tr>\n<tr class=\"memdesc:a2fbd4d4a8c9e29873e69d408bff0d735\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Message encryption enabled. Stored for use in case of message retransmission is needed.  <a href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">More...</a><br /></td></tr>\n<tr class=\"separator:a2fbd4d4a8c9e29873e69d408bff0d735\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a39fd0a21844a920f3a237e25311f58f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">invalidateReason</a> = <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a></td></tr>\n<tr class=\"memdesc:a39fd0a21844a920f3a237e25311f58f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last key invalidation reason.  <a href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">More...</a><br /></td></tr>\n<tr class=\"separator:a39fd0a21844a920f3a237e25311f58f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a238294f8ca6888e5e6000592e0955888\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">otaRunning</a> = false</td></tr>\n<tr class=\"memdesc:a238294f8ca6888e5e6000592e0955888\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if OTA update has started.  <a href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">More...</a><br /></td></tr>\n<tr class=\"separator:a238294f8ca6888e5e6000592e0955888\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a70fa9cce1a3080b3e946783a791363d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">otaError</a> = false</td></tr>\n<tr class=\"memdesc:a70fa9cce1a3080b3e946783a791363d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if OTA update has failed. This normally produces a restart.  <a href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">More...</a><br /></td></tr>\n<tr class=\"separator:a70fa9cce1a3080b3e946783a791363d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7068191735c2fb154c857fc80660adc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">protectOTA</a> = false</td></tr>\n<tr class=\"memdesc:a7068191735c2fb154c857fc80660adc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if OTA update was launched. OTA flag is stored on RTC so this disables writting.  <a href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">More...</a><br /></td></tr>\n<tr class=\"separator:a7068191735c2fb154c857fc80660adc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad3d2d41b518fbbb99d6c4d8824b9d4bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">lastOTAmsg</a></td></tr>\n<tr class=\"memdesc:ad3d2d41b518fbbb99d6c4d8824b9d4bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Time when last OTA update message has received. This is used to control timeout.  <a href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">More...</a><br /></td></tr>\n<tr class=\"separator:ad3d2d41b518fbbb99d6c4d8824b9d4bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa2a4910739da2e9181f2274cbc4d078a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">boolean&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">indentifying</a> = false</td></tr>\n<tr class=\"memdesc:aa2a4910739da2e9181f2274cbc4d078a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">True if node has its led flashing to be identified.  <a href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">More...</a><br /></td></tr>\n<tr class=\"separator:aa2a4910739da2e9181f2274cbc4d078a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9ffe72d0ffb67d58f2e435308433b8ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">identifyStart</a></td></tr>\n<tr class=\"memdesc:a9ffe72d0ffb67d58f2e435308433b8ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Time when identification started flashing. Used to control identification timeout.  <a href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">More...</a><br /></td></tr>\n<tr class=\"separator:a9ffe72d0ffb67d58f2e435308433b8ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a10d221c32311c32d19d670a68044aca4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">clock_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">timeSyncPeriod</a> = <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">QUICK_SYNC_TIME</a></td></tr>\n<tr class=\"memdesc:a10d221c32311c32d19d670a68044aca4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clock synchronization period.  <a href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">More...</a><br /></td></tr>\n<tr class=\"separator:a10d221c32311c32d19d670a68044aca4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adbabb6a770438b4cfbb0f89cf2cb1795\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">clockSyncEnabled</a> = false</td></tr>\n<tr class=\"memdesc:adbabb6a770438b4cfbb0f89cf2cb1795\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If true clock is synchronized with Gateway.  <a href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">More...</a><br /></td></tr>\n<tr class=\"separator:adbabb6a770438b4cfbb0f89cf2cb1795\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2e3ba13a9f6b1a0e3feb9e6bee17d365\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">shouldRestart</a> = false</td></tr>\n<tr class=\"memdesc:a2e3ba13a9f6b1a0e3feb9e6bee17d365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Triggers a restart if true.  <a href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">More...</a><br /></td></tr>\n<tr class=\"separator:a2e3ba13a9f6b1a0e3feb9e6bee17d365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3e3e9744eef70673aaae93c27f4b0218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">restartReason</a></td></tr>\n<tr class=\"memdesc:a3e3e9744eef70673aaae93c27f4b0218\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Reason of restart (OTA, restart requested, configuration reset)  <a href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">More...</a><br /></td></tr>\n<tr class=\"separator:a3e3e9744eef70673aaae93c27f4b0218\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2beff45acb833796b079e741d13ec75\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">gatewaySearchStarted</a> = false</td></tr>\n<tr class=\"memdesc:ad2beff45acb833796b079e741d13ec75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Avoids start a new gateway scan if it already started.  <a href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">More...</a><br /></td></tr>\n<tr class=\"separator:ad2beff45acb833796b079e741d13ec75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa024db31641775e4de784d4d2ce545a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">requestSearchGateway</a> = false</td></tr>\n<tr class=\"memdesc:aa024db31641775e4de784d4d2ce545a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flag to control updating gateway address, RSSI and channel.  <a href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">More...</a><br /></td></tr>\n<tr class=\"separator:aa024db31641775e4de784d4d2ce545a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9d5665e7dfd598c618e5388b07271bb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">requestReportRSSI</a> = false</td></tr>\n<tr class=\"memdesc:a9d5665e7dfd598c618e5388b07271bb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flag to control RSSI reporting.  <a href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">More...</a><br /></td></tr>\n<tr class=\"separator:a9d5665e7dfd598c618e5388b07271bb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5aea95bd2dead51558a1f7fa312cf1c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">configCleared</a> = false</td></tr>\n<tr class=\"memdesc:a5aea95bd2dead51558a1f7fa312cf1c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This flag disables asy configuration save after triggering a factory reset.  <a href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">More...</a><br /></td></tr>\n<tr class=\"separator:a5aea95bd2dead51558a1f7fa312cf1c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aea10660384ee02f0e6cf1aa3f1786144\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">resetPin</a> = -1</td></tr>\n<tr class=\"memdesc:aea10660384ee02f0e6cf1aa3f1786144\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pin used to reset configuration if it is connected to ground during startup.  <a href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">More...</a><br /></td></tr>\n<tr class=\"separator:aea10660384ee02f0e6cf1aa3f1786144\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afff6af9384f1f217168473b1df017d78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWiFiManager *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">wifiManager</a></td></tr>\n<tr class=\"memdesc:afff6af9384f1f217168473b1df017d78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wifi configuration portal.  <a href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">More...</a><br /></td></tr>\n<tr class=\"separator:afff6af9384f1f217168473b1df017d78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2984b66fdb8a831c9c7cbf775afc82b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">notifyWiFiManagerExit</a></td></tr>\n<tr class=\"memdesc:a2984b66fdb8a831c9c7cbf775afc82b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function called when configuration portal exits.  <a href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">More...</a><br /></td></tr>\n<tr class=\"separator:a2984b66fdb8a831c9c7cbf775afc82b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4c9590d8531f7da5643983f5519d40a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">notifyWiFiManagerStarted</a></td></tr>\n<tr class=\"memdesc:a4c9590d8531f7da5643983f5519d40a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function called when configuration portal is started.  <a href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">More...</a><br /></td></tr>\n<tr class=\"separator:a4c9590d8531f7da5643983f5519d40a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abc061ed33eaff29767c880e77d2faca9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">cycleStartedTime</a></td></tr>\n<tr class=\"memdesc:abc061ed33eaff29767c880e77d2faca9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to calculate exact sleep time by substracting awake time.  <a href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">More...</a><br /></td></tr>\n<tr class=\"separator:abc061ed33eaff29767c880e77d2faca9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a98ed5cb782d6c980e81392c82beec9fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">lastBroadcastMsgCounter</a></td></tr>\n<tr class=\"memdesc:a98ed5cb782d6c980e81392c82beec9fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Counter for broadcast messages from gateway *&zwj;/.  <a href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">More...</a><br /></td></tr>\n<tr class=\"separator:a98ed5cb782d6c980e81392c82beec9fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Main node class. Manages communication with gateway and allows sending and receiving user data. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00134\">134</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a8d168a19f1c868e2cdcd7f11f70e0742\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8d168a19f1c868e2cdcd7f11f70e0742\">&#9670;&nbsp;</a></span>addWiFiManagerParameter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::addWiFiManagerParameter </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWiFiManagerParameter *&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Adds a parameter to configuration portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">p</td><td>Configuration parameter </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00735\">735</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"abff1de59af5ff0f9fd2e89b996f31f06\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abff1de59af5ff0f9fd2e89b996f31f06\">&#9670;&nbsp;</a></span>begin()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::begin </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>comm</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>gateway</em> = <code>NULL</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>networkKey</em> = <code>NULL</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>useCounter</em> = <code>true</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>sleepy</em> = <code>true</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Initalizes communication basic data and starts node registration. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">comm</td><td>Physical layer to be used on this node network </td></tr>\n    <tr><td class=\"paramname\">gateway</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">networkKey</td><td>Network key to protect shared key agreement </td></tr>\n    <tr><td class=\"paramname\">useCounter</td><td>Indicates if a counter has to be added to every message data to check message sequence. <code>true</code> by default </td></tr>\n    <tr><td class=\"paramname\">sleepy</td><td>Indicates if this node changes to low energy mode (sleep mode) after sending a data message. <code>true</code> by default</td></tr>\n  </table>\n  </dd>\n</dl>\n<p>This condition is signalled to Gateway during registration so that downlink messages are managed diferently. On non sleepy nodes a downlink data message can be sent on any moment as node will be always awake. But for nodes that sleep, normally those that are powered with batteries, downlink message will be queued on gateway and sent just after an uplink data message from node has been sent </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00696\">696</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a742b9e627fee356913b069c64499cd5f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a742b9e627fee356913b069c64499cd5f\">&#9670;&nbsp;</a></span>broadcastIsEnabled()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::broadcastIsEnabled </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted broadcast messages. If this is enabled this will be notified to gateway so that it sends broadcast key. Notice this mode is optional and does not disable the ability to send normal messages. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if node has broadcast mode enabled. </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00557\">557</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a461dd5c9def2768c3c4b87cfc9be6ef8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a461dd5c9def2768c3c4b87cfc9be6ef8\">&#9670;&nbsp;</a></span>checkCRC()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::checkCRC </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint32_t *&#160;</td>\n          <td class=\"paramname\"><em>crc</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Check that a given CRC matches to calulated value from a buffer. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">buf</td><td>Pointer to the buffer that contains the stream to calculate CRC </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Buffer length in number of bytes </td></tr>\n    <tr><td class=\"paramname\">crc</td><td>Received CRC to check against calculation </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if CRC check was successful. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01182\">1182</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2cf188fbd1d22775605eea93ed561a53\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2cf188fbd1d22775605eea93ed561a53\">&#9670;&nbsp;</a></span>checkResetButton()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::checkResetButton </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Checks reset button status during startup. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00674\">674</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a531eee8dc001da6f1f1393c1cc632b09\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a531eee8dc001da6f1f1393c1cc632b09\">&#9670;&nbsp;</a></span>clearFlash()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::clearFlash </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Clears configuration stored in flash to recover factory state. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00464\">464</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afa97e9b5f9e73702c545a5e7b4c2c15f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afa97e9b5f9e73702c545a5e7b4c2c15f\">&#9670;&nbsp;</a></span>clearRTC()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::clearRTC </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Clears configuration stored in RTC memory to recover factory state. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02093\">2093</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a1ddc7fce5233d3959cfb52dd3c7f605c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1ddc7fce5233d3959cfb52dd3c7f605c\">&#9670;&nbsp;</a></span>clientHello()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::clientHello </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Build a <b>ClientHello</b> messange and send it to gateway. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if ClientHello message was successfully sent. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01192\">1192</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6830ae2f6b8dafa588f5baa1fe4e8a99\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6830ae2f6b8dafa588f5baa1fe4e8a99\">&#9670;&nbsp;</a></span>clock()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int64_t EnigmaIOTNodeClass::clock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets current clock counter. millis() + offset. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Clock value in <code>int64_t</code> format </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01455\">1455</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a1d62eaa08920568f019ef240dd98dc3b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1d62eaa08920568f019ef240dd98dc3b\">&#9670;&nbsp;</a></span>clockRequest()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::clockRequest </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Build a <b>ClockRequest</b> messange and send it to gateway. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if ClockRequest message was successfully sent. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01291\">1291</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a41984c7560df0af008fc526ee38b0b42\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41984c7560df0af008fc526ee38b0b42\">&#9670;&nbsp;</a></span>configWiFiManager()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::configWiFiManager </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> *&#160;</td>\n          <td class=\"paramname\"><em>data</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Starts configuration AP and web server and gets settings from it. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Pointer to configuration data to be stored on RTC memory to keep status along sleep cycles </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if data was been correctly configured. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00481\">481</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a09782f9f3ca09d7fd79b8b70e130a206\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a09782f9f3ca09d7fd79b8b70e130a206\">&#9670;&nbsp;</a></span>dataMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::dataMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>dataMsgType</em> = <code><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>encrypt</em> = <code>true</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em> = <code><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Builds, encrypts and sends a <b>Data</b> message. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Buffer to store payload to be sent </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n    <tr><td class=\"paramname\">dataMsgType</td><td>Signals if this message is a special EnigmaIoT message or that should not be passed to higher layers </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Determine payload data encoding as nodePayloadEncoding_t. It can be RAW, CAYENNELPP, MSGPACK </td></tr>\n    <tr><td class=\"paramname\">encrypt</td><td>Indicates if message should be encrypted. True by default. Not recommended to set to false, use it only if you absolutely need more performance </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly sent </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01635\">1635</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aafdd17efe90bfc2dd9af758633034f82\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aafdd17efe90bfc2dd9af758633034f82\">&#9670;&nbsp;</a></span>enableBroadcast()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::enableBroadcast </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>broadcast</em> = <code>true</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Enables node broadcast mode. <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> will request broadcast key to Gateway. When it is received node will be able to send and receive encrypted broadcast messages. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">broadcast</td><td><code>true</code> to enable broadcast mode on this node. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00566\">566</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"afe087ce005069779bf699e39695397f4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe087ce005069779bf699e39695397f4\">&#9670;&nbsp;</a></span>enableClockSync()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::enableClockSync </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>clockSync</em> = <code>true</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Controls clock synchronization function. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">clockSync</td><td>If true clock will be synchronized with gateway </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00584\">584</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6aaa73dd705c9bdaa7c2b1fe70cb91ed\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">&#9670;&nbsp;</a></span>getNode()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a>* EnigmaIOTNodeClass::getNode </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance pointer </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00797\">797</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a3398ebecf52e1d7b5493d34ed011c38f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3398ebecf52e1d7b5493d34ed011c38f\">&#9670;&nbsp;</a></span>getOTArunning()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::getOTArunning </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Checks if OTA is running. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>OTA running state </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00789\">789</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae6176d81e34ccc835f6886c23ba47d93\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae6176d81e34ccc835f6886c23ba47d93\">&#9670;&nbsp;</a></span>getRSSI()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int8_t EnigmaIOTNodeClass::getRSSI </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets latest RSSI measurement. It is updated during start up or in case of transmission errors. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>RSSI value </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00085\">85</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0144b183ee216aa5b977086ae1753d3c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0144b183ee216aa5b977086ae1753d3c\">&#9670;&nbsp;</a></span>getSleepTime()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint32_t EnigmaIOTNodeClass::getSleepTime </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns sleep period in seconds. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Sleep period in seconds </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00077\">77</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a726847ca0ed458b01c23e78672aa4059\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a726847ca0ed458b01c23e78672aa4059\">&#9670;&nbsp;</a></span>getStatus()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::getStatus </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac_addr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>status</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Functrion to debug send status. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac_addr</td><td>Address of message sender </td></tr>\n    <tr><td class=\"paramname\">status</td><td>Result status code </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02704\">2704</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a53bbbb07409315ada40ad53d00344252\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a53bbbb07409315ada40ad53d00344252\">&#9670;&nbsp;</a></span>handle()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::handle </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>This method should be called periodically for instance inside <code><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop()</a></code> function. It is used for internal node maintenance tasks. </p>\n<p>digitalRead (led) &amp;&amp;</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01003\">1003</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a1c015860a4a1650d3e2653212d13179e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1c015860a4a1650d3e2653212d13179e\">&#9670;&nbsp;</a></span>hasClockSync()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::hasClockSync </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Checks if internal clock is synchronized to gateway. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>True if clock is synchronized </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01464\">1464</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a43abab3a73d46ff99f33c8596512dcaf\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a43abab3a73d46ff99f33c8596512dcaf\">&#9670;&nbsp;</a></span>isRegistered()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::isRegistered </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Checks if node is registered. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>True if node is registered </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00770\">770</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8574c3435e748fbca1b99eeec4c770c2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8574c3435e748fbca1b99eeec4c770c2\">&#9670;&nbsp;</a></span>loadFlashData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::loadFlashData </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads configuration from flash memory. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if data was read successfuly. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00270\">270</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af1408c0ed378a9b46e62d98f88545893\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af1408c0ed378a9b46e62d98f88545893\">&#9670;&nbsp;</a></span>loadRTCData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::loadRTCData </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads configuration from RTC data. Uses a CRC to check data integrity. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if data is valid. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00221\">221</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a846d3d0dd41fcaa8944e7cbe804bef93\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a846d3d0dd41fcaa8944e7cbe804bef93\">&#9670;&nbsp;</a></span>manageMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::manageMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Process every received message. </p>\n<p>It starts clasiffying message usint the first byte. After that it passes it to the corresponding method for decoding </p><dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address of message sender </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer that stores message bytes </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Length of message in number of bytes </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02551\">2551</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"acce855b22bb1045a9cf4af9c4130500f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acce855b22bb1045a9cf4af9c4130500f\">&#9670;&nbsp;</a></span>onConnected()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::onConnected </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">onConnected_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handler</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Defines a function callback that will be called everytime node is registered on gateway. </p>\n<p>Use example: </p><div class=\"fragment\"><div class=\"line\"><span class=\"comment\">// First define the callback function</span></div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\">  <span class=\"comment\">// Do whatever you need to process disconnecion</span></div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">  <span class=\"comment\">// Now register function as data message handler</span></div>\n<div class=\"line\">  <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>);</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handler</td><td>Pointer to the function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00682\">682</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2c8523627fb660441dbdcbc8a796c3b4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2c8523627fb660441dbdcbc8a796c3b4\">&#9670;&nbsp;</a></span>onDataRx()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::onDataRx </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">onNodeDataRx_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handler</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Defines a function callback that will be called on every downlink data message that is received from gateway. </p>\n<p>Use example: </p><div class=\"fragment\"><div class=\"line\"><span class=\"comment\">// First define the callback function</span></div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length) {</div>\n<div class=\"line\">  <span class=\"comment\">// Do whatever you need with received data</span></div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">  <span class=\"comment\">// Now register function as data message handler</span></div>\n<div class=\"line\">  <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>);</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handler</td><td>Pointer to the function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00655\">655</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a636b6779d3c5a41e52fd6bb4b0ef31c0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a636b6779d3c5a41e52fd6bb4b0ef31c0\">&#9670;&nbsp;</a></span>onDisconnected()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::onDisconnected </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">onDisconnected_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handler</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Defines a function callback that will be called everytime node is disconnected from gateway. </p>\n<p>Deregistration is always started by gateway due syntax or encryption error or in case of key validity is over.</p>\n<p>Use example: </p><div class=\"fragment\"><div class=\"line\"><span class=\"comment\">// First define the callback function</span></div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> () {</div>\n<div class=\"line\">  <span class=\"comment\">// Do whatever you need to process disconnecion</span></div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">  <span class=\"comment\">// Now register function as data message handler</span></div>\n<div class=\"line\">  <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>);</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\"><span class=\"keywordtype\">void</span> <a class=\"code\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> {</div>\n<div class=\"line\">  .....</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handler</td><td>Pointer to the function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00711\">711</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a43809462401bef0a7697175450f025ae\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a43809462401bef0a7697175450f025ae\">&#9670;&nbsp;</a></span>onWiFiManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::onWiFiManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Register callback to be called on wifi manager exit. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handle</td><td>Callback function pointer </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00719\">719</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a92cabfdedc76da41398b548ff7e6e799\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a92cabfdedc76da41398b548ff7e6e799\">&#9670;&nbsp;</a></span>onWiFiManagerStarted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::onWiFiManagerStarted </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a>&#160;</td>\n          <td class=\"paramname\"><em>handle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Register callback to be called on wifi manager start. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">handle</td><td>Callback function pointer </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00727\">727</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a95a7b8677828b1fe4c6e45a13deeb83b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a95a7b8677828b1fe4c6e45a13deeb83b\">&#9670;&nbsp;</a></span>processBroadcastKeyMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processBroadcastKeyMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets a buffer containing a <b>BroadcastKey</b> message and process it. This key is used to send and receive broadcast messages. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address where this message was received from </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Pointer to the buffer that contains the message </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Message length in number of bytes of ServerHello message </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02408\">2408</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad35575e4aa02a2ef38baa14a2dea0f67\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad35575e4aa02a2ef38baa14a2dea0f67\">&#9670;&nbsp;</a></span>processClockResponse()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processClockResponse </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets a buffer containing a <b>ClockResponse</b> message and process it. It uses that message to calculate clock difference against gateway and synchronize to it. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address where this message was received from </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Pointer to the buffer that contains the message </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Message length in number of bytes of ClockResponse message </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01367\">1367</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a59f5ef49f540e586fb43dc984c0ed696\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a59f5ef49f540e586fb43dc984c0ed696\">&#9670;&nbsp;</a></span>processControlCommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processControlCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>broadcast</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a control command. Does not propagate to user code. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n    <tr><td class=\"paramname\">broadcast</td><td><code>true</code>if this is a broadcast addressed message </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02366\">2366</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aab18d9b24e08c00bcbac6bd5f1792d63\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aab18d9b24e08c00bcbac6bd5f1792d63\">&#9670;&nbsp;</a></span>processDownstreamData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processDownstreamData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>control</em> = <code>false</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes downstream data from gateway. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer to store received payload </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Length of payload data </td></tr>\n    <tr><td class=\"paramname\">control</td><td>Idicates if downstream message is user or control data. If true it is a control message </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02425\">2425</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a32a98693bfc71a16f8f3c6db7053221c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a32a98693bfc71a16f8f3c6db7053221c\">&#9670;&nbsp;</a></span>processGetNameCommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processGetNameCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a request to get <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name and address. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01795\">1795</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0d4446a73e230333f972b233fa2dffdd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0d4446a73e230333f972b233fa2dffdd\">&#9670;&nbsp;</a></span>processGetRSSICommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processGetRSSICommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a request to measure RSSI. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02046\">2046</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5b8a2368449f3fd7a1986fb80d9e4274\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5b8a2368449f3fd7a1986fb80d9e4274\">&#9670;&nbsp;</a></span>processGetSleepTimeCommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processGetSleepTimeCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a request of sleep time configuration. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01772\">1772</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a22c565018d72ac1df23a765a713fd768\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a22c565018d72ac1df23a765a713fd768\">&#9670;&nbsp;</a></span>processInvalidateKey()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> EnigmaIOTNodeClass::processInvalidateKey </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets a buffer containing an <b>InvalidateKey</b> message and process it. This trigger a new key agreement to start. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address where this message was received from </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Pointer to the buffer that contains the message </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Message length in number of bytes of InvalidateKey message </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns the reason because key is not valid anymore. Check possible values in nodeInvalidateReason_t </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02527\">2527</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa632927a0a9da18d3605e29aa3a055f2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa632927a0a9da18d3605e29aa3a055f2\">&#9670;&nbsp;</a></span>processOTACommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processOTACommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a single OTA update command or data. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02181\">2181</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a777ffbcfe25563aae4ddbb77bdca4fc0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a777ffbcfe25563aae4ddbb77bdca4fc0\">&#9670;&nbsp;</a></span>processServerHello()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processServerHello </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>count</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets a buffer containing a <b>ServerHello</b> message and process it. It uses that message to calculate a shared key using Diffie Hellman algorithm. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address where this message was received from </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Pointer to the buffer that contains the message </td></tr>\n    <tr><td class=\"paramname\">count</td><td>Message length in number of bytes of ServerHello message </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01471\">1471</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a04a1d59adae7dc0786ac6e066c5d1263\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a04a1d59adae7dc0786ac6e066c5d1263\">&#9670;&nbsp;</a></span>processSetIdentifyCommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processSetIdentifyCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a request to start indicate to identify a node visually. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02033\">2033</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a27731975d4dc4feeafb7ac42ab5a4035\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a27731975d4dc4feeafb7ac42ab5a4035\">&#9670;&nbsp;</a></span>processSetNameCommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processSetNameCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a request to set <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01899\">1899</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"acd0424de61195d76ff09a7462d539d7e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acd0424de61195d76ff09a7462d539d7e\">&#9670;&nbsp;</a></span>processSetNameResponse()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processSetNameResponse </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a response to set <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01829\">1829</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a3c807080f0701745c68182181677a98d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3c807080f0701745c68182181677a98d\">&#9670;&nbsp;</a></span>processSetResetConfigCommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processSetResetConfigCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a request to reset node configuration. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02059\">2059</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a9233d49a0d125e9c7054c6e70f377d56\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9233d49a0d125e9c7054c6e70f377d56\">&#9670;&nbsp;</a></span>processSetRestartCommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processSetRestartCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a request to restar node mcu. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02053\">2053</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab348fec65af29c28ebc8c1a342e3b241\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab348fec65af29c28ebc8c1a342e3b241\">&#9670;&nbsp;</a></span>processSetSleepTimeCommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processSetSleepTimeCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a request to set new sleep time configuration. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02118\">2118</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ac2c135a9d3623b28dda13acdbd4d5615\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac2c135a9d3623b28dda13acdbd4d5615\">&#9670;&nbsp;</a></span>processVersionCommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::processVersionCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buf</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes a request firmware version. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Gateway address </td></tr>\n    <tr><td class=\"paramname\">buf</td><td>Buffer to store received message </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly decoded and processed </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02163\">2163</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab95b384ed3f016217d9669c7982e8c08\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab95b384ed3f016217d9669c7982e8c08\">&#9670;&nbsp;</a></span>reportRSSI()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::reportRSSI </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends RSSI value and channel to Gateway. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>True if report was sent successfuly </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00982\">982</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a256f6a64dac541f374d00349d3a3e325\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a256f6a64dac541f374d00349d3a3e325\">&#9670;&nbsp;</a></span>resetConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::resetConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Deletes configuration file stored on flash. It makes neccessary to configure it again using WiFi Portal. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00044\">44</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a7d5403fd3a4bcaea590b3aa919c141dc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7d5403fd3a4bcaea590b3aa919c141dc\">&#9670;&nbsp;</a></span>restart()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::restart </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>reboot</em> = <code>true</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sets connection as unregistered to force a resyncrhonisation after boot. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">reason</td><td>Reason of the reboot (OTA, restart requested, configuration reset) </td></tr>\n    <tr><td class=\"paramname\">reboot</td><td>True if a reboot should be triggered after unregistration </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l02351\">2351</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4efeeca90488a14e95283c31d70ee0e4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4efeeca90488a14e95283c31d70ee0e4\">&#9670;&nbsp;</a></span>rx_cb()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::rx_cb </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac_addr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function that will be called anytime this node receives a message. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac_addr</td><td>Address of message sender </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Buffer that stores message bytes </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of message in number of bytes </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01174\">1174</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a77b2c62dbadc2b7546d74d8ebf931cc2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a77b2c62dbadc2b7546d74d8ebf931cc2\">&#9670;&nbsp;</a></span>saveFlashData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::saveFlashData </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>fsOpen</em> = <code>false</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves configuration to flash memory. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fsOpen</td><td>True if FileSystem has is managed in outter code </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if data could be written successfuly. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00352\">352</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae1bb8b93c739fced2c695e47a5242f9a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae1bb8b93c739fced2c695e47a5242f9a\">&#9670;&nbsp;</a></span>saveRTCData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::saveRTCData </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Save configuration to RTC to store current status and recover it after deep sleep. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if result is successful. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00433\">433</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad7a98adabe272649c3c65efd1c2cfe45\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad7a98adabe272649c3c65efd1c2cfe45\">&#9670;&nbsp;</a></span>searchForGateway()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::searchForGateway </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>shouldStoreData</em> = <code>false</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Starts searching for a gateway that it using configured Network Name as WiFi AP. Stores this info for subsequent use. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> context structure </td></tr>\n    <tr><td class=\"paramname\">shouldStoreData</td><td>True if this method should save context in flash </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if gateway could be found. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00860\">860</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af83a2fb76f23a90f98f42bdb6856213b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af83a2fb76f23a90f98f42bdb6856213b\">&#9670;&nbsp;</a></span>sendData() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::sendData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>dataMsgType</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>encrypt</em> = <code>true</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em> = <code><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Initiades data transmission distinguissing if it is payload or control data. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Buffer to store payload to be sent </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n    <tr><td class=\"paramname\">dataMsgType</td><td>Signals if this message is a special EnigmaIoT message or that should not be passed to higher layers </td></tr>\n    <tr><td class=\"paramname\">encrypt</td><td><code>true</code> if data should be encrypted. Default is <code>true</code> </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Identifies data encoding of payload. It can be RAW, CAYENNELPP, MSGPACK </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly sent </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01535\">1535</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a15f69c66601b59bfc4bae47cf6075e55\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a15f69c66601b59bfc4bae47cf6075e55\">&#9670;&nbsp;</a></span>sendData() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::sendData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em> = <code><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Starts a data message transmission. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Payload buffer </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Payload length </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Identifies data encoding of payload. It can be RAW, CAYENNELPP, MSGPACK </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00609\">609</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a436eb0a595405e52dc3a937c5968447f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a436eb0a595405e52dc3a937c5968447f\">&#9670;&nbsp;</a></span>sendHADiscoveryMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::sendHADiscoveryMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds, encrypts and sends a <b>HomeAssistant discovery</b> message. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Buffer to store payload to be sent </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly sent </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01764\">1764</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a45670fbcb6213e0a028e97569d988249\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a45670fbcb6213e0a028e97569d988249\">&#9670;&nbsp;</a></span>sendNodeNameSet()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::sendNodeNameSet </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>name</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Informs Gateway about custom node name. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">name</td><td>Custom node name </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>True if message was sent successfuly </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01936\">1936</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a55aa8affe03e929129ee30ac33c954c5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a55aa8affe03e929129ee30ac33c954c5\">&#9670;&nbsp;</a></span>sendRestart()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::sendRestart </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends a restart notification control message. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00056\">56</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2e6973be4195ba354607c631c587297e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2e6973be4195ba354607c631c587297e\">&#9670;&nbsp;</a></span>sendUnencryptedData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::sendUnencryptedData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em> = <code><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Starts a data message transmission. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Payload buffer </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Payload length </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Identifies data encoding of payload. It can be RAW, CAYENNELPP, MSGPACK </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00628\">628</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a187f3eb82f9948d5b53bd7eb480f1dd4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a187f3eb82f9948d5b53bd7eb480f1dd4\">&#9670;&nbsp;</a></span>setLed()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::setLed </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>led</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">time_t&#160;</td>\n          <td class=\"paramname\"><em>onTime</em> = <code><a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">FLASH_LED_TIME</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sets a LED to be flashed every time a message is transmitted. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">led</td><td>LED I/O pin </td></tr>\n    <tr><td class=\"paramname\">onTime</td><td>Flash duration. 100ms by default. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00089\">89</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a13509c40faa91f1ea6fa1bb9fa0097c6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a13509c40faa91f1ea6fa1bb9fa0097c6\">&#9670;&nbsp;</a></span>setNodeAddress()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::setNodeAddress </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>address</em>[ENIGMAIOT_ADDR_LEN]</td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set node address to be used in EnigmaIOT communication. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if addres was set correctly </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00943\">943</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a50b37ec711dc25df93a1aba827d59263\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a50b37ec711dc25df93a1aba827d59263\">&#9670;&nbsp;</a></span>setResetPin()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::setResetPin </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>pin</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sets a pin to be used to reset configuration it it is connected to ground during startup. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">pin</td><td>Reset pin </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00094\">94</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6432011ed34012e55d393bfd0c99219e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6432011ed34012e55d393bfd0c99219e\">&#9670;&nbsp;</a></span>setSleepTime()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::setSleepTime </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint32_t&#160;</td>\n          <td class=\"paramname\"><em>sleepTime</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>forceSleepForever</em> = <code>false</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Allows to configure a new sleep time period from user code. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sleepTime</td><td>Time in seconds. Final period is not espected to be exact. Its value depends on communication process. If it is zero, disables deep sleep. </td></tr>\n    <tr><td class=\"paramname\">forceSleepForever</td><td>Ignored if <code>sleepTime</code> is not zero. If it has zero value forces deepSleep command to sleep indifinitely. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00948\">948</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81ab5be7b67c28948ea5de40e5d3c360\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81ab5be7b67c28948ea5de40e5d3c360\">&#9670;&nbsp;</a></span>sleep()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::sleep </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Requests transition to sleep mode (low energy state) </p>\n<p>Sleep can be requested in any moment and will be triggered inmediatelly except if node is doing registration or is waiting for downlink </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01564\">1564</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a1701a6f85406e5deef210c74d509a471\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1701a6f85406e5deef210c74d509a471\">&#9670;&nbsp;</a></span>startIdentifying()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::startIdentifying </td>\n          <td>(</td>\n          <td class=\"paramtype\">time_t&#160;</td>\n          <td class=\"paramname\"><em>period</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Starts node identification by flashing led. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">period</td><td>Flash led period in ms </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00663\">663</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae1729724a332e907bddbe7b27c2f3c22\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae1729724a332e907bddbe7b27c2f3c22\">&#9670;&nbsp;</a></span>stop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::stop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Stops EnigmaIoT protocol. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00938\">938</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a659fca03ecdfd18e19be1b39b4e703b3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a659fca03ecdfd18e19be1b39b4e703b3\">&#9670;&nbsp;</a></span>stopIdentifying()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::stopIdentifying </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Stops node identification. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l00669\">669</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a3e50f907a24843d7752e81664e28fde9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3e50f907a24843d7752e81664e28fde9\">&#9670;&nbsp;</a></span>tx_cb()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTNodeClass::tx_cb </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac_addr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>status</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function that will be called anytime this node sends a message to indicate status result of sending process. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac_addr</td><td>Address of message destination </td></tr>\n    <tr><td class=\"paramname\">status</td><td>Result of sending process </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01178\">1178</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ac6f82e2e104008daffa7b6f17abbcfdc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac6f82e2e104008daffa7b6f17abbcfdc\">&#9670;&nbsp;</a></span>unencryptedDataMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::unencryptedDataMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">dataMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>dataMsgType</em> = <code><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">DATA_TYPE</a></code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em> = <code><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Builds and sends a <b>Data</b> message without encryption. Not recommended, use it only if you absolutely need more performance. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Buffer to store payload to be sent </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Length of payload data </td></tr>\n    <tr><td class=\"paramname\">dataMsgType</td><td>Signals if this message is a special EnigmaIoT message or that should not be passed to higher layers </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Determine payload data encoding as nodePayloadEncoding_t. It can be RAW, CAYENNELPP, MSGPACK </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message could be correcly sent </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01574\">1574</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab35d557fff42f0a565ee2cae63d86140\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab35d557fff42f0a565ee2cae63d86140\">&#9670;&nbsp;</a></span>unixtime()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t EnigmaIOTNodeClass::unixtime </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets current time in seconds from 1970, if time is synchronized. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Time value in <code>time_t</code> format </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html#l01460\">1460</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"adbabb6a770438b4cfbb0f89cf2cb1795\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adbabb6a770438b4cfbb0f89cf2cb1795\">&#9670;&nbsp;</a></span>clockSyncEnabled</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::clockSyncEnabled = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>If true clock is synchronized with Gateway. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00161\">161</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7fca29c7cd9cba0115ec42566250275d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7fca29c7cd9cba0115ec42566250275d\">&#9670;&nbsp;</a></span>comm</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a>* EnigmaIOTNodeClass::comm</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Comms abstraction layer. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00140\">140</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5aea95bd2dead51558a1f7fa312cf1c6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5aea95bd2dead51558a1f7fa312cf1c6\">&#9670;&nbsp;</a></span>configCleared</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::configCleared = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>This flag disables asy configuration save after triggering a factory reset. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00167\">167</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"abc061ed33eaff29767c880e77d2faca9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abc061ed33eaff29767c880e77d2faca9\">&#9670;&nbsp;</a></span>cycleStartedTime</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t EnigmaIOTNodeClass::cycleStartedTime</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Used to calculate exact sleep time by substracting awake time. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00172\">172</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2fbd4d4a8c9e29873e69d408bff0d735\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2fbd4d4a8c9e29873e69d408bff0d735\">&#9670;&nbsp;</a></span>dataMessageEncrypt</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::dataMessageEncrypt = true</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Message encryption enabled. Stored for use in case of message retransmission is needed. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00152\">152</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac4505b55fce99b105adc4993a404c7d4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac4505b55fce99b105adc4993a404c7d4\">&#9670;&nbsp;</a></span>dataMessageSendEncoding</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> EnigmaIOTNodeClass::dataMessageSendEncoding = <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">RAW</a></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Encoding of the message pending to be sent. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00151\">151</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a074be31e720b8d50da8e94b1c0012afe\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a074be31e720b8d50da8e94b1c0012afe\">&#9670;&nbsp;</a></span>dataMessageSendPending</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::dataMessageSendPending = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>True in case of message retransmission is needed. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00150\">150</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a3d6b6cce8aa2484af80617db10da4ea4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3d6b6cce8aa2484af80617db10da4ea4\">&#9670;&nbsp;</a></span>dataMessageSent</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t EnigmaIOTNodeClass::dataMessageSent[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Buffer where sent message is stored in case of retransmission is needed. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00148\">148</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a77067c58362c3beb192545cb3ba1a775\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a77067c58362c3beb192545cb3ba1a775\">&#9670;&nbsp;</a></span>dataMessageSentLength</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t EnigmaIOTNodeClass::dataMessageSentLength = 0</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Message length stored for use in case of message retransmission is needed. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00149\">149</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4be66e40b4882a486cf8ee80a4277438\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4be66e40b4882a486cf8ee80a4277438\">&#9670;&nbsp;</a></span>flashBlue</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::flashBlue = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>If true Tx LED will be flashed. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00137\">137</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad2beff45acb833796b079e741d13ec75\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad2beff45acb833796b079e741d13ec75\">&#9670;&nbsp;</a></span>gatewaySearchStarted</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::gatewaySearchStarted = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Avoids start a new gateway scan if it already started. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00164\">164</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a9ffe72d0ffb67d58f2e435308433b8ad\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9ffe72d0ffb67d58f2e435308433b8ad\">&#9670;&nbsp;</a></span>identifyStart</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t EnigmaIOTNodeClass::identifyStart</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Time when identification started flashing. Used to control identification timeout. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00159\">159</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa2a4910739da2e9181f2274cbc4d078a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa2a4910739da2e9181f2274cbc4d078a\">&#9670;&nbsp;</a></span>indentifying</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">boolean EnigmaIOTNodeClass::indentifying = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>True if node has its led flashing to be identified. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00158\">158</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a39fd0a21844a920f3a237e25311f58f8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a39fd0a21844a920f3a237e25311f58f8\">&#9670;&nbsp;</a></span>invalidateReason</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> EnigmaIOTNodeClass::invalidateReason = <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\">UNKNOWN_ERROR</a></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Last key invalidation reason. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00153\">153</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a98ed5cb782d6c980e81392c82beec9fa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a98ed5cb782d6c980e81392c82beec9fa\">&#9670;&nbsp;</a></span>lastBroadcastMsgCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int16_t EnigmaIOTNodeClass::lastBroadcastMsgCounter</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Counter for broadcast messages from gateway *&zwj;/. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00173\">173</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad3d2d41b518fbbb99d6c4d8824b9d4bd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">&#9670;&nbsp;</a></span>lastOTAmsg</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t EnigmaIOTNodeClass::lastOTAmsg</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Time when last OTA update message has received. This is used to control timeout. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00157\">157</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a416d8a7660d1eaa85422247e9e918781\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a416d8a7660d1eaa85422247e9e918781\">&#9670;&nbsp;</a></span>led</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int8_t EnigmaIOTNodeClass::led = -1</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>IO Pin that corresponds to Tx LED. Default value disables LED. It is initialized with <code>setLed</code> method. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00138\">138</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a13b4e0476b9afe933303985e9a7025f1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a13b4e0476b9afe933303985e9a7025f1\">&#9670;&nbsp;</a></span>ledOnTime</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned int EnigmaIOTNodeClass::ledOnTime</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Time that LED is On during flash. Initalized on <code>setLed</code> </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00139\">139</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a59edd64bf4bf9acf6b18b6af90c9a435\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a59edd64bf4bf9acf6b18b6af90c9a435\">&#9670;&nbsp;</a></span>node</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> EnigmaIOTNodeClass::node</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> abstraction to store context. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00136\">136</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae2da55526a67b70c0b724fe1d856cc72\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae2da55526a67b70c0b724fe1d856cc72\">&#9670;&nbsp;</a></span>notifyConnection</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">onConnected_t</a> EnigmaIOTNodeClass::notifyConnection</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Callback that will be called anytime a new node is registered. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00142\">142</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5c188f7db5bdde5837a02e4095c3b549\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5c188f7db5bdde5837a02e4095c3b549\">&#9670;&nbsp;</a></span>notifyData</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">onNodeDataRx_t</a> EnigmaIOTNodeClass::notifyData</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Callback that will be called on every message reception. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00141\">141</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0e506efc2aa99694bfa13a59b07d55cc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0e506efc2aa99694bfa13a59b07d55cc\">&#9670;&nbsp;</a></span>notifyDisconnection</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">onDisconnected_t</a> EnigmaIOTNodeClass::notifyDisconnection</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Callback that will be called anytime a node is disconnected. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00143\">143</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2984b66fdb8a831c9c7cbf775afc82b4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2984b66fdb8a831c9c7cbf775afc82b4\">&#9670;&nbsp;</a></span>notifyWiFiManagerExit</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">onWiFiManagerExit_t</a> EnigmaIOTNodeClass::notifyWiFiManagerExit</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function called when configuration portal exits. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00170\">170</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4c9590d8531f7da5643983f5519d40a9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4c9590d8531f7da5643983f5519d40a9\">&#9670;&nbsp;</a></span>notifyWiFiManagerStarted</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">simpleEventHandler_t</a> EnigmaIOTNodeClass::notifyWiFiManagerStarted</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function called when configuration portal is started. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00171\">171</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a70fa9cce1a3080b3e946783a791363d6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a70fa9cce1a3080b3e946783a791363d6\">&#9670;&nbsp;</a></span>otaError</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::otaError = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>True if OTA update has failed. This normally produces a restart. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00155\">155</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a238294f8ca6888e5e6000592e0955888\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a238294f8ca6888e5e6000592e0955888\">&#9670;&nbsp;</a></span>otaRunning</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::otaRunning = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>True if OTA update has started. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00154\">154</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7068191735c2fb154c857fc80660adc0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7068191735c2fb154c857fc80660adc0\">&#9670;&nbsp;</a></span>protectOTA</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::protectOTA = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>True if OTA update was launched. OTA flag is stored on RTC so this disables writting. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00156\">156</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a9d5665e7dfd598c618e5388b07271bb1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9d5665e7dfd598c618e5388b07271bb1\">&#9670;&nbsp;</a></span>requestReportRSSI</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::requestReportRSSI = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Flag to control RSSI reporting. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00166\">166</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa024db31641775e4de784d4d2ce545a1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa024db31641775e4de784d4d2ce545a1\">&#9670;&nbsp;</a></span>requestSearchGateway</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::requestSearchGateway = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Flag to control updating gateway address, RSSI and channel. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00165\">165</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aea10660384ee02f0e6cf1aa3f1786144\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aea10660384ee02f0e6cf1aa3f1786144\">&#9670;&nbsp;</a></span>resetPin</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int EnigmaIOTNodeClass::resetPin = -1</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Pin used to reset configuration if it is connected to ground during startup. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00168\">168</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a3e3e9744eef70673aaae93c27f4b0218\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3e3e9744eef70673aaae93c27f4b0218\">&#9670;&nbsp;</a></span>restartReason</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">restartReason_t</a> EnigmaIOTNodeClass::restartReason</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Reason of restart (OTA, restart requested, configuration reset) </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00163\">163</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad3f6f92f204d4667e2a577cd23965f69\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad3f6f92f204d4667e2a577cd23965f69\">&#9670;&nbsp;</a></span>rtcmem_data</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a> EnigmaIOTNodeClass::rtcmem_data</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Context data to be stored on persistent storage. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00145\">145</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2e3ba13a9f6b1a0e3feb9e6bee17d365\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">&#9670;&nbsp;</a></span>shouldRestart</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::shouldRestart = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Triggers a restart if true. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00162\">162</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0186926009fc565b05f5a2c37dfb3649\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0186926009fc565b05f5a2c37dfb3649\">&#9670;&nbsp;</a></span>sleepRequested</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::sleepRequested = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><code>true</code> means that this node will sleep as soon a message is sent and downlink wait time has passed </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00146\">146</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a358bcf3efcf3a3c08249409852590e91\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a358bcf3efcf3a3c08249409852590e91\">&#9670;&nbsp;</a></span>sleepTime</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint64_t EnigmaIOTNodeClass::sleepTime</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Time in microseconds that this node will be slept between measurements. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00147\">147</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a10d221c32311c32d19d670a68044aca4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a10d221c32311c32d19d670a68044aca4\">&#9670;&nbsp;</a></span>timeSyncPeriod</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">clock_t EnigmaIOTNodeClass::timeSyncPeriod = <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">QUICK_SYNC_TIME</a></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Clock synchronization period. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00160\">160</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"acb396ad8481d5fe7c99227cae4a1f1cf\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acb396ad8481d5fe7c99227cae4a1f1cf\">&#9670;&nbsp;</a></span>useCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTNodeClass::useCounter = true</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><code>true</code> means that data message counter will be used to mark message order </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00144\">144</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"afff6af9384f1f217168473b1df017d78\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afff6af9384f1f217168473b1df017d78\">&#9670;&nbsp;</a></span>wifiManager</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWiFiManager* EnigmaIOTNodeClass::wifiManager</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Wifi configuration portal. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00169\">169</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a></li>\n<li>src/<a class=\"el\" href=\"EnigmaIOTNode_8cpp_source.html\">EnigmaIOTNode.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00067\">EnigmaIOT-Button-Controller.cpp:67</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00061\">EnigmaIOT-Button-Controller.cpp:61</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00157\">EnigmaIOT-Button-Controller.cpp:157</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00101\">EnigmaIOT-Button-Controller.cpp:101</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOT-Button-Controller_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html#l00083\">EnigmaIOT-Button-Controller.cpp:83</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classEnigmaIOTRingBuffer-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTRingBuffer&lt; Telement &gt; Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">buffer</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">empty</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a1c18bc66f575fffc206be22f96fc6a16\">EnigmaIOTRingBuffer</a>(int range)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">front</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374\">isFull</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">pop</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">push</a>(Telement *item)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aba3855eadedeaa091aff67f49bdc2255\">~EnigmaIOTRingBuffer</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classEnigmaIOTRingBuffer.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOTRingBuffer&lt; Telement &gt; Class Template Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classEnigmaIOTRingBuffer-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTRingBuffer&lt; Telement &gt; Class Template Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Ring buffer class. Used to implement message buffer.  \n <a href=\"classEnigmaIOTRingBuffer.html#details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a1c18bc66f575fffc206be22f96fc6a16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a1c18bc66f575fffc206be22f96fc6a16\">EnigmaIOTRingBuffer</a> (int range)</td></tr>\n<tr class=\"memdesc:a1c18bc66f575fffc206be22f96fc6a16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a ring buffer to hold <code>Telement</code> objects.  <a href=\"classEnigmaIOTRingBuffer.html#a1c18bc66f575fffc206be22f96fc6a16\">More...</a><br /></td></tr>\n<tr class=\"separator:a1c18bc66f575fffc206be22f96fc6a16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aba3855eadedeaa091aff67f49bdc2255\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aba3855eadedeaa091aff67f49bdc2255\">~EnigmaIOTRingBuffer</a> ()</td></tr>\n<tr class=\"memdesc:aba3855eadedeaa091aff67f49bdc2255\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\" title=\"Ring buffer class. Used to implement message buffer.\">EnigmaIOTRingBuffer</a> destructor.  <a href=\"classEnigmaIOTRingBuffer.html#aba3855eadedeaa091aff67f49bdc2255\">More...</a><br /></td></tr>\n<tr class=\"separator:aba3855eadedeaa091aff67f49bdc2255\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aacd555a37dc6ff614813f365e0d85419\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> ()</td></tr>\n<tr class=\"memdesc:aacd555a37dc6ff614813f365e0d85419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns actual number of elements that buffer holds.  <a href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">More...</a><br /></td></tr>\n<tr class=\"separator:aacd555a37dc6ff614813f365e0d85419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a95e56ba5a8626aaabb4b17d267e91374\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374\">isFull</a> ()</td></tr>\n<tr class=\"memdesc:a95e56ba5a8626aaabb4b17d267e91374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if buffer is full.  <a href=\"classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374\">More...</a><br /></td></tr>\n<tr class=\"separator:a95e56ba5a8626aaabb4b17d267e91374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4000e36c678d2ae166b3689e5703c7e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">empty</a> ()</td></tr>\n<tr class=\"memdesc:a4000e36c678d2ae166b3689e5703c7e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if buffer is empty.  <a href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">More...</a><br /></td></tr>\n<tr class=\"separator:a4000e36c678d2ae166b3689e5703c7e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0356f7e08a203093ad1c03e27ac18d0a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">push</a> (Telement *item)</td></tr>\n<tr class=\"memdesc:a0356f7e08a203093ad1c03e27ac18d0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Adds a new item to buffer, deleting older element if it is full.  <a href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">More...</a><br /></td></tr>\n<tr class=\"separator:a0356f7e08a203093ad1c03e27ac18d0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab8124d524ffeb47ab53c5435ac2fe4c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">pop</a> ()</td></tr>\n<tr class=\"memdesc:ab8124d524ffeb47ab53c5435ac2fe4c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deletes older item from buffer, if buffer is not empty.  <a href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ab8124d524ffeb47ab53c5435ac2fe4c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3dd72b32f71d5bf46c0c083c3bb9b942\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">Telement *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">front</a> ()</td></tr>\n<tr class=\"memdesc:a3dd72b32f71d5bf46c0c083c3bb9b942\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets a pointer to older item in buffer, if buffer is not empty.  <a href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">More...</a><br /></td></tr>\n<tr class=\"separator:a3dd72b32f71d5bf46c0c083c3bb9b942\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a596c337b97baac1d28f2bd8e71af6eaa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">maxSize</a></td></tr>\n<tr class=\"memdesc:a596c337b97baac1d28f2bd8e71af6eaa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Buffer size.  <a href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">More...</a><br /></td></tr>\n<tr class=\"separator:a596c337b97baac1d28f2bd8e71af6eaa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a312bff8624df2dfa07a823f4e0523237\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">numElements</a> = 0</td></tr>\n<tr class=\"memdesc:a312bff8624df2dfa07a823f4e0523237\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Number of elements that buffer currently has.  <a href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">More...</a><br /></td></tr>\n<tr class=\"separator:a312bff8624df2dfa07a823f4e0523237\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa75d2fb067f7bb4e4e760d776b3a149e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">readIndex</a> = 0</td></tr>\n<tr class=\"memdesc:aa75d2fb067f7bb4e4e760d776b3a149e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to next item to be read.  <a href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">More...</a><br /></td></tr>\n<tr class=\"separator:aa75d2fb067f7bb4e4e760d776b3a149e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af902303fe23e088b2288baeca53706fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">writeIndex</a> = 0</td></tr>\n<tr class=\"memdesc:af902303fe23e088b2288baeca53706fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to next position to write onto.  <a href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">More...</a><br /></td></tr>\n<tr class=\"separator:af902303fe23e088b2288baeca53706fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7f89d738dd736ef5e4858313a93d8359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">Telement *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">buffer</a></td></tr>\n<tr class=\"memdesc:a7f89d738dd736ef5e4858313a93d8359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Actual buffer.  <a href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">More...</a><br /></td></tr>\n<tr class=\"separator:a7f89d738dd736ef5e4858313a93d8359\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><h3>template&lt;typename Telement&gt;<br />\nclass EnigmaIOTRingBuffer&lt; Telement &gt;</h3>\n\n<p>Ring buffer class. Used to implement message buffer. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00024\">24</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"a1c18bc66f575fffc206be22f96fc6a16\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1c18bc66f575fffc206be22f96fc6a16\">&#9670;&nbsp;</a></span>EnigmaIOTRingBuffer()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::<a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a> </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>range</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Creates a ring buffer to hold <code>Telement</code> objects. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">range</td><td>Buffer depth </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00030\">30</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aba3855eadedeaa091aff67f49bdc2255\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aba3855eadedeaa091aff67f49bdc2255\">&#9670;&nbsp;</a></span>~EnigmaIOTRingBuffer()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::~<a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a> </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\" title=\"Ring buffer class. Used to implement message buffer.\">EnigmaIOTRingBuffer</a> destructor. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">range</td><td>Free up buffer memory </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00045\">45</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a4000e36c678d2ae166b3689e5703c7e5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4000e36c678d2ae166b3689e5703c7e5\">&#9670;&nbsp;</a></span>empty()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::empty </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Checks if buffer is empty. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code>if buffer has no elements stored, <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00066\">66</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a3dd72b32f71d5bf46c0c083c3bb9b942\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3dd72b32f71d5bf46c0c083c3bb9b942\">&#9670;&nbsp;</a></span>front()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Telement* <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::front </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets a pointer to older item in buffer, if buffer is not empty. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns pointer to element. If buffer was empty before calling this method it returns <code>NULL</code> </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00125\">125</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a95e56ba5a8626aaabb4b17d267e91374\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a95e56ba5a8626aaabb4b17d267e91374\">&#9670;&nbsp;</a></span>isFull()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::isFull </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Checks if buffer is full. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code>if buffer is full, <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00060\">60</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab8124d524ffeb47ab53c5435ac2fe4c8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab8124d524ffeb47ab53c5435ac2fe4c8\">&#9670;&nbsp;</a></span>pop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::pop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Deletes older item from buffer, if buffer is not empty. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>false</code> if buffer was empty before trying to delete element, <code>true</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00106\">106</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0356f7e08a203093ad1c03e27ac18d0a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0356f7e08a203093ad1c03e27ac18d0a\">&#9670;&nbsp;</a></span>push()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::push </td>\n          <td>(</td>\n          <td class=\"paramtype\">Telement *&#160;</td>\n          <td class=\"paramname\"><em>item</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Adds a new item to buffer, deleting older element if it is full. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">item</td><td>Element to add to buffer </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>false</code> if buffer was full before inserting the new element, <code>true</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00073\">73</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aacd555a37dc6ff614813f365e0d85419\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aacd555a37dc6ff614813f365e0d85419\">&#9670;&nbsp;</a></span>size()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::size </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns actual number of elements that buffer holds. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns Actual number of elements that buffer holds </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00054\">54</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a7f89d738dd736ef5e4858313a93d8359\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7f89d738dd736ef5e4858313a93d8359\">&#9670;&nbsp;</a></span>buffer</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Telement* <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::buffer</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Actual buffer. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00030\">30</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a596c337b97baac1d28f2bd8e71af6eaa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a596c337b97baac1d28f2bd8e71af6eaa\">&#9670;&nbsp;</a></span>maxSize</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::maxSize</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Buffer size. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00026\">26</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a312bff8624df2dfa07a823f4e0523237\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a312bff8624df2dfa07a823f4e0523237\">&#9670;&nbsp;</a></span>numElements</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::numElements = 0</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Number of elements that buffer currently has. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00027\">27</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa75d2fb067f7bb4e4e760d776b3a149e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa75d2fb067f7bb4e4e760d776b3a149e\">&#9670;&nbsp;</a></span>readIndex</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::readIndex = 0</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Pointer to next item to be read. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00028\">28</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af902303fe23e088b2288baeca53706fa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af902303fe23e088b2288baeca53706fa\">&#9670;&nbsp;</a></span>writeIndex</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<div class=\"memtemplate\">\ntemplate&lt;typename Telement &gt; </div>\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; Telement &gt;::writeIndex = 0</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Pointer to next position to write onto. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html#l00029\">29</a> of file <a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>src/<a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classEnigmaIOTjsonController-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTjsonController Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">configManagerExit</a>(bool status)=0</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">configManagerStart</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">connectInform</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">disconnectInform</a>(nodeInvalidateReason_t reason)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">enigmaIotNode</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">loadConfig</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">loop</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">processRxCommand</a>(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)=0</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">saveConfig</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">sendCommandResp</a>(const char *command, bool result)=0</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">sendData</a></td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a>(sendData_cb cb)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a>(DynamicJsonDocument &amp;json)</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">sendStartAnouncement</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">setup</a>(EnigmaIOTNodeClass *node, void *config=NULL)=0</td><td class=\"entry\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classEnigmaIOTjsonController.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOTjsonController Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classEnigmaIOTjsonController-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTjsonController Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for EnigmaIOTjsonController:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classEnigmaIOTjsonController.png\" usemap=\"#EnigmaIOTjsonController_map\" alt=\"\"/>\n  <map id=\"EnigmaIOTjsonController_map\" name=\"EnigmaIOTjsonController_map\">\n<area href=\"classCONTROLLER__CLASS__NAME.html\" alt=\"CONTROLLER_CLASS_NAME\" shape=\"rect\" coords=\"0,56,187,80\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a56e99497e68b8f6f9d31822c4ecaf3ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">setup</a> (<a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *node, void *config=NULL)=0</td></tr>\n<tr class=\"memdesc:a56e99497e68b8f6f9d31822c4ecaf3ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initialize data structures.  <a href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">More...</a><br /></td></tr>\n<tr class=\"separator:a56e99497e68b8f6f9d31822c4ecaf3ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7d1e90a75f4b1b5abd5480d00102debf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">loop</a> ()=0</td></tr>\n<tr class=\"memdesc:a7d1e90a75f4b1b5abd5480d00102debf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This should be called periodically for module handling.  <a href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">More...</a><br /></td></tr>\n<tr class=\"separator:a7d1e90a75f4b1b5abd5480d00102debf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab2f0dacf8b11038d862eb9fa3f1254ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">processRxCommand</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)=0</td></tr>\n<tr class=\"memdesc:ab2f0dacf8b11038d862eb9fa3f1254ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called to process a downlink command.  <a href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ab2f0dacf8b11038d862eb9fa3f1254ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae59a645aaed1e5b550bdc7967c45c170\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">sendDataCallback</a> (sendData_cb cb)</td></tr>\n<tr class=\"memdesc:ae59a645aaed1e5b550bdc7967c45c170\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Register send data callback to run when module needs to send a message.  <a href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">More...</a><br /></td></tr>\n<tr class=\"separator:ae59a645aaed1e5b550bdc7967c45c170\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac9fda7397114e169164bc6ee390f0e2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">connectInform</a> ()</td></tr>\n<tr class=\"memdesc:ac9fda7397114e169164bc6ee390f0e2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to notify controller that it is registered on EnigmaIOT network.  <a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">More...</a><br /></td></tr>\n<tr class=\"separator:ac9fda7397114e169164bc6ee390f0e2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2e1940f901e2ad05701b238374db9c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">disconnectInform</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"memdesc:af2e1940f901e2ad05701b238374db9c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to notify controller that it is unregistered on EnigmaIOT network.  <a href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">More...</a><br /></td></tr>\n<tr class=\"separator:af2e1940f901e2ad05701b238374db9c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9d83f8376a37624a551421a2c8a90c5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">configManagerStart</a> ()=0</td></tr>\n<tr class=\"memdesc:a9d83f8376a37624a551421a2c8a90c5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager starts config portal.  <a href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">More...</a><br /></td></tr>\n<tr class=\"separator:a9d83f8376a37624a551421a2c8a90c5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a844043532561398d54fa45cd7f0cf4ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">configManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)=0</td></tr>\n<tr class=\"memdesc:a844043532561398d54fa45cd7f0cf4ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager exits config portal.  <a href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">More...</a><br /></td></tr>\n<tr class=\"separator:a844043532561398d54fa45cd7f0cf4ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a48bf137d2f77f2167f2c2d56cdf26c10\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">loadConfig</a> ()=0</td></tr>\n<tr class=\"memdesc:a48bf137d2f77f2167f2c2d56cdf26c10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads output module configuration.  <a href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">More...</a><br /></td></tr>\n<tr class=\"separator:a48bf137d2f77f2167f2c2d56cdf26c10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:acfcc6e0243941ac00830f848cc8315eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">sendCommandResp</a> (const char *command, bool result)=0</td></tr>\n<tr class=\"memdesc:acfcc6e0243941ac00830f848cc8315eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends command processing response acknowledge.  <a href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">More...</a><br /></td></tr>\n<tr class=\"separator:acfcc6e0243941ac00830f848cc8315eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8156ca47dce60feaff56f2b819a87c58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">sendStartAnouncement</a> ()=0</td></tr>\n<tr class=\"memdesc:a8156ca47dce60feaff56f2b819a87c58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send a message to notify node has started running.  <a href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">More...</a><br /></td></tr>\n<tr class=\"separator:a8156ca47dce60feaff56f2b819a87c58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a83069acbd6d2b8c1c9b36974fdb35b1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">saveConfig</a> ()=0</td></tr>\n<tr class=\"memdesc:a83069acbd6d2b8c1c9b36974fdb35b1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves output module configuration.  <a href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">More...</a><br /></td></tr>\n<tr class=\"separator:a83069acbd6d2b8c1c9b36974fdb35b1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae5ece1c030d9063e46127b8a48b7bfa9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a> (DynamicJsonDocument &amp;json)</td></tr>\n<tr class=\"memdesc:ae5ece1c030d9063e46127b8a48b7bfa9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends a JSON encoded message to lower layer.  <a href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">More...</a><br /></td></tr>\n<tr class=\"separator:ae5ece1c030d9063e46127b8a48b7bfa9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a13b9adbb1aaab6ec87042889289e701d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">sendData_cb&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">sendData</a></td></tr>\n<tr class=\"separator:a13b9adbb1aaab6ec87042889289e701d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a661a7d9fe760c19b6992aba5b4978cde\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">enigmaIotNode</a></td></tr>\n<tr class=\"separator:a661a7d9fe760c19b6992aba5b4978cde\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html#l00034\">34</a> of file <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a844043532561398d54fa45cd7f0cf4ed\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a844043532561398d54fa45cd7f0cf4ed\">&#9670;&nbsp;</a></span>configManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void EnigmaIOTjsonController::configManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager exits config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><code>true</code> if configuration was successful </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implemented in <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME</a>, and <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME</a>.</p>\n\n</div>\n</div>\n<a id=\"a9d83f8376a37624a551421a2c8a90c5f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9d83f8376a37624a551421a2c8a90c5f\">&#9670;&nbsp;</a></span>configManagerStart()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void EnigmaIOTjsonController::configManagerStart </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager starts config portal. </p>\n\n<p>Implemented in <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME</a>, and <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME</a>.</p>\n\n</div>\n</div>\n<a id=\"ac9fda7397114e169164bc6ee390f0e2d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac9fda7397114e169164bc6ee390f0e2d\">&#9670;&nbsp;</a></span>connectInform()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void EnigmaIOTjsonController::connectInform </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Used to notify controller that it is registered on EnigmaIOT network. </p>\n\n<p>Reimplemented in <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME</a>, and <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html#l00081\">81</a> of file <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af2e1940f901e2ad05701b238374db9c0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af2e1940f901e2ad05701b238374db9c0\">&#9670;&nbsp;</a></span>disconnectInform()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void EnigmaIOTjsonController::disconnectInform </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Used to notify controller that it is unregistered on EnigmaIOT network. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html#l00097\">97</a> of file <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a48bf137d2f77f2167f2c2d56cdf26c10\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a48bf137d2f77f2167f2c2d56cdf26c10\">&#9670;&nbsp;</a></span>loadConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool EnigmaIOTjsonController::loadConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if load was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">CONTROLLER_CLASS_NAME</a>, and <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">CONTROLLER_CLASS_NAME</a>.</p>\n\n</div>\n</div>\n<a id=\"a7d1e90a75f4b1b5abd5480d00102debf\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7d1e90a75f4b1b5abd5480d00102debf\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void EnigmaIOTjsonController::loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>This should be called periodically for module handling. </p>\n\n<p>Implemented in <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">CONTROLLER_CLASS_NAME</a>, and <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">CONTROLLER_CLASS_NAME</a>.</p>\n\n</div>\n</div>\n<a id=\"ab2f0dacf8b11038d862eb9fa3f1254ca\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab2f0dacf8b11038d862eb9fa3f1254ca\">&#9670;&nbsp;</a></span>processRxCommand()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool EnigmaIOTjsonController::processRxCommand </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called to process a downlink command. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address of sender </td></tr>\n    <tr><td class=\"paramname\">buffer</td><td>Message bytes </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Message length </td></tr>\n    <tr><td class=\"paramname\">command</td><td>Type of command. nodeMessageType_t </td></tr>\n    <tr><td class=\"paramname\">payloadEncoding</td><td>Payload encoding of type nodePayloadEncoding_t </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> on success </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME</a>, and <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME</a>.</p>\n\n</div>\n</div>\n<a id=\"a83069acbd6d2b8c1c9b36974fdb35b1e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a83069acbd6d2b8c1c9b36974fdb35b1e\">&#9670;&nbsp;</a></span>saveConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool EnigmaIOTjsonController::saveConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if save was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">CONTROLLER_CLASS_NAME</a>, and <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">CONTROLLER_CLASS_NAME</a>.</p>\n\n</div>\n</div>\n<a id=\"acfcc6e0243941ac00830f848cc8315eb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acfcc6e0243941ac00830f848cc8315eb\">&#9670;&nbsp;</a></span>sendCommandResp()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool EnigmaIOTjsonController::sendCommandResp </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>result</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends command processing response acknowledge. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">command</td><td>Command name </td></tr>\n    <tr><td class=\"paramname\">result</td><td>Command execution success </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">CONTROLLER_CLASS_NAME</a>, and <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">CONTROLLER_CLASS_NAME</a>.</p>\n\n</div>\n</div>\n<a id=\"ae59a645aaed1e5b550bdc7967c45c170\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae59a645aaed1e5b550bdc7967c45c170\">&#9670;&nbsp;</a></span>sendDataCallback()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void EnigmaIOTjsonController::sendDataCallback </td>\n          <td>(</td>\n          <td class=\"paramtype\">sendData_cb&#160;</td>\n          <td class=\"paramname\"><em>cb</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Register send data callback to run when module needs to send a message. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">cb</td><td>Callback with sendData_cb format </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html#l00074\">74</a> of file <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae5ece1c030d9063e46127b8a48b7bfa9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae5ece1c030d9063e46127b8a48b7bfa9\">&#9670;&nbsp;</a></span>sendJson()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIOTjsonController::sendJson </td>\n          <td>(</td>\n          <td class=\"paramtype\">DynamicJsonDocument &amp;&#160;</td>\n          <td class=\"paramname\"><em>json</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends a JSON encoded message to lower layer. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html#l00170\">170</a> of file <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8156ca47dce60feaff56f2b819a87c58\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8156ca47dce60feaff56f2b819a87c58\">&#9670;&nbsp;</a></span>sendStartAnouncement()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool EnigmaIOTjsonController::sendStartAnouncement </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send a message to notify node has started running. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if message sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">CONTROLLER_CLASS_NAME</a>, and <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">CONTROLLER_CLASS_NAME</a>.</p>\n\n</div>\n</div>\n<a id=\"a56e99497e68b8f6f9d31822c4ecaf3ea\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a56e99497e68b8f6f9d31822c4ecaf3ea\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void EnigmaIOTjsonController::setup </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>config</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Initialize data structures. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to EnigmaIOT node instance </td></tr>\n    <tr><td class=\"paramname\">config</td><td>Pointer to configuration structure. If it is <code>NULL</code> then it tries to load configuration from flash </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implemented in <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME</a>, <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME</a>, and <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a661a7d9fe760c19b6992aba5b4978cde\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a661a7d9fe760c19b6992aba5b4978cde\">&#9670;&nbsp;</a></span>enigmaIotNode</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* EnigmaIOTjsonController::enigmaIotNode</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html#l00037\">37</a> of file <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a13b9adbb1aaab6ec87042889289e701d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a13b9adbb1aaab6ec87042889289e701d\">&#9670;&nbsp;</a></span>sendData</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">sendData_cb EnigmaIOTjsonController::sendData</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html#l00036\">36</a> of file <a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>src/<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classEspnow__halClass-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Espnow_halClass Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">_ownPeerType</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">addPeer</a>(const uint8_t *da)</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">begin</a>(uint8_t *gateway, uint8_t channel=0, peerType_t peerType=COMM_NODE) override</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">COMMS_HAL_ADDR_LEN</a></td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635\">COMMS_HAL_MAX_MESSAGE_LENGTH</a></td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac\">Comms_halClass</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f\">enableTransmit</a>(bool enable) override</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#ae9def9fb9d9e8370e70e77367900669f\">Espnow_halClass</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a></td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d\">getAddressLength</a>() override</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5\">getCommsQueue</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a3a037c0d31f906bc24a8475b376072fd\">getMaxMessageLength</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">handle</a>() override</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">initComms</a>(peerType_t peerType) override</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">onDataRcvd</a>(comms_hal_rcvd_data dataRcvd) override</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">onDataSent</a>(comms_hal_sent_data dataRcvd) override</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a></td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1\">popCommsQueue</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">readyToSend</a></td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">runHandle</a>(void *param)</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">rx_cb</a>(uint8_t *mac_addr, uint8_t *data, uint8_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">send</a>(uint8_t *da, uint8_t *data, int len) override</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297\">sendEspNowMessage</a>(comms_queue_item_t *message)</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">sentResult</a></td><td class=\"entry\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">stop</a>() override</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">tx_cb</a>(uint8_t *mac_addr, uint8_t status)</td><td class=\"entry\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classEspnow__halClass.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Espnow_halClass Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pub-static-attribs\">Static Public Attributes</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-static-methods\">Static Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classEspnow__halClass-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Espnow_halClass Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Definition for ESP-NOW hardware abstraction layer.  \n <a href=\"classEspnow__halClass.html#details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for Espnow_halClass:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classEspnow__halClass.png\" usemap=\"#Espnow_5FhalClass_map\" alt=\"\"/>\n  <map id=\"Espnow_5FhalClass_map\" name=\"Espnow_5FhalClass_map\">\n<area href=\"classComms__halClass.html\" title=\"Interface for communication subsystem abstraction layer definition.\" alt=\"Comms_halClass\" shape=\"rect\" coords=\"0,0,111,24\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ae9def9fb9d9e8370e70e77367900669f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#ae9def9fb9d9e8370e70e77367900669f\">Espnow_halClass</a> ()</td></tr>\n<tr class=\"memdesc:ae9def9fb9d9e8370e70e77367900669f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Class constructor.  <a href=\"classEspnow__halClass.html#ae9def9fb9d9e8370e70e77367900669f\">More...</a><br /></td></tr>\n<tr class=\"separator:ae9def9fb9d9e8370e70e77367900669f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa1c3a507c1615699d4f730c77dc52b50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">begin</a> (uint8_t *<a class=\"el\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a>, uint8_t <a class=\"el\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a>=0, <a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> peerType=<a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a>) override</td></tr>\n<tr class=\"memdesc:aa1c3a507c1615699d4f730c77dc52b50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Setup communication environment and establish the connection from node to gateway.  <a href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">More...</a><br /></td></tr>\n<tr class=\"separator:aa1c3a507c1615699d4f730c77dc52b50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad1b11d3ca5e85c95d13000acab74bff3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">stop</a> () override</td></tr>\n<tr class=\"memdesc:ad1b11d3ca5e85c95d13000acab74bff3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Terminates communication and closes all connectrions.  <a href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">More...</a><br /></td></tr>\n<tr class=\"separator:ad1b11d3ca5e85c95d13000acab74bff3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1e0d23a1dedf362fc1f451c7272bff2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">send</a> (uint8_t *da, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, int len) override</td></tr>\n<tr class=\"memdesc:a1e0d23a1dedf362fc1f451c7272bff2b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends data to the other peer.  <a href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">More...</a><br /></td></tr>\n<tr class=\"separator:a1e0d23a1dedf362fc1f451c7272bff2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6b28bd22a237920c95ee9cf3f9a5ca77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">onDataRcvd</a> (<a class=\"el\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a> <a class=\"el\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a>) override</td></tr>\n<tr class=\"memdesc:a6b28bd22a237920c95ee9cf3f9a5ca77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Attach a callback function to be run on every received message.  <a href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">More...</a><br /></td></tr>\n<tr class=\"separator:a6b28bd22a237920c95ee9cf3f9a5ca77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6104d185737252c0e86476d6eca6a62b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">onDataSent</a> (<a class=\"el\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a> <a class=\"el\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a>) override</td></tr>\n<tr class=\"memdesc:a6104d185737252c0e86476d6eca6a62b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Attach a callback function to be run after sending a message to receive its status.  <a href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">More...</a><br /></td></tr>\n<tr class=\"separator:a6104d185737252c0e86476d6eca6a62b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac04ab12d0b5e52948d123f226ab1101d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d\">getAddressLength</a> () override</td></tr>\n<tr class=\"memdesc:ac04ab12d0b5e52948d123f226ab1101d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get address length used on ESP-NOW subsystem.  <a href=\"classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d\">More...</a><br /></td></tr>\n<tr class=\"separator:ac04ab12d0b5e52948d123f226ab1101d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3a037c0d31f906bc24a8475b376072fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a3a037c0d31f906bc24a8475b376072fd\">getMaxMessageLength</a> ()</td></tr>\n<tr class=\"memdesc:a3a037c0d31f906bc24a8475b376072fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get maximum message length on ESP-NOW subsystem.  <a href=\"classEspnow__halClass.html#a3a037c0d31f906bc24a8475b376072fd\">More...</a><br /></td></tr>\n<tr class=\"separator:a3a037c0d31f906bc24a8475b376072fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91c6aaf2781c9e141641fe4a4b92115f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f\">enableTransmit</a> (bool enable) override</td></tr>\n<tr class=\"memdesc:a91c6aaf2781c9e141641fe4a4b92115f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enables or disables transmission of queued messages. Used to disable communication during wifi scan.  <a href=\"classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f\">More...</a><br /></td></tr>\n<tr class=\"separator:a91c6aaf2781c9e141641fe4a4b92115f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa332cba65f82a6e14af3ca5ef59732e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">handle</a> () override</td></tr>\n<tr class=\"memdesc:aa332cba65f82a6e14af3ca5ef59732e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends next message in the queue.  <a href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">More...</a><br /></td></tr>\n<tr class=\"separator:aa332cba65f82a6e14af3ca5ef59732e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_classComms__halClass\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_classComms__halClass')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td></tr>\n<tr class=\"memitem:a38e3e9572cead89962b66c2634a9e2ac inherit pub_methods_classComms__halClass\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac\">Comms_halClass</a> ()</td></tr>\n<tr class=\"separator:a38e3e9572cead89962b66c2634a9e2ac inherit pub_methods_classComms__halClass\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a26ff39763f910380506fef4238eb2d52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">runHandle</a> (void *param)</td></tr>\n<tr class=\"memdesc:a26ff39763f910380506fef4238eb2d52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Static function that calls handle inside task.  <a href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">More...</a><br /></td></tr>\n<tr class=\"separator:a26ff39763f910380506fef4238eb2d52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-attribs\"></a>\nStatic Public Attributes</h2></td></tr>\n<tr class=\"memitem:ab67eb381c0a4278b5af0235cb1aec635\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635\">COMMS_HAL_MAX_MESSAGE_LENGTH</a> = 250</td></tr>\n<tr class=\"memdesc:ab67eb381c0a4278b5af0235cb1aec635\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum message length for ESP-NOW.  <a href=\"classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635\">More...</a><br /></td></tr>\n<tr class=\"separator:ab67eb381c0a4278b5af0235cb1aec635\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a024a232658955ce9d3cc2b41106ffd72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">COMMS_HAL_ADDR_LEN</a> = 6</td></tr>\n<tr class=\"memdesc:a024a232658955ce9d3cc2b41106ffd72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Address length for ESP-NOW. Correspond to mac address.  <a href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">More...</a><br /></td></tr>\n<tr class=\"separator:a024a232658955ce9d3cc2b41106ffd72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_static_attribs_classComms__halClass\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_static_attribs_classComms__halClass')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Static Public Attributes inherited from <a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td></tr>\n<tr class=\"memitem:a3a0a66fe2fadc4a71dc2ac8eb7573316 inherit pub_static_attribs_classComms__halClass\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316\">COMMS_HAL_MAX_MESSAGE_LENGTH</a> = 0</td></tr>\n<tr class=\"memdesc:a3a0a66fe2fadc4a71dc2ac8eb7573316 inherit pub_static_attribs_classComms__halClass\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum message length.  <a href=\"classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316\">More...</a><br /></td></tr>\n<tr class=\"separator:a3a0a66fe2fadc4a71dc2ac8eb7573316 inherit pub_static_attribs_classComms__halClass\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6d372da9bf4d1d00c5445b26ef7d0f0b inherit pub_static_attribs_classComms__halClass\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">COMMS_HAL_ADDR_LEN</a> = 1</td></tr>\n<tr class=\"memdesc:a6d372da9bf4d1d00c5445b26ef7d0f0b inherit pub_static_attribs_classComms__halClass\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Address length.  <a href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">More...</a><br /></td></tr>\n<tr class=\"separator:a6d372da9bf4d1d00c5445b26ef7d0f0b inherit pub_static_attribs_classComms__halClass\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a47f4ee9859b73356a27f6baaa2f009c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">initComms</a> (<a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> peerType) override</td></tr>\n<tr class=\"memdesc:a47f4ee9859b73356a27f6baaa2f009c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Communication subsistem initialization.  <a href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">More...</a><br /></td></tr>\n<tr class=\"separator:a47f4ee9859b73356a27f6baaa2f009c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa7c4c848bc0fc5b4f93f9b02dd10d986\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">addPeer</a> (const uint8_t *da)</td></tr>\n<tr class=\"memdesc:aa7c4c848bc0fc5b4f93f9b02dd10d986\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Adds a peer to esp-now peer list.  <a href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">More...</a><br /></td></tr>\n<tr class=\"separator:aa7c4c848bc0fc5b4f93f9b02dd10d986\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaae5f86d25fa7b47a4e5799a79ab1297\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297\">sendEspNowMessage</a> (<a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a> *message)</td></tr>\n<tr class=\"separator:aaae5f86d25fa7b47a4e5799a79ab1297\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a627f205073fdf1c3fa3fbb2fae73c5e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5\">getCommsQueue</a> ()</td></tr>\n<tr class=\"separator:a627f205073fdf1c3fa3fbb2fae73c5e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ace124e6371edc5af949f74726566b5e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1\">popCommsQueue</a> ()</td></tr>\n<tr class=\"separator:ace124e6371edc5af949f74726566b5e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-methods\"></a>\nStatic Protected Member Functions</h2></td></tr>\n<tr class=\"memitem:a76ccfc10740955584c2fab3bc6182c47\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void ICACHE_FLASH_ATTR&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">rx_cb</a> (uint8_t *mac_addr, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len)</td></tr>\n<tr class=\"memdesc:a76ccfc10740955584c2fab3bc6182c47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function that processes incoming messages and passes them to upper layer.  <a href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">More...</a><br /></td></tr>\n<tr class=\"separator:a76ccfc10740955584c2fab3bc6182c47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5d5442d3095c57dee6ba5bc05691f587\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void ICACHE_FLASH_ATTR&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">tx_cb</a> (uint8_t *mac_addr, uint8_t <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a5d5442d3095c57dee6ba5bc05691f587\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function that gets sending status.  <a href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">More...</a><br /></td></tr>\n<tr class=\"separator:a5d5442d3095c57dee6ba5bc05691f587\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a4fdb484427e4128d2776a0b9eb2efe92\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; <a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a></td></tr>\n<tr class=\"separator:a4fdb484427e4128d2776a0b9eb2efe92\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa9e4fa0f5c87ca341c3aad233582d960\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">readyToSend</a> = true</td></tr>\n<tr class=\"separator:aa9e4fa0f5c87ca341c3aad233582d960\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a645c4710e2422b8b263438e518dc5da8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">ETSTimer&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a></td></tr>\n<tr class=\"separator:a645c4710e2422b8b263438e518dc5da8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_classComms__halClass\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_classComms__halClass')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a></td></tr>\n<tr class=\"memitem:ac35585ecbc8e936d9f35d32b56164b8e inherit pro_attribs_classComms__halClass\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a> [<a class=\"el\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">COMMS_HAL_ADDR_LEN</a>]</td></tr>\n<tr class=\"memdesc:ac35585ecbc8e936d9f35d32b56164b8e inherit pro_attribs_classComms__halClass\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gateway address.  <a href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">More...</a><br /></td></tr>\n<tr class=\"separator:ac35585ecbc8e936d9f35d32b56164b8e inherit pro_attribs_classComms__halClass\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac495fb3d9e576bb2717c1f43197b458e inherit pro_attribs_classComms__halClass\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a></td></tr>\n<tr class=\"memdesc:ac495fb3d9e576bb2717c1f43197b458e inherit pro_attribs_classComms__halClass\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Comms channel to be used.  <a href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">More...</a><br /></td></tr>\n<tr class=\"separator:ac495fb3d9e576bb2717c1f43197b458e inherit pro_attribs_classComms__halClass\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5bbed119e5e361b9be85a33404cf2e83 inherit pro_attribs_classComms__halClass\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a> = 0</td></tr>\n<tr class=\"memdesc:a5bbed119e5e361b9be85a33404cf2e83 inherit pro_attribs_classComms__halClass\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to a function to be called on every received message.  <a href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">More...</a><br /></td></tr>\n<tr class=\"separator:a5bbed119e5e361b9be85a33404cf2e83 inherit pro_attribs_classComms__halClass\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3fb9182d9e9b0729d8798c43f133a130 inherit pro_attribs_classComms__halClass\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">sentResult</a> = 0</td></tr>\n<tr class=\"memdesc:a3fb9182d9e9b0729d8798c43f133a130 inherit pro_attribs_classComms__halClass\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to a function to be called to notify last sending status.  <a href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">More...</a><br /></td></tr>\n<tr class=\"separator:a3fb9182d9e9b0729d8798c43f133a130 inherit pro_attribs_classComms__halClass\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6472373c178c2e77f4fc50eafaedc0ab inherit pro_attribs_classComms__halClass\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">_ownPeerType</a></td></tr>\n<tr class=\"memdesc:a6472373c178c2e77f4fc50eafaedc0ab inherit pro_attribs_classComms__halClass\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Stores peer type, node or gateway.  <a href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">More...</a><br /></td></tr>\n<tr class=\"separator:a6472373c178c2e77f4fc50eafaedc0ab inherit pro_attribs_classComms__halClass\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Definition for ESP-NOW hardware abstraction layer. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8h_source.html#l00031\">31</a> of file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"ae9def9fb9d9e8370e70e77367900669f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae9def9fb9d9e8370e70e77367900669f\">&#9670;&nbsp;</a></span>Espnow_halClass()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Espnow_halClass::Espnow_halClass </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Class constructor. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8h_source.html#l00081\">81</a> of file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"aa7c4c848bc0fc5b4f93f9b02dd10d986\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa7c4c848bc0fc5b4f93f9b02dd10d986\">&#9670;&nbsp;</a></span>addPeer()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Espnow_halClass::addPeer </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>da</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Adds a peer to esp-now peer list. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">da</td><td>Peer address to be added to peer list </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00093\">93</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa1c3a507c1615699d4f730c77dc52b50\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa1c3a507c1615699d4f730c77dc52b50\">&#9670;&nbsp;</a></span>begin()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Espnow_halClass::begin </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>gateway</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>channel</em> = <code>0</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>peerType</em> = <code><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Setup communication environment and establish the connection from node to gateway. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">gateway</td><td>Address of gateway. It may be <code>NULL</code> in case this is used in the own gateway </td></tr>\n    <tr><td class=\"paramname\">channel</td><td>Establishes a channel for the communication. Its use depends on actual communications subsystem </td></tr>\n    <tr><td class=\"paramname\">peerType</td><td>Role that peer plays into the system, sensor node or gateway. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">Comms_halClass</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00078\">78</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a91c6aaf2781c9e141641fe4a4b92115f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a91c6aaf2781c9e141641fe4a4b92115f\">&#9670;&nbsp;</a></span>enableTransmit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Espnow_halClass::enableTransmit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>enable</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Enables or disables transmission of queued messages. Used to disable communication during wifi scan. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">enable</td><td><code>true</code> to enable transmission, <code>false</code> to disable it </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">Comms_halClass</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8h_source.html#l00139\">139</a> of file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac04ab12d0b5e52948d123f226ab1101d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac04ab12d0b5e52948d123f226ab1101d\">&#9670;&nbsp;</a></span>getAddressLength()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t Espnow_halClass::getAddressLength </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Get address length used on ESP-NOW subsystem. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Always returns the sice of 802.11 MAC address, equals to 6 </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">Comms_halClass</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8h_source.html#l00123\">123</a> of file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a627f205073fdf1c3fa3fbb2fae73c5e5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a627f205073fdf1c3fa3fbb2fae73c5e5\">&#9670;&nbsp;</a></span>getCommsQueue()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a> * Espnow_halClass::getCommsQueue </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00152\">152</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a3a037c0d31f906bc24a8475b376072fd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3a037c0d31f906bc24a8475b376072fd\">&#9670;&nbsp;</a></span>getMaxMessageLength()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t Espnow_halClass::getMaxMessageLength </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Get maximum message length on ESP-NOW subsystem. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Always returns a value equal to 250 </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8h_source.html#l00131\">131</a> of file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa332cba65f82a6e14af3ca5ef59732e9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa332cba65f82a6e14af3ca5ef59732e9\">&#9670;&nbsp;</a></span>handle()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Espnow_halClass::handle </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends next message in the queue. </p>\n\n<p>Implements <a class=\"el\" href=\"classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04\">Comms_halClass</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00212\">212</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a47f4ee9859b73356a27f6baaa2f009c9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a47f4ee9859b73356a27f6baaa2f009c9\">&#9670;&nbsp;</a></span>initComms()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Espnow_halClass::initComms </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>peerType</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Communication subsistem initialization. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">peerType</td><td>Role that peer plays into the system, sensor node or gateway. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classComms__halClass.html#a67d74c717b8f3919307738be9d963312\">Comms_halClass</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00024\">24</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6b28bd22a237920c95ee9cf3f9a5ca77\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6b28bd22a237920c95ee9cf3f9a5ca77\">&#9670;&nbsp;</a></span>onDataRcvd()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Espnow_halClass::onDataRcvd </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a>&#160;</td>\n          <td class=\"paramname\"><em>dataRcvd</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Attach a callback function to be run on every received message. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">dataRcvd</td><td>Pointer to the callback function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">Comms_halClass</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00204\">204</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6104d185737252c0e86476d6eca6a62b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6104d185737252c0e86476d6eca6a62b\">&#9670;&nbsp;</a></span>onDataSent()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Espnow_halClass::onDataSent </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a>&#160;</td>\n          <td class=\"paramname\"><em>dataRcvd</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Attach a callback function to be run after sending a message to receive its status. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">dataRcvd</td><td>Pointer to the callback function </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">Comms_halClass</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00208\">208</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ace124e6371edc5af949f74726566b5e1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ace124e6371edc5af949f74726566b5e1\">&#9670;&nbsp;</a></span>popCommsQueue()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Espnow_halClass::popCommsQueue </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00160\">160</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a26ff39763f910380506fef4238eb2d52\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a26ff39763f910380506fef4238eb2d52\">&#9670;&nbsp;</a></span>runHandle()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Espnow_halClass::runHandle </td>\n          <td>(</td>\n          <td class=\"paramtype\">void *&#160;</td>\n          <td class=\"paramname\"><em>param</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Static function that calls handle inside task. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00230\">230</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a76ccfc10740955584c2fab3bc6182c47\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a76ccfc10740955584c2fab3bc6182c47\">&#9670;&nbsp;</a></span>rx_cb()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void ICACHE_FLASH_ATTR Espnow_halClass::rx_cb </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac_addr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function that processes incoming messages and passes them to upper layer. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac_addr</td><td>Destination address to send the message to </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Data buffer that contain the message to be sent </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Data length in number of bytes </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00064\">64</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a1e0d23a1dedf362fc1f451c7272bff2b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1e0d23a1dedf362fc1f451c7272bff2b\">&#9670;&nbsp;</a></span>send()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int32_t Espnow_halClass::send </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>da</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends data to the other peer. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">da</td><td>Destination address to send the message to </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Data buffer that contain the message to be sent </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Data length in number of bytes </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns sending status. 0 for success, 1 to indicate an error. </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">Comms_halClass</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00122\">122</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aaae5f86d25fa7b47a4e5799a79ab1297\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aaae5f86d25fa7b47a4e5799a79ab1297\">&#9670;&nbsp;</a></span>sendEspNowMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int32_t Espnow_halClass::sendEspNowMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a> *&#160;</td>\n          <td class=\"paramname\"><em>message</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00173\">173</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad1b11d3ca5e85c95d13000acab74bff3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad1b11d3ca5e85c95d13000acab74bff3\">&#9670;&nbsp;</a></span>stop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Espnow_halClass::stop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">override</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Terminates communication and closes all connectrions. </p>\n\n<p>Implements <a class=\"el\" href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">Comms_halClass</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00115\">115</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5d5442d3095c57dee6ba5bc05691f587\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5d5442d3095c57dee6ba5bc05691f587\">&#9670;&nbsp;</a></span>tx_cb()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void ICACHE_FLASH_ATTR Espnow_halClass::tx_cb </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac_addr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>status</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function that gets sending status. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac_addr</td><td>Destination address to send the message to </td></tr>\n    <tr><td class=\"paramname\">status</td><td>Sending status </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00070\">70</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a024a232658955ce9d3cc2b41106ffd72\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a024a232658955ce9d3cc2b41106ffd72\">&#9670;&nbsp;</a></span>COMMS_HAL_ADDR_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t Espnow_halClass::COMMS_HAL_ADDR_LEN = 6</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Address length for ESP-NOW. Correspond to mac address. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8h_source.html#l00034\">34</a> of file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab67eb381c0a4278b5af0235cb1aec635\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab67eb381c0a4278b5af0235cb1aec635\">&#9670;&nbsp;</a></span>COMMS_HAL_MAX_MESSAGE_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const size_t Espnow_halClass::COMMS_HAL_MAX_MESSAGE_LENGTH = 250</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Maximum message length for ESP-NOW. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8h_source.html#l00033\">33</a> of file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a645c4710e2422b8b263438e518dc5da8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a645c4710e2422b8b263438e518dc5da8\">&#9670;&nbsp;</a></span>espnowLoopTask</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">ETSTimer Espnow_halClass::espnowLoopTask</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8h_source.html#l00043\">43</a> of file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fdb484427e4128d2776a0b9eb2efe92\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fdb484427e4128d2776a0b9eb2efe92\">&#9670;&nbsp;</a></span>out_queue</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt;<a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a>&gt; Espnow_halClass::out_queue</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8h_source.html#l00038\">38</a> of file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa9e4fa0f5c87ca341c3aad233582d960\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa9e4fa0f5c87ca341c3aad233582d960\">&#9670;&nbsp;</a></span>readyToSend</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Espnow_halClass::readyToSend = true</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8h_source.html#l00039\">39</a> of file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a></li>\n<li>src/<a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classFilterClass-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">FilterClass Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classFilterClass.html\">FilterClass</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">_filterType</a></td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a></td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a></td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a></td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a></td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a></td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">addValue</a>(float value)</td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">addWeigth</a>(float coeff)</td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">aveFilter</a>(float value)</td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">clear</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">divide</a>(float *array, int start, int end)</td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd\">FilterClass</a>(FilterType_t type, uint8_t order)</td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">medianFilter</a>(float value)</td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">quicksort</a>(float *array, int start, int end)</td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619\">~FilterClass</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classFilterClass.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: FilterClass Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classFilterClass-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">FilterClass Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a84d72a35e083c33a5acad7d05c553dcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd\">FilterClass</a> (<a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a> type, uint8_t order)</td></tr>\n<tr class=\"memdesc:a84d72a35e083c33a5acad7d05c553dcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a new filter class.  <a href=\"classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd\">More...</a><br /></td></tr>\n<tr class=\"separator:a84d72a35e083c33a5acad7d05c553dcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2236fab04bae686f3a30006ab0259c4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">addWeigth</a> (float coeff)</td></tr>\n<tr class=\"memdesc:a2236fab04bae686f3a30006ab0259c4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Adds a new weighting value. It is pushed on the array so latest value will be used for older data.  <a href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">More...</a><br /></td></tr>\n<tr class=\"separator:a2236fab04bae686f3a30006ab0259c4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa6e318ba33cab0094c7b6528e3e50337\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">addValue</a> (float value)</td></tr>\n<tr class=\"memdesc:aa6e318ba33cab0094c7b6528e3e50337\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pushes a new value for calculation. Until the buffer is filled up to filter order, only first valid values are used in calculation.  <a href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">More...</a><br /></td></tr>\n<tr class=\"separator:aa6e318ba33cab0094c7b6528e3e50337\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a29933bc3e2094170afd380cee3763d95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">clear</a> ()</td></tr>\n<tr class=\"memdesc:a29933bc3e2094170afd380cee3763d95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Resets state of the filter to an initial value.  <a href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">More...</a><br /></td></tr>\n<tr class=\"separator:a29933bc3e2094170afd380cee3763d95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5706c0daaecd8f616630dc9aac4eb619\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619\">~FilterClass</a> ()</td></tr>\n<tr class=\"memdesc:a5706c0daaecd8f616630dc9aac4eb619\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Frees up dynamic memory.  <a href=\"classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619\">More...</a><br /></td></tr>\n<tr class=\"separator:a5706c0daaecd8f616630dc9aac4eb619\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a8571bc0e05f848a4372c3b40f7598a78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">aveFilter</a> (float value)</td></tr>\n<tr class=\"memdesc:a8571bc0e05f848a4372c3b40f7598a78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Average filter calculation of next value.  <a href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">More...</a><br /></td></tr>\n<tr class=\"separator:a8571bc0e05f848a4372c3b40f7598a78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a99497784c6f8a22e89c19200132797b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">divide</a> (float *array, int start, int end)</td></tr>\n<tr class=\"memdesc:a99497784c6f8a22e89c19200132797b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Divide function to be used on Quick Sort.  <a href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">More...</a><br /></td></tr>\n<tr class=\"separator:a99497784c6f8a22e89c19200132797b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af7fa09578d556d8289807f25faf148f7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">quicksort</a> (float *array, int start, int end)</td></tr>\n<tr class=\"memdesc:af7fa09578d556d8289807f25faf148f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sorting function that uses QuickSort algorythm.  <a href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">More...</a><br /></td></tr>\n<tr class=\"separator:af7fa09578d556d8289807f25faf148f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acad3de8f5f8b3565168ef3850eaf528d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">medianFilter</a> (float value)</td></tr>\n<tr class=\"memdesc:acad3de8f5f8b3565168ef3850eaf528d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Median filter calculation of next value.  <a href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">More...</a><br /></td></tr>\n<tr class=\"separator:acad3de8f5f8b3565168ef3850eaf528d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a3d19e1f2d25502aefed9fa272e2b576b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">_filterType</a></td></tr>\n<tr class=\"memdesc:a3d19e1f2d25502aefed9fa272e2b576b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Filter type from FilterType_t.  <a href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">More...</a><br /></td></tr>\n<tr class=\"separator:a3d19e1f2d25502aefed9fa272e2b576b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a82e30fcd22d7d4d4815124e63a4902e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">_order</a></td></tr>\n<tr class=\"memdesc:a82e30fcd22d7d4d4815124e63a4902e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Filter order. Numbre of samples to store for calculations.  <a href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">More...</a><br /></td></tr>\n<tr class=\"separator:a82e30fcd22d7d4d4815124e63a4902e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a50254c631b3e05583890f63c6f0149bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">float *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">_rawValues</a></td></tr>\n<tr class=\"memdesc:a50254c631b3e05583890f63c6f0149bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Raw values store.  <a href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">More...</a><br /></td></tr>\n<tr class=\"separator:a50254c631b3e05583890f63c6f0149bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4b639a7fc53bdd0f1a82c41208414180\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">float *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">_orderedValues</a></td></tr>\n<tr class=\"memdesc:a4b639a7fc53bdd0f1a82c41208414180\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Values ordered for median calculation.  <a href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">More...</a><br /></td></tr>\n<tr class=\"separator:a4b639a7fc53bdd0f1a82c41208414180\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1522216f9bbb9a5f7813809cb3a79ac7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">float *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">_weightValues</a></td></tr>\n<tr class=\"memdesc:a1522216f9bbb9a5f7813809cb3a79ac7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Weight values for average calculation. By default all them have value of 1 for arithmetic average.  <a href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">More...</a><br /></td></tr>\n<tr class=\"separator:a1522216f9bbb9a5f7813809cb3a79ac7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5c265b773551343bcc7659e0253b525c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">_index</a> = 0</td></tr>\n<tr class=\"memdesc:a5c265b773551343bcc7659e0253b525c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Used to point latest entered value while number of values less than order.  <a href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">More...</a><br /></td></tr>\n<tr class=\"separator:a5c265b773551343bcc7659e0253b525c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8h_source.html#l00029\">29</a> of file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"a84d72a35e083c33a5acad7d05c553dcd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a84d72a35e083c33a5acad7d05c553dcd\">&#9670;&nbsp;</a></span>FilterClass()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">FilterClass::FilterClass </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>type</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>order</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a new filter class. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">type</td><td>Filter type from FilterType_t </td></tr>\n    <tr><td class=\"paramname\">order</td><td>Filter order </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8cpp_source.html#l00225\">225</a> of file <a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5706c0daaecd8f616630dc9aac4eb619\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5706c0daaecd8f616630dc9aac4eb619\">&#9670;&nbsp;</a></span>~FilterClass()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">FilterClass::~FilterClass </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Frees up dynamic memory. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8cpp_source.html#l00137\">137</a> of file <a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"aa6e318ba33cab0094c7b6528e3e50337\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa6e318ba33cab0094c7b6528e3e50337\">&#9670;&nbsp;</a></span>addValue()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">float FilterClass::addValue </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Pushes a new value for calculation. Until the buffer is filled up to filter order, only first valid values are used in calculation. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">value</td><td>Next value </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Weighted average value </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8cpp_source.html#l00012\">12</a> of file <a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2236fab04bae686f3a30006ab0259c4f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2236fab04bae686f3a30006ab0259c4f\">&#9670;&nbsp;</a></span>addWeigth()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">float FilterClass::addWeigth </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>coeff</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Adds a new weighting value. It is pushed on the array so latest value will be used for older data. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">coeff</td><td>Next weighting coefficient </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Sum of all weighting values </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8cpp_source.html#l00025\">25</a> of file <a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a8571bc0e05f848a4372c3b40f7598a78\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8571bc0e05f848a4372c3b40f7598a78\">&#9670;&nbsp;</a></span>aveFilter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">float FilterClass::aveFilter </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Average filter calculation of next value. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">value</td><td>Next value to do calculation with </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns calculated average (weighted or unweighted) </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8cpp_source.html#l00043\">43</a> of file <a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a29933bc3e2094170afd380cee3763d95\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a29933bc3e2094170afd380cee3763d95\">&#9670;&nbsp;</a></span>clear()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void FilterClass::clear </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Resets state of the filter to an initial value. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8cpp_source.html#l00128\">128</a> of file <a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a99497784c6f8a22e89c19200132797b9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a99497784c6f8a22e89c19200132797b9\">&#9670;&nbsp;</a></span>divide()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int FilterClass::divide </td>\n          <td>(</td>\n          <td class=\"paramtype\">float *&#160;</td>\n          <td class=\"paramname\"><em>array</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>start</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>end</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Divide function to be used on Quick Sort. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">array</td><td>Input array </td></tr>\n    <tr><td class=\"paramname\">start</td><td>Start index </td></tr>\n    <tr><td class=\"paramname\">end</td><td>End index </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns new pivot position </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8cpp_source.html#l00091\">91</a> of file <a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"acad3de8f5f8b3565168ef3850eaf528d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acad3de8f5f8b3565168ef3850eaf528d\">&#9670;&nbsp;</a></span>medianFilter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">float FilterClass::medianFilter </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Median filter calculation of next value. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">value</td><td>Next value to do calculation with </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns calculated median </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8cpp_source.html#l00157\">157</a> of file <a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af7fa09578d556d8289807f25faf148f7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af7fa09578d556d8289807f25faf148f7\">&#9670;&nbsp;</a></span>quicksort()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void FilterClass::quicksort </td>\n          <td>(</td>\n          <td class=\"paramtype\">float *&#160;</td>\n          <td class=\"paramname\"><em>array</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>start</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>end</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sorting function that uses QuickSort algorythm. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">array</td><td>Input array </td></tr>\n    <tr><td class=\"paramname\">start</td><td>Start index </td></tr>\n    <tr><td class=\"paramname\">end</td><td>End index </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8cpp_source.html#l00143\">143</a> of file <a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a3d19e1f2d25502aefed9fa272e2b576b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3d19e1f2d25502aefed9fa272e2b576b\">&#9670;&nbsp;</a></span>_filterType</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">FilterType_t</a> FilterClass::_filterType</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Filter type from FilterType_t. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8h_source.html#l00031\">31</a> of file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5c265b773551343bcc7659e0253b525c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5c265b773551343bcc7659e0253b525c\">&#9670;&nbsp;</a></span>_index</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint FilterClass::_index = 0</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Used to point latest entered value while number of values less than order. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8h_source.html#l00036\">36</a> of file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a82e30fcd22d7d4d4815124e63a4902e1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a82e30fcd22d7d4d4815124e63a4902e1\">&#9670;&nbsp;</a></span>_order</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t FilterClass::_order</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Filter order. Numbre of samples to store for calculations. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8h_source.html#l00032\">32</a> of file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4b639a7fc53bdd0f1a82c41208414180\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4b639a7fc53bdd0f1a82c41208414180\">&#9670;&nbsp;</a></span>_orderedValues</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">float* FilterClass::_orderedValues</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Values ordered for median calculation. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8h_source.html#l00034\">34</a> of file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a50254c631b3e05583890f63c6f0149bc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a50254c631b3e05583890f63c6f0149bc\">&#9670;&nbsp;</a></span>_rawValues</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">float* FilterClass::_rawValues</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Raw values store. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8h_source.html#l00033\">33</a> of file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1522216f9bbb9a5f7813809cb3a79ac7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1522216f9bbb9a5f7813809cb3a79ac7\">&#9670;&nbsp;</a></span>_weightValues</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">float* FilterClass::_weightValues</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Weight values for average calculation. By default all them have value of 1 for arithmetic average. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Filter_8h_source.html#l00035\">35</a> of file <a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"Filter_8h_source.html\">Filter.h</a></li>\n<li>src/<a class=\"el\" href=\"Filter_8cpp_source.html\">Filter.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classGatewayAPI-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GatewayAPI Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">begin</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f\">buildGwInfo</a>(char *gwInfo, size_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9\">deleteNode</a>(Node *node, int &amp;resultCode)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">getGwInfo</a>(AsyncWebServerRequest *request)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">getMaxNodes</a>(AsyncWebServerRequest *request)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2\">getNodeFromParam</a>(AsyncWebServerRequest *request)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f\">getNodeInfo</a>(Node *node, int &amp;resultCode, char *nodeInfo, size_t len)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">getNodeNumber</a>(AsyncWebServerRequest *request)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">getNodes</a>(AsyncWebServerRequest *request)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">nodeOp</a>(AsyncWebServerRequest *request)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">onNotFound</a>(AsyncWebServerRequest *request)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">resetGw</a>(AsyncWebServerRequest *request)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">restartGw</a>(AsyncWebServerRequest *request)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">restartNode</a>(AsyncWebServerRequest *request)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#ac4244196077eddbed077df9d163198ea\">restartNodeRequest</a>(Node *node)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html#a7327209d50f6c17e3cd1ad67f2941e9a\">server</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classGatewayAPI.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: GatewayAPI Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classGatewayAPI-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GatewayAPI Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"GatewayAPI_8h_source.html\">GatewayAPI.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:af7c82da248870648a385a112d298ed78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">begin</a> ()</td></tr>\n<tr class=\"memdesc:af7c82da248870648a385a112d298ed78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts REST API web server.  <a href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">More...</a><br /></td></tr>\n<tr class=\"separator:af7c82da248870648a385a112d298ed78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a586cbe445b206083b64ee0a3c5c9075c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">getNodeNumber</a> (AsyncWebServerRequest *request)</td></tr>\n<tr class=\"memdesc:a586cbe445b206083b64ee0a3c5c9075c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes node number request.  <a href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">More...</a><br /></td></tr>\n<tr class=\"separator:a586cbe445b206083b64ee0a3c5c9075c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acdc60e8f65bd9c74951bed1c951fbc8c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">getMaxNodes</a> (AsyncWebServerRequest *request)</td></tr>\n<tr class=\"memdesc:acdc60e8f65bd9c74951bed1c951fbc8c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes max node number request.  <a href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">More...</a><br /></td></tr>\n<tr class=\"separator:acdc60e8f65bd9c74951bed1c951fbc8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac0e84242a98c65b55dd8365f1e43db68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">getNodes</a> (AsyncWebServerRequest *request)</td></tr>\n<tr class=\"memdesc:ac0e84242a98c65b55dd8365f1e43db68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes node list request.  <a href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">More...</a><br /></td></tr>\n<tr class=\"separator:ac0e84242a98c65b55dd8365f1e43db68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6a8626b2221280938b28f4963df8daec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">nodeOp</a> (AsyncWebServerRequest *request)</td></tr>\n<tr class=\"memdesc:a6a8626b2221280938b28f4963df8daec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes node information request.  <a href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">More...</a><br /></td></tr>\n<tr class=\"separator:a6a8626b2221280938b28f4963df8daec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a988dd5005172de330ab5794e98ee6e6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">getGwInfo</a> (AsyncWebServerRequest *request)</td></tr>\n<tr class=\"memdesc:a988dd5005172de330ab5794e98ee6e6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes gateway information request.  <a href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">More...</a><br /></td></tr>\n<tr class=\"separator:a988dd5005172de330ab5794e98ee6e6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a056461e3dc03dae2a442d419a6900314\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">restartGw</a> (AsyncWebServerRequest *request)</td></tr>\n<tr class=\"memdesc:a056461e3dc03dae2a442d419a6900314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes gateway restart request.  <a href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">More...</a><br /></td></tr>\n<tr class=\"separator:a056461e3dc03dae2a442d419a6900314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afc1233fa434d46abbf2a427090d0e1d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">resetGw</a> (AsyncWebServerRequest *request)</td></tr>\n<tr class=\"memdesc:afc1233fa434d46abbf2a427090d0e1d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes gateway configuration reset request.  <a href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">More...</a><br /></td></tr>\n<tr class=\"separator:afc1233fa434d46abbf2a427090d0e1d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a44142cbbb0cada714b77c6b707495e9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">restartNode</a> (AsyncWebServerRequest *request)</td></tr>\n<tr class=\"memdesc:a44142cbbb0cada714b77c6b707495e9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes node information request.  <a href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">More...</a><br /></td></tr>\n<tr class=\"separator:a44142cbbb0cada714b77c6b707495e9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af0168b2c02e399884441f2ce9534eaef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">onNotFound</a> (AsyncWebServerRequest *request)</td></tr>\n<tr class=\"memdesc:af0168b2c02e399884441f2ce9534eaef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes unknown entry points or methods.  <a href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">More...</a><br /></td></tr>\n<tr class=\"separator:af0168b2c02e399884441f2ce9534eaef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aac43275cab1febf267c3be296ff39de2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2\">getNodeFromParam</a> (AsyncWebServerRequest *request)</td></tr>\n<tr class=\"memdesc:aac43275cab1febf267c3be296ff39de2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets node reference from request parameters.  <a href=\"classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2\">More...</a><br /></td></tr>\n<tr class=\"separator:aac43275cab1febf267c3be296ff39de2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a77ac9e909b9575916c42d4e2ff3233f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9\">deleteNode</a> (<a class=\"el\" href=\"classNode.html\">Node</a> *node, int &amp;resultCode)</td></tr>\n<tr class=\"memdesc:a77ac9e909b9575916c42d4e2ff3233f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Processes node deletion request.  <a href=\"classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9\">More...</a><br /></td></tr>\n<tr class=\"separator:a77ac9e909b9575916c42d4e2ff3233f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41ac77b547570020ee4d0b3f98bb482f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f\">getNodeInfo</a> (<a class=\"el\" href=\"classNode.html\">Node</a> *node, int &amp;resultCode, char *nodeInfo, size_t len)</td></tr>\n<tr class=\"memdesc:a41ac77b547570020ee4d0b3f98bb482f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds node info.  <a href=\"classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f\">More...</a><br /></td></tr>\n<tr class=\"separator:a41ac77b547570020ee4d0b3f98bb482f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abdf2646841af0c08ab90b4bddb961b2f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f\">buildGwInfo</a> (char *gwInfo, size_t len)</td></tr>\n<tr class=\"memdesc:abdf2646841af0c08ab90b4bddb961b2f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds gateway info.  <a href=\"classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f\">More...</a><br /></td></tr>\n<tr class=\"separator:abdf2646841af0c08ab90b4bddb961b2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4244196077eddbed077df9d163198ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#ac4244196077eddbed077df9d163198ea\">restartNodeRequest</a> (<a class=\"el\" href=\"classNode.html\">Node</a> *node)</td></tr>\n<tr class=\"memdesc:ac4244196077eddbed077df9d163198ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sends restart node message.  <a href=\"classGatewayAPI.html#ac4244196077eddbed077df9d163198ea\">More...</a><br /></td></tr>\n<tr class=\"separator:ac4244196077eddbed077df9d163198ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a7327209d50f6c17e3cd1ad67f2941e9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWebServer *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayAPI.html#a7327209d50f6c17e3cd1ad67f2941e9a\">server</a></td></tr>\n<tr class=\"memdesc:a7327209d50f6c17e3cd1ad67f2941e9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Web server instance.  <a href=\"classGatewayAPI.html#a7327209d50f6c17e3cd1ad67f2941e9a\">More...</a><br /></td></tr>\n<tr class=\"separator:a7327209d50f6c17e3cd1ad67f2941e9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8h_source.html#l00025\">25</a> of file <a class=\"el\" href=\"GatewayAPI_8h_source.html\">GatewayAPI.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"af7c82da248870648a385a112d298ed78\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af7c82da248870648a385a112d298ed78\">&#9670;&nbsp;</a></span>begin()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayAPI::begin </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Starts REST API web server. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00028\">28</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"abdf2646841af0c08ab90b4bddb961b2f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abdf2646841af0c08ab90b4bddb961b2f\">&#9670;&nbsp;</a></span>buildGwInfo()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char * GatewayAPI::buildGwInfo </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>gwInfo</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Builds gateway info. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">gwInfo</td><td>Gateway information JSON </td></tr>\n    <tr><td class=\"paramname\">len</td><td>JSON length </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00054\">54</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a77ac9e909b9575916c42d4e2ff3233f9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a77ac9e909b9575916c42d4e2ff3233f9\">&#9670;&nbsp;</a></span>deleteNode()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char * GatewayAPI::deleteNode </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int &amp;&#160;</td>\n          <td class=\"paramname\"><em>resultCode</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes node deletion request. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> to delete </td></tr>\n    <tr><td class=\"paramname\">resultCode</td><td>Result code </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00140\">140</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a988dd5005172de330ab5794e98ee6e6a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a988dd5005172de330ab5794e98ee6e6a\">&#9670;&nbsp;</a></span>getGwInfo()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayAPI::getGwInfo </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWebServerRequest *&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes gateway information request. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td>Gateway information request </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00078\">78</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"acdc60e8f65bd9c74951bed1c951fbc8c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acdc60e8f65bd9c74951bed1c951fbc8c\">&#9670;&nbsp;</a></span>getMaxNodes()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayAPI::getMaxNodes </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWebServerRequest *&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes max node number request. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td>Max node number request </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00251\">251</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aac43275cab1febf267c3be296ff39de2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aac43275cab1febf267c3be296ff39de2\">&#9670;&nbsp;</a></span>getNodeFromParam()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> * GatewayAPI::getNodeFromParam </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWebServerRequest *&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets node reference from request parameters. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td>Request with node parameter (NodeID, Name or MAC address) </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00092\">92</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a41ac77b547570020ee4d0b3f98bb482f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41ac77b547570020ee4d0b3f98bb482f\">&#9670;&nbsp;</a></span>getNodeInfo()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char * GatewayAPI::getNodeInfo </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int &amp;&#160;</td>\n          <td class=\"paramname\"><em>resultCode</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>nodeInfo</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Builds node info. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> to get info from </td></tr>\n    <tr><td class=\"paramname\">resultCode</td><td>Result code </td></tr>\n    <tr><td class=\"paramname\">nodeInfo</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> information JSON element </td></tr>\n    <tr><td class=\"paramname\">len</td><td>JSON length </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00155\">155</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a586cbe445b206083b64ee0a3c5c9075c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a586cbe445b206083b64ee0a3c5c9075c\">&#9670;&nbsp;</a></span>getNodeNumber()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayAPI::getNodeNumber </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWebServerRequest *&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes node number request. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> number request </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00046\">46</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ac0e84242a98c65b55dd8365f1e43db68\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac0e84242a98c65b55dd8365f1e43db68\">&#9670;&nbsp;</a></span>getNodes()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayAPI::getNodes </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWebServerRequest *&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes node list request. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> list request </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00325\">325</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6a8626b2221280938b28f4963df8daec\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6a8626b2221280938b28f4963df8daec\">&#9670;&nbsp;</a></span>nodeOp()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayAPI::nodeOp </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWebServerRequest *&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes node information request. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> information request </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00219\">219</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af0168b2c02e399884441f2ce9534eaef\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af0168b2c02e399884441f2ce9534eaef\">&#9670;&nbsp;</a></span>onNotFound()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayAPI::onNotFound </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWebServerRequest *&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes unknown entry points or methods. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td>Request </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00378\">378</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afc1233fa434d46abbf2a427090d0e1d9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afc1233fa434d46abbf2a427090d0e1d9\">&#9670;&nbsp;</a></span>resetGw()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayAPI::resetGw </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWebServerRequest *&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes gateway configuration reset request. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td>Gateway configuration reset request </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00292\">292</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a056461e3dc03dae2a442d419a6900314\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a056461e3dc03dae2a442d419a6900314\">&#9670;&nbsp;</a></span>restartGw()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayAPI::restartGw </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWebServerRequest *&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes gateway restart request. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td>Gateway restart request </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00259\">259</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a44142cbbb0cada714b77c6b707495e9b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a44142cbbb0cada714b77c6b707495e9b\">&#9670;&nbsp;</a></span>restartNode()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayAPI::restartNode </td>\n          <td>(</td>\n          <td class=\"paramtype\">AsyncWebServerRequest *&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Processes node information request. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> information request </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00198\">198</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ac4244196077eddbed077df9d163198ea\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac4244196077eddbed077df9d163198ea\">&#9670;&nbsp;</a></span>restartNodeRequest()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GatewayAPI::restartNodeRequest </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sends restart node message. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> te send restart to </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8cpp_source.html#l00194\">194</a> of file <a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a7327209d50f6c17e3cd1ad67f2941e9a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7327209d50f6c17e3cd1ad67f2941e9a\">&#9670;&nbsp;</a></span>server</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWebServer* GatewayAPI::server</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Web server instance. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GatewayAPI_8h_source.html#l00027\">27</a> of file <a class=\"el\" href=\"GatewayAPI_8h_source.html\">GatewayAPI.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"GatewayAPI_8h_source.html\">GatewayAPI.h</a></li>\n<li>src/<a class=\"el\" href=\"GatewayAPI_8cpp_source.html\">GatewayAPI.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classGatewayOutput__dummy-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GatewayOutput_dummy Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">begin</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">clientId</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">configManagerExit</a>(bool status)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">configManagerStart</a>(EnigmaIOTGatewayClass *enigmaIotGw)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">downlinkCb</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">loadConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">loop</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">newNodeSend</a>(char *address, uint16_t node_id)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">nodeDisconnectedSend</a>(char *address, gwInvalidateReason_t reason)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">outputControlSend</a>(char *address, uint8_t *data, size_t length)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a>(char *address, char *data, size_t length, GwOutput_data_type_t type=data)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">saveConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">setDlCallback</a>(onDlData_t cb)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classGatewayOutput__dummy.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: GatewayOutput_dummy Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"classGatewayOutput__dummy-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GatewayOutput_dummy Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"GwOutput__dummy_8h_source.html\">GwOutput_dummy.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for GatewayOutput_dummy:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classGatewayOutput__dummy.png\" usemap=\"#GatewayOutput_5Fdummy_map\" alt=\"\"/>\n  <map id=\"GatewayOutput_5Fdummy_map\" name=\"GatewayOutput_5Fdummy_map\">\n<area href=\"classGatewayOutput__generic.html\" alt=\"GatewayOutput_generic\" shape=\"rect\" coords=\"0,0,148,24\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:acc9d7df320e4b4fb7ce459eac0e6639d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">configManagerStart</a> (<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> *enigmaIotGw)</td></tr>\n<tr class=\"memdesc:acc9d7df320e4b4fb7ce459eac0e6639d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager starts config portal.  <a href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">More...</a><br /></td></tr>\n<tr class=\"separator:acc9d7df320e4b4fb7ce459eac0e6639d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adac909737089f601e9ee3ea0ad521dc7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">configManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:adac909737089f601e9ee3ea0ad521dc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager exits config portal.  <a href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">More...</a><br /></td></tr>\n<tr class=\"separator:adac909737089f601e9ee3ea0ad521dc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a39a2abbde4e46e34c30e418b87e8d0b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">begin</a> ()</td></tr>\n<tr class=\"memdesc:a39a2abbde4e46e34c30e418b87e8d0b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts output module.  <a href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">More...</a><br /></td></tr>\n<tr class=\"separator:a39a2abbde4e46e34c30e418b87e8d0b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a359bd95cdb353b885d4bd691239b64fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">loadConfig</a> ()</td></tr>\n<tr class=\"memdesc:a359bd95cdb353b885d4bd691239b64fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads output module configuration.  <a href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">More...</a><br /></td></tr>\n<tr class=\"separator:a359bd95cdb353b885d4bd691239b64fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a500819e2a3f4478adc06a72af00ebb9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">outputControlSend</a> (char *address, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t length)</td></tr>\n<tr class=\"memdesc:a500819e2a3f4478adc06a72af00ebb9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send control data from nodes.  <a href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">More...</a><br /></td></tr>\n<tr class=\"separator:a500819e2a3f4478adc06a72af00ebb9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae57d8fc0470c3b2fd22201eb1e3da9d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">newNodeSend</a> (char *address, uint16_t node_id)</td></tr>\n<tr class=\"memdesc:ae57d8fc0470c3b2fd22201eb1e3da9d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send new node notification.  <a href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ae57d8fc0470c3b2fd22201eb1e3da9d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3ae96525b5a48e7bea23a36cedca7949\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">nodeDisconnectedSend</a> (char *address, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"memdesc:a3ae96525b5a48e7bea23a36cedca7949\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send node disconnection notification.  <a href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">More...</a><br /></td></tr>\n<tr class=\"separator:a3ae96525b5a48e7bea23a36cedca7949\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa2a2fb3ae886350f38e8d6d534278a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">outputDataSend</a> (char *address, char *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t length, <a class=\"el\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a> type=<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>)</td></tr>\n<tr class=\"memdesc:aa2a2fb3ae886350f38e8d6d534278a00\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send data from nodes.  <a href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">More...</a><br /></td></tr>\n<tr class=\"separator:aa2a2fb3ae886350f38e8d6d534278a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad5def4e2c7a3e1de387bf16a3f5ad8d7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">loop</a> ()</td></tr>\n<tr class=\"memdesc:ad5def4e2c7a3e1de387bf16a3f5ad8d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Should be called often for module management.  <a href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">More...</a><br /></td></tr>\n<tr class=\"separator:ad5def4e2c7a3e1de387bf16a3f5ad8d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6f9117dde5be2d5c40b41c3b44287dbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">setDlCallback</a> (<a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a> cb)</td></tr>\n<tr class=\"memdesc:a6f9117dde5be2d5c40b41c3b44287dbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set data processing function.  <a href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">More...</a><br /></td></tr>\n<tr class=\"separator:a6f9117dde5be2d5c40b41c3b44287dbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_classGatewayOutput__generic\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_classGatewayOutput__generic')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td></tr>\n<tr class=\"memitem:a93d8b7a91fb2d99aef4a441713da0f86 inherit pub_methods_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">setDlCallback</a> (<a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a> cb)</td></tr>\n<tr class=\"memdesc:a93d8b7a91fb2d99aef4a441713da0f86 inherit pub_methods_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set data processing function.  <a href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">More...</a><br /></td></tr>\n<tr class=\"separator:a93d8b7a91fb2d99aef4a441713da0f86 inherit pub_methods_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:af0fdc3e06a73dc2c635eb6ed53963eb5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">saveConfig</a> ()</td></tr>\n<tr class=\"memdesc:af0fdc3e06a73dc2c635eb6ed53963eb5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves output module configuration.  <a href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">More...</a><br /></td></tr>\n<tr class=\"separator:af0fdc3e06a73dc2c635eb6ed53963eb5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_attribs_classGatewayOutput__generic\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_attribs_classGatewayOutput__generic')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Attributes inherited from <a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td></tr>\n<tr class=\"memitem:a088ff06222b9cbc391f2c216b8c689fa inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a></td></tr>\n<tr class=\"memdesc:a088ff06222b9cbc391f2c216b8c689fa inherit pub_attribs_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">EnigmaIOT network name.  <a href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">More...</a><br /></td></tr>\n<tr class=\"separator:a088ff06222b9cbc391f2c216b8c689fa inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab8b6dc096f4f731c7d7dc8a6cb46f132 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">clientId</a></td></tr>\n<tr class=\"memdesc:ab8b6dc096f4f731c7d7dc8a6cb46f132 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT clientId.  <a href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">More...</a><br /></td></tr>\n<tr class=\"separator:ab8b6dc096f4f731c7d7dc8a6cb46f132 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0fe4ed2bd219b89e187770cb0ba9fdc3 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a></td></tr>\n<tr class=\"memdesc:a0fe4ed2bd219b89e187770cb0ba9fdc3 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT topic for gateway.  <a href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">More...</a><br /></td></tr>\n<tr class=\"separator:a0fe4ed2bd219b89e187770cb0ba9fdc3 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_classGatewayOutput__generic\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_classGatewayOutput__generic')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td></tr>\n<tr class=\"memitem:aa4855724d46b50a35735f9900494b889 inherit pro_attribs_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a></td></tr>\n<tr class=\"memdesc:aa4855724d46b50a35735f9900494b889 inherit pro_attribs_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to EnigmaIOT gateway instance.  <a href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">More...</a><br /></td></tr>\n<tr class=\"separator:aa4855724d46b50a35735f9900494b889 inherit pro_attribs_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ada169ba682e6632f72d62724887f92de inherit pro_attribs_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">downlinkCb</a></td></tr>\n<tr class=\"memdesc:ada169ba682e6632f72d62724887f92de inherit pro_attribs_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">downlink processing function handle  <a href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">More...</a><br /></td></tr>\n<tr class=\"separator:ada169ba682e6632f72d62724887f92de inherit pro_attribs_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8h_source.html#l00021\">21</a> of file <a class=\"el\" href=\"GwOutput__dummy_8h_source.html\">GwOutput_dummy.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a39a2abbde4e46e34c30e418b87e8d0b8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a39a2abbde4e46e34c30e418b87e8d0b8\">&#9670;&nbsp;</a></span>begin()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GatewayOutput_dummy::begin </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Starts output module. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00047\">47</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"adac909737089f601e9ee3ea0ad521dc7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adac909737089f601e9ee3ea0ad521dc7\">&#9670;&nbsp;</a></span>configManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayOutput_dummy::configManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager exits config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><code>true</code> if configuration was successful </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00043\">43</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"acc9d7df320e4b4fb7ce459eac0e6639d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acc9d7df320e4b4fb7ce459eac0e6639d\">&#9670;&nbsp;</a></span>configManagerStart()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayOutput_dummy::configManagerStart </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>enigmaIotGw</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager starts config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">enigmaIotGw</td><td>Pointer to EnigmaIOT gateway instance </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00031\">31</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a359bd95cdb353b885d4bd691239b64fa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a359bd95cdb353b885d4bd691239b64fa\">&#9670;&nbsp;</a></span>loadConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GatewayOutput_dummy::loadConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if load was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00039\">39</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad5def4e2c7a3e1de387bf16a3f5ad8d7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayOutput_dummy::loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Should be called often for module management. </p>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00053\">53</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae57d8fc0470c3b2fd22201eb1e3da9d4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae57d8fc0470c3b2fd22201eb1e3da9d4\">&#9670;&nbsp;</a></span>newNodeSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GatewayOutput_dummy::newNodeSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>node_id</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send new node notification. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">node_id</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Id </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00067\">67</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a3ae96525b5a48e7bea23a36cedca7949\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3ae96525b5a48e7bea23a36cedca7949\">&#9670;&nbsp;</a></span>nodeDisconnectedSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GatewayOutput_dummy::nodeDisconnectedSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send node disconnection notification. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">reason</td><td>Disconnection reason code </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00072\">72</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a500819e2a3f4478adc06a72af00ebb9a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a500819e2a3f4478adc06a72af00ebb9a\">&#9670;&nbsp;</a></span>outputControlSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GatewayOutput_dummy::outputControlSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send control data from nodes. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Message data buffer </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Data buffer length </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00062\">62</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa2a2fb3ae886350f38e8d6d534278a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa2a2fb3ae886350f38e8d6d534278a00\">&#9670;&nbsp;</a></span>outputDataSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GatewayOutput_dummy::outputDataSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a>&#160;</td>\n          <td class=\"paramname\"><em>type</em> = <code><a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send data from nodes. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Message data buffer </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Data buffer length </td></tr>\n    <tr><td class=\"paramname\">type</td><td>Type of message </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00057\">57</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af0fdc3e06a73dc2c635eb6ed53963eb5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af0fdc3e06a73dc2c635eb6ed53963eb5\">&#9670;&nbsp;</a></span>saveConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GatewayOutput_dummy::saveConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if save was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html#l00035\">35</a> of file <a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a6f9117dde5be2d5c40b41c3b44287dbd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6f9117dde5be2d5c40b41c3b44287dbd\">&#9670;&nbsp;</a></span>setDlCallback()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayOutput_dummy::setDlCallback </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a>&#160;</td>\n          <td class=\"paramname\"><em>cb</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Set data processing function. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">cb</td><td>Function handle </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__dummy_8h_source.html#l00108\">108</a> of file <a class=\"el\" href=\"GwOutput__dummy_8h_source.html\">GwOutput_dummy.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>examples/EnigmaIOTGatewayDummy/<a class=\"el\" href=\"GwOutput__dummy_8h_source.html\">GwOutput_dummy.h</a></li>\n<li>examples/EnigmaIOTGatewayDummy/<a class=\"el\" href=\"GwOutput__dummy_8cpp_source.html\">GwOutput_dummy.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classGatewayOutput__generic-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GatewayOutput_generic Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03\">begin</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">clientId</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f\">configManagerExit</a>(bool status)=0</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6\">configManagerStart</a>(EnigmaIOTGatewayClass *enigmaIotGw)=0</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">downlinkCb</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73\">loadConfig</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343\">loop</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b\">newNodeSend</a>(char *address, uint16_t node_id)=0</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58\">nodeDisconnectedSend</a>(char *address, gwInvalidateReason_t reason)=0</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07\">outputControlSend</a>(char *address, uint8_t *data, size_t length)=0</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5\">outputDataSend</a>(char *address, char *data, size_t length, GwOutput_data_type_t type=data)=0</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd\">saveConfig</a>()=0</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">setDlCallback</a>(onDlData_t cb)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classGatewayOutput__generic.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: GatewayOutput_generic Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classGatewayOutput__generic-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GatewayOutput_generic Class Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for GatewayOutput_generic:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classGatewayOutput__generic.png\" usemap=\"#GatewayOutput_5Fgeneric_map\" alt=\"\"/>\n  <map id=\"GatewayOutput_5Fgeneric_map\" name=\"GatewayOutput_5Fgeneric_map\">\n<area href=\"classGatewayOutput__dummy.html\" alt=\"GatewayOutput_dummy\" shape=\"rect\" coords=\"0,56,148,80\"/>\n<area href=\"classGwOutput__MQTT.html\" alt=\"GwOutput_MQTT\" shape=\"rect\" coords=\"158,56,306,80\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:adaa04f1d2d1285fc25c707adc49bc2e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6\">configManagerStart</a> (<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> *enigmaIotGw)=0</td></tr>\n<tr class=\"memdesc:adaa04f1d2d1285fc25c707adc49bc2e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager starts config portal.  <a href=\"classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6\">More...</a><br /></td></tr>\n<tr class=\"separator:adaa04f1d2d1285fc25c707adc49bc2e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a196d0cd14af1e99998681dc9f017823f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f\">configManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)=0</td></tr>\n<tr class=\"memdesc:a196d0cd14af1e99998681dc9f017823f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager exits config portal.  <a href=\"classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f\">More...</a><br /></td></tr>\n<tr class=\"separator:a196d0cd14af1e99998681dc9f017823f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af234219fb72002629fbef3ea2301ef03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03\">begin</a> ()=0</td></tr>\n<tr class=\"memdesc:af234219fb72002629fbef3ea2301ef03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts output module.  <a href=\"classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03\">More...</a><br /></td></tr>\n<tr class=\"separator:af234219fb72002629fbef3ea2301ef03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a16e1aa9a995c69e87a4b2e5ecc536c73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73\">loadConfig</a> ()=0</td></tr>\n<tr class=\"memdesc:a16e1aa9a995c69e87a4b2e5ecc536c73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads output module configuration.  <a href=\"classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73\">More...</a><br /></td></tr>\n<tr class=\"separator:a16e1aa9a995c69e87a4b2e5ecc536c73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a050f9bea35a220be645be5d99fbc3a07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07\">outputControlSend</a> (char *address, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t length)=0</td></tr>\n<tr class=\"memdesc:a050f9bea35a220be645be5d99fbc3a07\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send control data from nodes.  <a href=\"classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07\">More...</a><br /></td></tr>\n<tr class=\"separator:a050f9bea35a220be645be5d99fbc3a07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7e5626e20f3decbb28d85acbf14e106b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b\">newNodeSend</a> (char *address, uint16_t node_id)=0</td></tr>\n<tr class=\"memdesc:a7e5626e20f3decbb28d85acbf14e106b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send new node notification.  <a href=\"classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b\">More...</a><br /></td></tr>\n<tr class=\"separator:a7e5626e20f3decbb28d85acbf14e106b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0d3fe3f57535eb485910b5a460e6bb58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58\">nodeDisconnectedSend</a> (char *address, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason)=0</td></tr>\n<tr class=\"memdesc:a0d3fe3f57535eb485910b5a460e6bb58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send node disconnection notification.  <a href=\"classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58\">More...</a><br /></td></tr>\n<tr class=\"separator:a0d3fe3f57535eb485910b5a460e6bb58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8a61150a6388caee08a1092def5bdce5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5\">outputDataSend</a> (char *address, char *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t length, <a class=\"el\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a> type=<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>)=0</td></tr>\n<tr class=\"memdesc:a8a61150a6388caee08a1092def5bdce5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send data from nodes.  <a href=\"classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5\">More...</a><br /></td></tr>\n<tr class=\"separator:a8a61150a6388caee08a1092def5bdce5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a12bceac925f871d3f95d06c4f4332343\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343\">loop</a> ()=0</td></tr>\n<tr class=\"memdesc:a12bceac925f871d3f95d06c4f4332343\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Should be called often for module management.  <a href=\"classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343\">More...</a><br /></td></tr>\n<tr class=\"separator:a12bceac925f871d3f95d06c4f4332343\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a93d8b7a91fb2d99aef4a441713da0f86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">setDlCallback</a> (<a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a> cb)</td></tr>\n<tr class=\"memdesc:a93d8b7a91fb2d99aef4a441713da0f86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set data processing function.  <a href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">More...</a><br /></td></tr>\n<tr class=\"separator:a93d8b7a91fb2d99aef4a441713da0f86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a088ff06222b9cbc391f2c216b8c689fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a></td></tr>\n<tr class=\"memdesc:a088ff06222b9cbc391f2c216b8c689fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">EnigmaIOT network name.  <a href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">More...</a><br /></td></tr>\n<tr class=\"separator:a088ff06222b9cbc391f2c216b8c689fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab8b6dc096f4f731c7d7dc8a6cb46f132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">clientId</a></td></tr>\n<tr class=\"memdesc:ab8b6dc096f4f731c7d7dc8a6cb46f132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT clientId.  <a href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">More...</a><br /></td></tr>\n<tr class=\"separator:ab8b6dc096f4f731c7d7dc8a6cb46f132\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0fe4ed2bd219b89e187770cb0ba9fdc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a></td></tr>\n<tr class=\"memdesc:a0fe4ed2bd219b89e187770cb0ba9fdc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT topic for gateway.  <a href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">More...</a><br /></td></tr>\n<tr class=\"separator:a0fe4ed2bd219b89e187770cb0ba9fdc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a6c0e416d09397b930b94f05967389cbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">virtual bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd\">saveConfig</a> ()=0</td></tr>\n<tr class=\"memdesc:a6c0e416d09397b930b94f05967389cbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves output module configuration.  <a href=\"classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd\">More...</a><br /></td></tr>\n<tr class=\"separator:a6c0e416d09397b930b94f05967389cbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:aa4855724d46b50a35735f9900494b889\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a></td></tr>\n<tr class=\"memdesc:aa4855724d46b50a35735f9900494b889\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to EnigmaIOT gateway instance.  <a href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">More...</a><br /></td></tr>\n<tr class=\"separator:aa4855724d46b50a35735f9900494b889\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ada169ba682e6632f72d62724887f92de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">downlinkCb</a></td></tr>\n<tr class=\"memdesc:ada169ba682e6632f72d62724887f92de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">downlink processing function handle  <a href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">More...</a><br /></td></tr>\n<tr class=\"separator:ada169ba682e6632f72d62724887f92de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__generic_8h_source.html#l00031\">31</a> of file <a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"af234219fb72002629fbef3ea2301ef03\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af234219fb72002629fbef3ea2301ef03\">&#9670;&nbsp;</a></span>begin()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool GatewayOutput_generic::begin </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Starts output module. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">GwOutput_MQTT</a>, and <a class=\"el\" href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">GatewayOutput_dummy</a>.</p>\n\n</div>\n</div>\n<a id=\"a196d0cd14af1e99998681dc9f017823f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a196d0cd14af1e99998681dc9f017823f\">&#9670;&nbsp;</a></span>configManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void GatewayOutput_generic::configManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager exits config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><code>true</code> if configuration was successful </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implemented in <a class=\"el\" href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">GwOutput_MQTT</a>, and <a class=\"el\" href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">GatewayOutput_dummy</a>.</p>\n\n</div>\n</div>\n<a id=\"adaa04f1d2d1285fc25c707adc49bc2e6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adaa04f1d2d1285fc25c707adc49bc2e6\">&#9670;&nbsp;</a></span>configManagerStart()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void GatewayOutput_generic::configManagerStart </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>enigmaIotGw</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager starts config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">enigmaIotGw</td><td>Pointer to EnigmaIOT gateway instance </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implemented in <a class=\"el\" href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">GwOutput_MQTT</a>, and <a class=\"el\" href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">GatewayOutput_dummy</a>.</p>\n\n</div>\n</div>\n<a id=\"a16e1aa9a995c69e87a4b2e5ecc536c73\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a16e1aa9a995c69e87a4b2e5ecc536c73\">&#9670;&nbsp;</a></span>loadConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool GatewayOutput_generic::loadConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if load was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">GwOutput_MQTT</a>, and <a class=\"el\" href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">GatewayOutput_dummy</a>.</p>\n\n</div>\n</div>\n<a id=\"a12bceac925f871d3f95d06c4f4332343\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a12bceac925f871d3f95d06c4f4332343\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual void GatewayOutput_generic::loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Should be called often for module management. </p>\n\n<p>Implemented in <a class=\"el\" href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">GwOutput_MQTT</a>, and <a class=\"el\" href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">GatewayOutput_dummy</a>.</p>\n\n</div>\n</div>\n<a id=\"a7e5626e20f3decbb28d85acbf14e106b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7e5626e20f3decbb28d85acbf14e106b\">&#9670;&nbsp;</a></span>newNodeSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool GatewayOutput_generic::newNodeSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>node_id</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send new node notification. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">node_id</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Id </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">GwOutput_MQTT</a>, and <a class=\"el\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">GatewayOutput_dummy</a>.</p>\n\n</div>\n</div>\n<a id=\"a0d3fe3f57535eb485910b5a460e6bb58\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0d3fe3f57535eb485910b5a460e6bb58\">&#9670;&nbsp;</a></span>nodeDisconnectedSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool GatewayOutput_generic::nodeDisconnectedSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send node disconnection notification. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">reason</td><td>Disconnection reason code </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">GwOutput_MQTT</a>, and <a class=\"el\" href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">GatewayOutput_dummy</a>.</p>\n\n</div>\n</div>\n<a id=\"a050f9bea35a220be645be5d99fbc3a07\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a050f9bea35a220be645be5d99fbc3a07\">&#9670;&nbsp;</a></span>outputControlSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool GatewayOutput_generic::outputControlSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send control data from nodes. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Message data buffer </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Data buffer length </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">GwOutput_MQTT</a>, and <a class=\"el\" href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">GatewayOutput_dummy</a>.</p>\n\n</div>\n</div>\n<a id=\"a8a61150a6388caee08a1092def5bdce5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8a61150a6388caee08a1092def5bdce5\">&#9670;&nbsp;</a></span>outputDataSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool GatewayOutput_generic::outputDataSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a>&#160;</td>\n          <td class=\"paramname\"><em>type</em> = <code><a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send data from nodes. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Message data buffer </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Data buffer length </td></tr>\n    <tr><td class=\"paramname\">type</td><td>Type of message </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">GwOutput_MQTT</a>, and <a class=\"el\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">GatewayOutput_dummy</a>.</p>\n\n</div>\n</div>\n<a id=\"a6c0e416d09397b930b94f05967389cbd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6c0e416d09397b930b94f05967389cbd\">&#9670;&nbsp;</a></span>saveConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">virtual bool GatewayOutput_generic::saveConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">pure virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if save was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implemented in <a class=\"el\" href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">GwOutput_MQTT</a>, and <a class=\"el\" href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">GatewayOutput_dummy</a>.</p>\n\n</div>\n</div>\n<a id=\"a93d8b7a91fb2d99aef4a441713da0f86\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a93d8b7a91fb2d99aef4a441713da0f86\">&#9670;&nbsp;</a></span>setDlCallback()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GatewayOutput_generic::setDlCallback </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a>&#160;</td>\n          <td class=\"paramname\"><em>cb</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Set data processing function. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">cb</td><td>Function handle </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__generic_8h_source.html#l00118\">118</a> of file <a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"ab8b6dc096f4f731c7d7dc8a6cb46f132\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab8b6dc096f4f731c7d7dc8a6cb46f132\">&#9670;&nbsp;</a></span>clientId</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">String GatewayOutput_generic::clientId</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>MQTT clientId. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__generic_8h_source.html#l00044\">44</a> of file <a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ada169ba682e6632f72d62724887f92de\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ada169ba682e6632f72d62724887f92de\">&#9670;&nbsp;</a></span>downlinkCb</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a> GatewayOutput_generic::downlinkCb</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>downlink processing function handle </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__generic_8h_source.html#l00034\">34</a> of file <a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa4855724d46b50a35735f9900494b889\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa4855724d46b50a35735f9900494b889\">&#9670;&nbsp;</a></span>enigmaIotGateway</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>* GatewayOutput_generic::enigmaIotGateway</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Pointer to EnigmaIOT gateway instance. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__generic_8h_source.html#l00033\">33</a> of file <a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0fe4ed2bd219b89e187770cb0ba9fdc3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0fe4ed2bd219b89e187770cb0ba9fdc3\">&#9670;&nbsp;</a></span>gwTopic</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">String GatewayOutput_generic::gwTopic</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>MQTT topic for gateway. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__generic_8h_source.html#l00045\">45</a> of file <a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a088ff06222b9cbc391f2c216b8c689fa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a088ff06222b9cbc391f2c216b8c689fa\">&#9670;&nbsp;</a></span>netName</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">String GatewayOutput_generic::netName</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>EnigmaIOT network name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__generic_8h_source.html#l00043\">43</a> of file <a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>src/<a class=\"el\" href=\"GwOutput__generic_8h_source.html\">GwOutput_generic.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classGwOutput__MQTT-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_MQTT Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a>(const char *topic, char *payload, size_t len, bool retain=false)</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">begin</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">clientId</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">configManagerExit</a>(bool status)</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">configManagerStart</a>(EnigmaIOTGatewayClass *enigmaIotGw)</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">downlinkCb</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">espClient</a></td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">getMQTTqueue</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a50976e1efb3c1570e3596672ffd83c56\">GwOutput_MQTT</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">loadConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">loop</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a></td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a></td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a></td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">mqttPassParam</a></td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">mqttPortParam</a></td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">mqttServerParam</a></td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">mqttUserParam</a></td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a></td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">newNodeSend</a>(char *address, uint16_t node_id)</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">nodeDisconnectedSend</a>(char *address, gwInvalidateReason_t reason)</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">onDlData</a>(char *topic, uint8_t *data, unsigned int len)</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">outputControlSend</a>(char *address, uint8_t *data, size_t length)</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">outputDataSend</a>(char *address, char *data, size_t length, GwOutput_data_type_t type=data)</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">popMQTTqueue</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">publishMQTT</a>(const char *topic, const char *payload, size_t len, bool retain=false)</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">reconnect</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">saveConfig</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">setClock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">setDlCallback</a>(onDlData_t cb)</td><td class=\"entry\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html#aa8a75a12858e138be2e92c69f2111038\">shouldSaveConfig</a></td><td class=\"entry\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classGwOutput__MQTT.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: GwOutput_MQTT Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-static-methods\">Static Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classGwOutput__MQTT-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GwOutput_MQTT Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for GwOutput_MQTT:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classGwOutput__MQTT.png\" usemap=\"#GwOutput_5FMQTT_map\" alt=\"\"/>\n  <map id=\"GwOutput_5FMQTT_map\" name=\"GwOutput_5FMQTT_map\">\n<area href=\"classGatewayOutput__generic.html\" alt=\"GatewayOutput_generic\" shape=\"rect\" coords=\"0,0,148,24\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a50976e1efb3c1570e3596672ffd83c56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a50976e1efb3c1570e3596672ffd83c56\">GwOutput_MQTT</a> ()</td></tr>\n<tr class=\"memdesc:a50976e1efb3c1570e3596672ffd83c56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor to initialize MQTT client.  <a href=\"classGwOutput__MQTT.html#a50976e1efb3c1570e3596672ffd83c56\">More...</a><br /></td></tr>\n<tr class=\"separator:a50976e1efb3c1570e3596672ffd83c56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e077c236ed77f61ca1a7ab6067cf73e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">configManagerStart</a> (<a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> *enigmaIotGw)</td></tr>\n<tr class=\"memdesc:a5e077c236ed77f61ca1a7ab6067cf73e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager starts config portal.  <a href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">More...</a><br /></td></tr>\n<tr class=\"separator:a5e077c236ed77f61ca1a7ab6067cf73e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1ce7f559d24ebc85e5d9070b61e6c559\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">configManagerExit</a> (bool <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>)</td></tr>\n<tr class=\"memdesc:a1ce7f559d24ebc85e5d9070b61e6c559\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Called when wifi manager exits config portal.  <a href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">More...</a><br /></td></tr>\n<tr class=\"separator:a1ce7f559d24ebc85e5d9070b61e6c559\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ef6cb16df04d8d2dc8b854eec0529f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">begin</a> ()</td></tr>\n<tr class=\"memdesc:a0ef6cb16df04d8d2dc8b854eec0529f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts output module.  <a href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">More...</a><br /></td></tr>\n<tr class=\"separator:a0ef6cb16df04d8d2dc8b854eec0529f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af0ca1b2ce62b76f4729d879144a3183f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">loadConfig</a> ()</td></tr>\n<tr class=\"memdesc:af0ca1b2ce62b76f4729d879144a3183f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Loads output module configuration.  <a href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">More...</a><br /></td></tr>\n<tr class=\"separator:af0ca1b2ce62b76f4729d879144a3183f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56f7002fc97ec92b1145f30ec79a1e84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">outputControlSend</a> (char *address, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t length)</td></tr>\n<tr class=\"memdesc:a56f7002fc97ec92b1145f30ec79a1e84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send control data from nodes.  <a href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">More...</a><br /></td></tr>\n<tr class=\"separator:a56f7002fc97ec92b1145f30ec79a1e84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3d8f3d74fcf2588278651a3b4f410c1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">newNodeSend</a> (char *address, uint16_t node_id)</td></tr>\n<tr class=\"memdesc:a3d8f3d74fcf2588278651a3b4f410c1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send new node notification.  <a href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">More...</a><br /></td></tr>\n<tr class=\"separator:a3d8f3d74fcf2588278651a3b4f410c1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7c75a452f70d201c2d35a5394cc61f6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">nodeDisconnectedSend</a> (char *address, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"memdesc:a7c75a452f70d201c2d35a5394cc61f6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send node disconnection notification.  <a href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">More...</a><br /></td></tr>\n<tr class=\"separator:a7c75a452f70d201c2d35a5394cc61f6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9222adf0c343e915c70317d14dc67778\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">outputDataSend</a> (char *address, char *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t length, <a class=\"el\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a> type=<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>)</td></tr>\n<tr class=\"memdesc:a9222adf0c343e915c70317d14dc67778\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Send data from nodes.  <a href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">More...</a><br /></td></tr>\n<tr class=\"separator:a9222adf0c343e915c70317d14dc67778\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab095e92704ccc350df9f0767a2b118d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">loop</a> ()</td></tr>\n<tr class=\"memdesc:ab095e92704ccc350df9f0767a2b118d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Should be called regularly for module management.  <a href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">More...</a><br /></td></tr>\n<tr class=\"separator:ab095e92704ccc350df9f0767a2b118d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_classGatewayOutput__generic\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_classGatewayOutput__generic')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td></tr>\n<tr class=\"memitem:a93d8b7a91fb2d99aef4a441713da0f86 inherit pub_methods_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">setDlCallback</a> (<a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a> cb)</td></tr>\n<tr class=\"memdesc:a93d8b7a91fb2d99aef4a441713da0f86 inherit pub_methods_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set data processing function.  <a href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">More...</a><br /></td></tr>\n<tr class=\"separator:a93d8b7a91fb2d99aef4a441713da0f86 inherit pub_methods_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:aa085f629e0d58f053325f35c5ae6c2a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">saveConfig</a> ()</td></tr>\n<tr class=\"memdesc:aa085f629e0d58f053325f35c5ae6c2a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Saves output module configuration.  <a href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">More...</a><br /></td></tr>\n<tr class=\"separator:aa085f629e0d58f053325f35c5ae6c2a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4531996cc3ce965edfdd1ca3e6b85d7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">setClock</a> ()</td></tr>\n<tr class=\"memdesc:ae4531996cc3ce965edfdd1ca3e6b85d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Synchronizes time over NTP to check certifitate expiration time.  <a href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">More...</a><br /></td></tr>\n<tr class=\"separator:ae4531996cc3ce965edfdd1ca3e6b85d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad225825796a387d127ccd3616ba96ec7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">reconnect</a> ()</td></tr>\n<tr class=\"memdesc:ad225825796a387d127ccd3616ba96ec7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">This is called anytime MQTT client is disconnected.  <a href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">More...</a><br /></td></tr>\n<tr class=\"separator:ad225825796a387d127ccd3616ba96ec7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4b889e6434caf7abb8dc52796fadb20f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">addMQTTqueue</a> (const char *topic, char *payload, size_t len, bool retain=false)</td></tr>\n<tr class=\"memdesc:a4b889e6434caf7abb8dc52796fadb20f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add MQTT message to queue.  <a href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">More...</a><br /></td></tr>\n<tr class=\"separator:a4b889e6434caf7abb8dc52796fadb20f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a364652fab162760bcc7f647933752742\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">getMQTTqueue</a> ()</td></tr>\n<tr class=\"memdesc:a364652fab162760bcc7f647933752742\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets next item in the queue.  <a href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">More...</a><br /></td></tr>\n<tr class=\"separator:a364652fab162760bcc7f647933752742\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a33e3bd471247ea79b53136eef1cd5a3a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">popMQTTqueue</a> ()</td></tr>\n<tr class=\"memdesc:a33e3bd471247ea79b53136eef1cd5a3a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deletes next item in the queue.  <a href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">More...</a><br /></td></tr>\n<tr class=\"separator:a33e3bd471247ea79b53136eef1cd5a3a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a783864c965f340fab5d24ccf63acb162\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">publishMQTT</a> (const char *topic, const char *payload, size_t len, bool retain=false)</td></tr>\n<tr class=\"memdesc:a783864c965f340fab5d24ccf63acb162\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Publishes data over MQTT.  <a href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">More...</a><br /></td></tr>\n<tr class=\"separator:a783864c965f340fab5d24ccf63acb162\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-static-methods\"></a>\nStatic Protected Member Functions</h2></td></tr>\n<tr class=\"memitem:adf39a6783d746e4b54fedb3d59f2dca9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">onDlData</a> (char *topic, uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, unsigned int len)</td></tr>\n<tr class=\"memdesc:adf39a6783d746e4b54fedb3d59f2dca9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function that processes downlink data from network to node.  <a href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">More...</a><br /></td></tr>\n<tr class=\"separator:adf39a6783d746e4b54fedb3d59f2dca9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a6c30a4c67499253c238fc8646f3285ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWiFiManagerParameter *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">mqttServerParam</a> = NULL</td></tr>\n<tr class=\"memdesc:a6c30a4c67499253c238fc8646f3285ef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Configuration field for MQTT server address.  <a href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">More...</a><br /></td></tr>\n<tr class=\"separator:a6c30a4c67499253c238fc8646f3285ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7949ebf56b8a63b24553fe02d857373d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWiFiManagerParameter *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">mqttPortParam</a> = NULL</td></tr>\n<tr class=\"memdesc:a7949ebf56b8a63b24553fe02d857373d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Configuration field for MQTT server port.  <a href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">More...</a><br /></td></tr>\n<tr class=\"separator:a7949ebf56b8a63b24553fe02d857373d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a24682127079586d71ac858f7e2f78f6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWiFiManagerParameter *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">mqttUserParam</a> = NULL</td></tr>\n<tr class=\"memdesc:a24682127079586d71ac858f7e2f78f6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Configuration field for MQTT server user name.  <a href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">More...</a><br /></td></tr>\n<tr class=\"separator:a24682127079586d71ac858f7e2f78f6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad4d784744aeee89199092987f9ba5c53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">AsyncWiFiManagerParameter *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">mqttPassParam</a> = NULL</td></tr>\n<tr class=\"memdesc:ad4d784744aeee89199092987f9ba5c53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Configuration field for MQTT server password.  <a href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">More...</a><br /></td></tr>\n<tr class=\"separator:ad4d784744aeee89199092987f9ba5c53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af0477251ade40b70ff8c65f1e5478163\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt; <a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a> &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">mqtt_queue</a></td></tr>\n<tr class=\"separator:af0477251ade40b70ff8c65f1e5478163\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a13bd3d7f5d5a221627886a8b4ce29516\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">mqttgw_config</a></td></tr>\n<tr class=\"memdesc:a13bd3d7f5d5a221627886a8b4ce29516\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT server configuration data.  <a href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">More...</a><br /></td></tr>\n<tr class=\"separator:a13bd3d7f5d5a221627886a8b4ce29516\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa8a75a12858e138be2e92c69f2111038\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#aa8a75a12858e138be2e92c69f2111038\">shouldSaveConfig</a> = false</td></tr>\n<tr class=\"memdesc:aa8a75a12858e138be2e92c69f2111038\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flag to indicate if configuration should be saved.  <a href=\"classGwOutput__MQTT.html#aa8a75a12858e138be2e92c69f2111038\">More...</a><br /></td></tr>\n<tr class=\"separator:aa8a75a12858e138be2e92c69f2111038\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae1bac550738c7f1a92deb3450c1e929a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">WiFiClient&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">espClient</a></td></tr>\n<tr class=\"memdesc:ae1bac550738c7f1a92deb3450c1e929a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">TCP client.  <a href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">More...</a><br /></td></tr>\n<tr class=\"separator:ae1bac550738c7f1a92deb3450c1e929a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac177228269fbe285eb3b1a1d31764327\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">PubSubClient&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">mqtt_client</a></td></tr>\n<tr class=\"memdesc:ac177228269fbe285eb3b1a1d31764327\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT client.  <a href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">More...</a><br /></td></tr>\n<tr class=\"separator:ac177228269fbe285eb3b1a1d31764327\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_classGatewayOutput__generic\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_classGatewayOutput__generic')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td></tr>\n<tr class=\"memitem:aa4855724d46b50a35735f9900494b889 inherit pro_attribs_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">enigmaIotGateway</a></td></tr>\n<tr class=\"memdesc:aa4855724d46b50a35735f9900494b889 inherit pro_attribs_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Pointer to EnigmaIOT gateway instance.  <a href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">More...</a><br /></td></tr>\n<tr class=\"separator:aa4855724d46b50a35735f9900494b889 inherit pro_attribs_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ada169ba682e6632f72d62724887f92de inherit pro_attribs_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">onDlData_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">downlinkCb</a></td></tr>\n<tr class=\"memdesc:ada169ba682e6632f72d62724887f92de inherit pro_attribs_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">downlink processing function handle  <a href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">More...</a><br /></td></tr>\n<tr class=\"separator:ada169ba682e6632f72d62724887f92de inherit pro_attribs_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pub_attribs_classGatewayOutput__generic\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_attribs_classGatewayOutput__generic')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Attributes inherited from <a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a></td></tr>\n<tr class=\"memitem:a088ff06222b9cbc391f2c216b8c689fa inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">netName</a></td></tr>\n<tr class=\"memdesc:a088ff06222b9cbc391f2c216b8c689fa inherit pub_attribs_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">EnigmaIOT network name.  <a href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">More...</a><br /></td></tr>\n<tr class=\"separator:a088ff06222b9cbc391f2c216b8c689fa inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab8b6dc096f4f731c7d7dc8a6cb46f132 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">clientId</a></td></tr>\n<tr class=\"memdesc:ab8b6dc096f4f731c7d7dc8a6cb46f132 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT clientId.  <a href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">More...</a><br /></td></tr>\n<tr class=\"separator:ab8b6dc096f4f731c7d7dc8a6cb46f132 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0fe4ed2bd219b89e187770cb0ba9fdc3 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">gwTopic</a></td></tr>\n<tr class=\"memdesc:a0fe4ed2bd219b89e187770cb0ba9fdc3 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT topic for gateway.  <a href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">More...</a><br /></td></tr>\n<tr class=\"separator:a0fe4ed2bd219b89e187770cb0ba9fdc3 inherit pub_attribs_classGatewayOutput__generic\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00085\">85</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"a50976e1efb3c1570e3596672ffd83c56\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a50976e1efb3c1570e3596672ffd83c56\">&#9670;&nbsp;</a></span>GwOutput_MQTT()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GwOutput_MQTT::GwOutput_MQTT </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Constructor to initialize MQTT client. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00169\">169</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a4b889e6434caf7abb8dc52796fadb20f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4b889e6434caf7abb8dc52796fadb20f\">&#9670;&nbsp;</a></span>addMQTTqueue()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GwOutput_MQTT::addMQTTqueue </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>topic</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>retain</em> = <code>false</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Add MQTT message to queue. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">topic</td><td>MQTT message topic </td></tr>\n    <tr><td class=\"paramname\">payload</td><td>MQTT message payload </td></tr>\n    <tr><td class=\"paramname\">len</td><td>MQTT payload length </td></tr>\n    <tr><td class=\"paramname\">retain</td><td>Message retain flag </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00484\">484</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0ef6cb16df04d8d2dc8b854eec0529f3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0ef6cb16df04d8d2dc8b854eec0529f3\">&#9670;&nbsp;</a></span>begin()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GwOutput_MQTT::begin </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Starts output module. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00203\">203</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a1ce7f559d24ebc85e5d9070b61e6c559\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1ce7f559d24ebc85e5d9070b61e6c559\">&#9670;&nbsp;</a></span>configManagerExit()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GwOutput_MQTT::configManagerExit </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager exits config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><code>true</code> if configuration was successful </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00166\">166</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5e077c236ed77f61ca1a7ab6067cf73e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5e077c236ed77f61ca1a7ab6067cf73e\">&#9670;&nbsp;</a></span>configManagerStart()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GwOutput_MQTT::configManagerStart </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a> *&#160;</td>\n          <td class=\"paramname\"><em>enigmaIotGw</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Called when wifi manager starts config portal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">enigmaIotGw</td><td>Pointer to EnigmaIOT gateway instance </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00043\">43</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a364652fab162760bcc7f647933752742\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a364652fab162760bcc7f647933752742\">&#9670;&nbsp;</a></span>getMQTTqueue()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a> * GwOutput_MQTT::getMQTTqueue </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets next item in the queue. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Next MQTT message to be sent </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00507\">507</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af0ca1b2ce62b76f4729d879144a3183f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af0ca1b2ce62b76f4729d879144a3183f\">&#9670;&nbsp;</a></span>loadConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GwOutput_MQTT::loadConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Loads output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if load was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00101\">101</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab095e92704ccc350df9f0767a2b118d0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab095e92704ccc350df9f0767a2b118d0\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GwOutput_MQTT::loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Should be called regularly for module management. </p>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00433\">433</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a3d8f3d74fcf2588278651a3b4f410c1c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3d8f3d74fcf2588278651a3b4f410c1c\">&#9670;&nbsp;</a></span>newNodeSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GwOutput_MQTT::newNodeSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>node_id</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send new node notification. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">node_id</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Id </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00678\">678</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a7c75a452f70d201c2d35a5394cc61f6a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7c75a452f70d201c2d35a5394cc61f6a\">&#9670;&nbsp;</a></span>nodeDisconnectedSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GwOutput_MQTT::nodeDisconnectedSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">gwInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send node disconnection notification. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">reason</td><td>Disconnection reason code </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00696\">696</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"adf39a6783d746e4b54fedb3d59f2dca9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adf39a6783d746e4b54fedb3d59f2dca9\">&#9670;&nbsp;</a></span>onDlData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GwOutput_MQTT::onDlData </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>topic</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Function that processes downlink data from network to node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">topic</td><td>Topic that indicates message type </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Message payload </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Payload length </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00382\">382</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a56f7002fc97ec92b1145f30ec79a1e84\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a56f7002fc97ec92b1145f30ec79a1e84\">&#9670;&nbsp;</a></span>outputControlSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GwOutput_MQTT::outputControlSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send control data from nodes. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Message data buffer </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Data buffer length </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00574\">574</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a9222adf0c343e915c70317d14dc67778\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9222adf0c343e915c70317d14dc67778\">&#9670;&nbsp;</a></span>outputDataSend()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GwOutput_MQTT::outputDataSend </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>address</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_data_type_t</a>&#160;</td>\n          <td class=\"paramname\"><em>type</em> = <code><a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Send data from nodes. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">address</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Address </td></tr>\n    <tr><td class=\"paramname\">data</td><td>Message data buffer </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Data buffer length </td></tr>\n    <tr><td class=\"paramname\">type</td><td>Type of message </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if sending was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00551\">551</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a33e3bd471247ea79b53136eef1cd5a3a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a33e3bd471247ea79b53136eef1cd5a3a\">&#9670;&nbsp;</a></span>popMQTTqueue()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GwOutput_MQTT::popMQTTqueue </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Deletes next item in the queue. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00515\">515</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a783864c965f340fab5d24ccf63acb162\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a783864c965f340fab5d24ccf63acb162\">&#9670;&nbsp;</a></span>publishMQTT()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GwOutput_MQTT::publishMQTT </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>topic</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>retain</em> = <code>false</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Publishes data over MQTT. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">topic</td><td>Topic that indicates message type </td></tr>\n    <tr><td class=\"paramname\">payload</td><td>Message payload data </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Payload length </td></tr>\n    <tr><td class=\"paramname\">retain</td><td><code>true</code> if message should be retained </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00456\">456</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad225825796a387d127ccd3616ba96ec7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad225825796a387d127ccd3616ba96ec7\">&#9670;&nbsp;</a></span>reconnect()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GwOutput_MQTT::reconnect </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>This is called anytime MQTT client is disconnected. </p>\n<p>It tries to connect to MQTT broker. After reconnection is done it resubscribes to network topics. It waits for connection and times out after 5 seconds </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00235\">235</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa085f629e0d58f053325f35c5ae6c2a1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa085f629e0d58f053325f35c5ae6c2a1\">&#9670;&nbsp;</a></span>saveConfig()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GwOutput_MQTT::saveConfig </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span><span class=\"mlabel\">virtual</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Saves output module configuration. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <code>true</code> if save was successful. <code>false</code> otherwise </dd></dl>\n\n<p>Implements <a class=\"el\" href=\"classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd\">GatewayOutput_generic</a>.</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00059\">59</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae4531996cc3ce965edfdd1ca3e6b85d7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae4531996cc3ce965edfdd1ca3e6b85d7\">&#9670;&nbsp;</a></span>setClock()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void GwOutput_MQTT::setClock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Synchronizes time over NTP to check certifitate expiration time. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html#l00467\">467</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"ae1bac550738c7f1a92deb3450c1e929a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae1bac550738c7f1a92deb3450c1e929a\">&#9670;&nbsp;</a></span>espClient</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">WiFiClient GwOutput_MQTT::espClient</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>TCP client. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00104\">104</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac177228269fbe285eb3b1a1d31764327\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac177228269fbe285eb3b1a1d31764327\">&#9670;&nbsp;</a></span>mqtt_client</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">PubSubClient GwOutput_MQTT::mqtt_client</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>MQTT client. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00106\">106</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af0477251ade40b70ff8c65f1e5478163\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af0477251ade40b70ff8c65f1e5478163\">&#9670;&nbsp;</a></span>mqtt_queue</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&lt;<a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a>&gt; GwOutput_MQTT::mqtt_queue</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00093\">93</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a13bd3d7f5d5a221627886a8b4ce29516\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a13bd3d7f5d5a221627886a8b4ce29516\">&#9670;&nbsp;</a></span>mqttgw_config</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a> GwOutput_MQTT::mqttgw_config</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>MQTT server configuration data. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00095\">95</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad4d784744aeee89199092987f9ba5c53\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad4d784744aeee89199092987f9ba5c53\">&#9670;&nbsp;</a></span>mqttPassParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWiFiManagerParameter* GwOutput_MQTT::mqttPassParam = NULL</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Configuration field for MQTT server password. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00090\">90</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7949ebf56b8a63b24553fe02d857373d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7949ebf56b8a63b24553fe02d857373d\">&#9670;&nbsp;</a></span>mqttPortParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWiFiManagerParameter* GwOutput_MQTT::mqttPortParam = NULL</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Configuration field for MQTT server port. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00088\">88</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6c30a4c67499253c238fc8646f3285ef\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6c30a4c67499253c238fc8646f3285ef\">&#9670;&nbsp;</a></span>mqttServerParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWiFiManagerParameter* GwOutput_MQTT::mqttServerParam = NULL</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Configuration field for MQTT server address. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00087\">87</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a24682127079586d71ac858f7e2f78f6f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a24682127079586d71ac858f7e2f78f6f\">&#9670;&nbsp;</a></span>mqttUserParam</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">AsyncWiFiManagerParameter* GwOutput_MQTT::mqttUserParam = NULL</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Configuration field for MQTT server user name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00089\">89</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa8a75a12858e138be2e92c69f2111038\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa8a75a12858e138be2e92c69f2111038\">&#9670;&nbsp;</a></span>shouldSaveConfig</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool GwOutput_MQTT::shouldSaveConfig = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Flag to indicate if configuration should be saved. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00096\">96</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>examples/EnigmaIOTGatewayMQTT/<a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a></li>\n<li>examples/EnigmaIOTGatewayMQTT/<a class=\"el\" href=\"GwOutput__mqtt_8cpp_source.html\">GwOutput_mqtt.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHABinarySensor-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">HABinarySensor Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#a857bc07743e8564db8476907f925c48e\">addExpiration</a>(uint seconds)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">deviceClassStr</a>(haBinarySensorClass_t sensorClass)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a>(haDeviceType_t entityType)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a>(int bufferlen, uint8_t *buffer)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">getDiscoveryJson</a>(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a>(const char *hassPrefix, const char *nodeName, haDeviceType_t entityType, const char *nameSuffix=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#a24cc503973f65dadac7575a2bba823b6\">HABinarySensor</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#af305236afbd0405010d1611eac965530\">setDeviceClass</a>(haBinarySensorClass_t devClass)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7\">setOffDelay</a>(uint payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">setPayloadOff</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#a48a5415389f3b0a03e35c883f764ab45\">setPayloadOff</a>(int payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">setPayloadOn</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#ae7d585e8eed2eda20125b9d2eb5c4b9c\">setPayloadOn</a>(int payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958\">setValueField</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552\">setValueTemplate</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHABinarySensor.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: HABinarySensor Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"classHABinarySensor-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">HABinarySensor Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"haBinarySensor_8h_source.html\">haBinarySensor.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for HABinarySensor:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classHABinarySensor.png\" usemap=\"#HABinarySensor_map\" alt=\"\"/>\n  <map id=\"HABinarySensor_map\" name=\"HABinarySensor_map\">\n<area href=\"classHAEntity.html\" alt=\"HAEntity\" shape=\"rect\" coords=\"0,0,107,24\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a24cc503973f65dadac7575a2bba823b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#a24cc503973f65dadac7575a2bba823b6\">HABinarySensor</a> ()</td></tr>\n<tr class=\"memdesc:a24cc503973f65dadac7575a2bba823b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Binary sensor constructor.  <a href=\"classHABinarySensor.html#a24cc503973f65dadac7575a2bba823b6\">More...</a><br /></td></tr>\n<tr class=\"separator:a24cc503973f65dadac7575a2bba823b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af305236afbd0405010d1611eac965530\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#af305236afbd0405010d1611eac965530\">setDeviceClass</a> (<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a> devClass)</td></tr>\n<tr class=\"memdesc:af305236afbd0405010d1611eac965530\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Define binary sensor class as <code>haBinarySensorClass_t</code>  <a href=\"classHABinarySensor.html#af305236afbd0405010d1611eac965530\">More...</a><br /></td></tr>\n<tr class=\"separator:af305236afbd0405010d1611eac965530\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9192b104b2c2ac607dc66b98237ff4c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">setPayloadOn</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a9192b104b2c2ac607dc66b98237ff4c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines the string that represents the <b>on state</b>. It will be compared to the message in the <b>state_topic</b> (see value_template for details) <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_on\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_on</a>.  <a href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">More...</a><br /></td></tr>\n<tr class=\"separator:a9192b104b2c2ac607dc66b98237ff4c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3fc9f50d176634428630c03bb15a8d59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">setPayloadOff</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a3fc9f50d176634428630c03bb15a8d59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines the string that represents the <b>off state</b>. It will be compared to the message in the <b>state_topic</b> (see value_template for details) <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_off\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_off</a>.  <a href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">More...</a><br /></td></tr>\n<tr class=\"separator:a3fc9f50d176634428630c03bb15a8d59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae7d585e8eed2eda20125b9d2eb5c4b9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#ae7d585e8eed2eda20125b9d2eb5c4b9c\">setPayloadOn</a> (int payload)</td></tr>\n<tr class=\"memdesc:ae7d585e8eed2eda20125b9d2eb5c4b9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a number that represents the <b>on state</b>. It will be compared to the message in the <b>state_topic</b> (see value_template for details) <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_on\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_on</a>.  <a href=\"classHABinarySensor.html#ae7d585e8eed2eda20125b9d2eb5c4b9c\">More...</a><br /></td></tr>\n<tr class=\"separator:ae7d585e8eed2eda20125b9d2eb5c4b9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a48a5415389f3b0a03e35c883f764ab45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#a48a5415389f3b0a03e35c883f764ab45\">setPayloadOff</a> (int payload)</td></tr>\n<tr class=\"memdesc:a48a5415389f3b0a03e35c883f764ab45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a number that represents the <b>off state</b>. It will be compared to the message in the <b>state_topic</b> (see value_template for details) <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_off\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_off</a>.  <a href=\"classHABinarySensor.html#a48a5415389f3b0a03e35c883f764ab45\">More...</a><br /></td></tr>\n<tr class=\"separator:a48a5415389f3b0a03e35c883f764ab45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a55c51daf4f6f4c37723ce6ed4c44b958\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958\">setValueField</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a55c51daf4f6f4c37723ce6ed4c44b958\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a template that returns a string to be compared to payload_on/payload_off or an empty string, in which case the MQTT message will be removed. Available variables: entity_id. Remove this option when ‘payload_on’ and ‘payload_off’ are sufficient to match your payloads (i.e no pre-processing of original message is required) When setting this, <code>setValueTemplate ()</code> should not be called <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#value_template\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#value_template</a>.  <a href=\"classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958\">More...</a><br /></td></tr>\n<tr class=\"separator:a55c51daf4f6f4c37723ce6ed4c44b958\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2c19a08cf6b4c1260bb85c7cddee552\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552\">setValueTemplate</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:af2c19a08cf6b4c1260bb85c7cddee552\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a template that defines binary sensor value. When setting this you should not call <code>setValueField ()</code> <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#value_template\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#value_template</a>.  <a href=\"classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552\">More...</a><br /></td></tr>\n<tr class=\"separator:af2c19a08cf6b4c1260bb85c7cddee552\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3195d26bdb20255ce0e07c0e2c0d3af7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7\">setOffDelay</a> (uint payload)</td></tr>\n<tr class=\"memdesc:a3195d26bdb20255ce0e07c0e2c0d3af7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">For sensors that only send on state updates (like PIRs), this sets a delay in seconds after which the sensor’s state will be updated back to off. <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#off_delay\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#off_delay</a>.  <a href=\"classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7\">More...</a><br /></td></tr>\n<tr class=\"separator:a3195d26bdb20255ce0e07c0e2c0d3af7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a857bc07743e8564db8476907f925c48e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#a857bc07743e8564db8476907f925c48e\">addExpiration</a> (uint seconds)</td></tr>\n<tr class=\"memdesc:a857bc07743e8564db8476907f925c48e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines the number of seconds after the sensor’s state expires, if it’s not updated. After expiry, the sensor’s state becomes unavailable. <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#expire_after\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#expire_after</a>.  <a href=\"classHABinarySensor.html#a857bc07743e8564db8476907f925c48e\">More...</a><br /></td></tr>\n<tr class=\"separator:a857bc07743e8564db8476907f925c48e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (int bufferlen, uint8_t *buffer)</td></tr>\n<tr class=\"memdesc:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity anounce message to be sent over EnigmaIOT message.  <a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">More...</a><br /></td></tr>\n<tr class=\"separator:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets name suffix. Used for multi entity nodes.  <a href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">More...</a><br /></td></tr>\n<tr class=\"separator:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a> ()</td></tr>\n<tr class=\"memdesc:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enables registering entity attributes as a json object.  <a href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">More...</a><br /></td></tr>\n<tr class=\"separator:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ()</td></tr>\n<tr class=\"memdesc:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets needed buffer size for discovery message.  <a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">More...</a><br /></td></tr>\n<tr class=\"separator:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a843647264ee900edb1ee5c51abef4bd2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">getDiscoveryJson</a> (char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</td></tr>\n<tr class=\"memdesc:a843647264ee900edb1ee5c51abef4bd2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get Home Assistant discovery message using Binary Sensor template.  <a href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">More...</a><br /></td></tr>\n<tr class=\"separator:a843647264ee900edb1ee5c51abef4bd2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab0b307302ea8fe68e39cd89fdda7b9cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">deviceClassStr</a> (<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a> sensorClass)</td></tr>\n<tr class=\"memdesc:ab0b307302ea8fe68e39cd89fdda7b9cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets binary sensor class name from <code>haBinarySensorClass_t</code> <a href=\"https://www.home-assistant.io/integrations/binary_sensor/#device-class\">https://www.home-assistant.io/integrations/binary_sensor/#device-class</a>.  <a href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">More...</a><br /></td></tr>\n<tr class=\"separator:ab0b307302ea8fe68e39cd89fdda7b9cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_static_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_static_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Static Public Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a> (<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType)</td></tr>\n<tr class=\"memdesc:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity type string from haDeviceType_t value <a href=\"https://www.home-assistant.io/docs/mqtt/discovery/\">https://www.home-assistant.io/docs/mqtt/discovery/</a>.  <a href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">More...</a><br /></td></tr>\n<tr class=\"separator:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a> (const char *hassPrefix, const char *nodeName, <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType, const char *nameSuffix=NULL)</td></tr>\n<tr class=\"memdesc:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get discovery message MQTT topic.  <a href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">More...</a><br /></td></tr>\n<tr class=\"separator:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a> ()</td></tr>\n<tr class=\"memdesc:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default constructor. Needed for inheritance.  <a href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">More...</a><br /></td></tr>\n<tr class=\"separator:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td></tr>\n<tr class=\"memdesc:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object memory reservation length.  <a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">More...</a><br /></td></tr>\n<tr class=\"separator:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a></td></tr>\n<tr class=\"memdesc:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">HomeAssistant entity device type.  <a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">More...</a><br /></td></tr>\n<tr class=\"separator:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">DynamicJsonDocument *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td></tr>\n<tr class=\"memdesc:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object to be sent to gateway.  <a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">More...</a><br /></td></tr>\n<tr class=\"separator:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The mqtt binary sensor platform uses an MQTT message received to set the binary sensor’s state to on or off. The state will be updated only after a new message is published on state_topic matching payload_on or payload_off. If these messages are published with the retain flag set, the binary sensor will receive an instant state update after subscription and Home Assistant will display the correct state on startup. Otherwise, the initial state displayed in Home Assistant will be unknown.</p>\n<p>Stateless devices such as buttons, remote controls etc are better represented by MQTT device triggers than by binary sensors.</p>\n<p><a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/</a></p>\n<p>An example of binary sensor discovery message may be like this:</p>\n<p>Topic: homeassistant/binary_sensor/thermostat/config</p>\n<p>Payload:</p>\n<p>{ \"name\":\"thermostat\", // string (optional, default: MQTT Binary Sensor) The name of the binary sensor. \"unique_id\":\"thermostat\", // string (optional) An ID that uniquely identifies this sensor. // If two sensors have the same unique ID, Home Assistant will raise an exception. \"state_topic\":\"EnigmaIOT/thermostat/data\", // string REQUIRED. The MQTT topic subscribed to receive sensor’s state. \"payload_on\":\"ON\", // string (optional, default: ON) The string that represents the on state. // It will be compared to the message in the state_topic (see value_template for details) \"payload_off\":\"OFF\", // string (optional, default: OFF) The string that represents the off state. // It will be compared to the message in the state_topic (see value_template for details) \"value_template\":\"{{value_json.activation}}\", // Defines a template that returns a string to be compared to payload_on/payload_off // or an empty string, in which case the MQTT message will be removed. // Available variables: entity_id. // Remove this option when ‘payload_on’ and ‘payload_off’ are sufficient to match // your payloads (i.e no pre-processing of original message is required). \"expire_after\":30, // Defines the number of seconds after the sensor’s state expires, if it’s not updated. // After expiry, the sensor’s state becomes unavailable. \"device_class\":\"heat\" // Sets the class of the device, changing the device state and icon that is displayed on the frontend. }</p>\n<p>Template message for binary sensor is this</p>\n<p>Topic: homeassistant/binary_sensor/&lt;node_name&gt;/config</p>\n<p>Payload { \"name\":&lt;node_name&gt;_&lt;name_suffix&gt;, \"unique_id\":&lt;node_name&gt;_&lt;name_suffix&gt;, \"device_class\":&lt;device_class&gt;, \"state_topic\":\"&lt;network_name&gt;/&lt;node_name&gt;/data\", \"payload_on\":&lt;cmd_payload_on&gt;, \"payload_off\":&lt;cmd_payload_off&gt;, \"value_template\":\"{{value_json.&lt;value_field&gt;}}\", \"expire_after\":&lt;expire_time&gt; }</p>\n<p>Message template to gateway is like this</p>\n<p>{ \"pl_on\":&lt;cmd_payload_on&gt;, \"pl_off\":&lt;cmd_payload_off&gt;, \"val\":&lt;value_field&gt;, \"exp_aft\":&lt;expire_time&gt;, \"dev_cla\":&lt;device_class&gt;, \"nmsfx\":&lt;name_suffix&gt; }</p>\n<p>If any of the optional values (like \"pl_on\" or \"pl_off\") is not set its key will not be sent into message </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8h_source.html#l00085\">85</a> of file <a class=\"el\" href=\"haBinarySensor_8h_source.html\">haBinarySensor.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"a24cc503973f65dadac7575a2bba823b6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a24cc503973f65dadac7575a2bba823b6\">&#9670;&nbsp;</a></span>HABinarySensor()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">HABinarySensor::HABinarySensor </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Binary sensor constructor. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8h_source.html#l00090\">90</a> of file <a class=\"el\" href=\"haBinarySensor_8h_source.html\">haBinarySensor.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a857bc07743e8564db8476907f925c48e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a857bc07743e8564db8476907f925c48e\">&#9670;&nbsp;</a></span>addExpiration()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HABinarySensor::addExpiration </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>seconds</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Defines the number of seconds after the sensor’s state expires, if it’s not updated. After expiry, the sensor’s state becomes unavailable. <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#expire_after\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#expire_after</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">seconds</td><td>Expiration time in seconds </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8h_source.html#l00178\">178</a> of file <a class=\"el\" href=\"haBinarySensor_8h_source.html\">haBinarySensor.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab0b307302ea8fe68e39cd89fdda7b9cc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab0b307302ea8fe68e39cd89fdda7b9cc\">&#9670;&nbsp;</a></span>deviceClassStr()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">String HABinarySensor::deviceClassStr </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a>&#160;</td>\n          <td class=\"paramname\"><em>sensorClass</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets binary sensor class name from <code>haBinarySensorClass_t</code> <a href=\"https://www.home-assistant.io/integrations/binary_sensor/#device-class\">https://www.home-assistant.io/integrations/binary_sensor/#device-class</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sensorClass</td><td>Binary sensor class code </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8cpp_source.html#l00142\">142</a> of file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a843647264ee900edb1ee5c51abef4bd2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a843647264ee900edb1ee5c51abef4bd2\">&#9670;&nbsp;</a></span>getDiscoveryJson()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t HABinarySensor::getDiscoveryJson </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>buflen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>networkName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">DynamicJsonDocument *&#160;</td>\n          <td class=\"paramname\"><em>inputJSON</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Allows Gateway to get Home Assistant discovery message using Binary Sensor template. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">buffer</td><td>Buffer to hold message string </td></tr>\n    <tr><td class=\"paramname\">buflen</td><td>Buffer size </td></tr>\n    <tr><td class=\"paramname\">nodeName</td><td>Originating node name </td></tr>\n    <tr><td class=\"paramname\">networkName</td><td>EnigmaIOT network name </td></tr>\n    <tr><td class=\"paramname\">inputJSON</td><td>JSON object sent by node with needed data to fill template in </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Discovery message payload </dd></dl>\n<p>msgPack || !len</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8cpp_source.html#l00078\">78</a> of file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af305236afbd0405010d1611eac965530\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af305236afbd0405010d1611eac965530\">&#9670;&nbsp;</a></span>setDeviceClass()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HABinarySensor::setDeviceClass </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a>&#160;</td>\n          <td class=\"paramname\"><em>devClass</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Define binary sensor class as <code>haBinarySensorClass_t</code> </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">devClass</td><td>Device class </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8cpp_source.html#l00013\">13</a> of file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a3195d26bdb20255ce0e07c0e2c0d3af7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3195d26bdb20255ce0e07c0e2c0d3af7\">&#9670;&nbsp;</a></span>setOffDelay()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HABinarySensor::setOffDelay </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>For sensors that only send on state updates (like PIRs), this sets a delay in seconds after which the sensor’s state will be updated back to off. <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#off_delay\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#off_delay</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Off delay in seconds </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8cpp_source.html#l00052\">52</a> of file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a3fc9f50d176634428630c03bb15a8d59\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3fc9f50d176634428630c03bb15a8d59\">&#9670;&nbsp;</a></span>setPayloadOff() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HABinarySensor::setPayloadOff </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Defines the string that represents the <b>off state</b>. It will be compared to the message in the <b>state_topic</b> (see value_template for details) <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_off\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_off</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>OFF state string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8cpp_source.html#l00026\">26</a> of file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a48a5415389f3b0a03e35c883f764ab45\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a48a5415389f3b0a03e35c883f764ab45\">&#9670;&nbsp;</a></span>setPayloadOff() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HABinarySensor::setPayloadOff </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Defines a number that represents the <b>off state</b>. It will be compared to the message in the <b>state_topic</b> (see value_template for details) <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_off\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_off</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>OFF state value </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8cpp_source.html#l00036\">36</a> of file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a9192b104b2c2ac607dc66b98237ff4c4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9192b104b2c2ac607dc66b98237ff4c4\">&#9670;&nbsp;</a></span>setPayloadOn() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HABinarySensor::setPayloadOn </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Defines the string that represents the <b>on state</b>. It will be compared to the message in the <b>state_topic</b> (see value_template for details) <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_on\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_on</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8cpp_source.html#l00020\">20</a> of file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae7d585e8eed2eda20125b9d2eb5c4b9c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae7d585e8eed2eda20125b9d2eb5c4b9c\">&#9670;&nbsp;</a></span>setPayloadOn() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HABinarySensor::setPayloadOn </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Defines a number that represents the <b>on state</b>. It will be compared to the message in the <b>state_topic</b> (see value_template for details) <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_on\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_on</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state value </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8cpp_source.html#l00032\">32</a> of file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a55c51daf4f6f4c37723ce6ed4c44b958\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a55c51daf4f6f4c37723ce6ed4c44b958\">&#9670;&nbsp;</a></span>setValueField()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HABinarySensor::setValueField </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Defines a template that returns a string to be compared to payload_on/payload_off or an empty string, in which case the MQTT message will be removed. Available variables: entity_id. Remove this option when ‘payload_on’ and ‘payload_off’ are sufficient to match your payloads (i.e no pre-processing of original message is required) When setting this, <code>setValueTemplate ()</code> should not be called <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#value_template\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#value_template</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state value </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8cpp_source.html#l00040\">40</a> of file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af2c19a08cf6b4c1260bb85c7cddee552\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af2c19a08cf6b4c1260bb85c7cddee552\">&#9670;&nbsp;</a></span>setValueTemplate()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HABinarySensor::setValueTemplate </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Defines a template that defines binary sensor value. When setting this you should not call <code>setValueField ()</code> <a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/#value_template\">https://www.home-assistant.io/integrations/binary_sensor.mqtt/#value_template</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Value template definition </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haBinarySensor_8cpp_source.html#l00046\">46</a> of file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"haBinarySensor_8h_source.html\">haBinarySensor.h</a></li>\n<li>src/<a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHACover-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">HACover Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classHACover.html\">HACover</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">deviceClassStr</a>(haCoverClass_t sensorClass)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a>(haDeviceType_t entityType)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a>(int bufferlen, uint8_t *buffer)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">getDiscoveryJson</a>(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a>(const char *hassPrefix, const char *nodeName, haDeviceType_t entityType, const char *nameSuffix=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#acc7fe4e246ebd9af4ff958447ec78d86\">HACover</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#add81f3124d1f1f66745798d27b467098\">setDeviceClass</a>(haCoverClass_t devClass)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#a372d3fac011d58154daca97311fb5a94\">setPayloadClose</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#ac2f06095a52cd09cf77fb881754bffd4\">setPayloadGoto</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#a20860a2f4181be32c69a583104cf9181\">setPayloadOpen</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#a727afd76b2e852a0e177c5d64fff5894\">setPayloadStop</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0\">setStateClosed</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69\">setStateClosing</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42\">setStateOpen</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2\">setStateOpening</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHACover.html#a2341ee037b2dae238703f15bf95e6ccf\">setStateStopped</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHACover.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: HACover Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"classHACover-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">HACover Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"haCover_8h_source.html\">haCover.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for HACover:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classHACover.png\" usemap=\"#HACover_map\" alt=\"\"/>\n  <map id=\"HACover_map\" name=\"HACover_map\">\n<area href=\"classHAEntity.html\" alt=\"HAEntity\" shape=\"rect\" coords=\"0,0,65,24\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:acc7fe4e246ebd9af4ff958447ec78d86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#acc7fe4e246ebd9af4ff958447ec78d86\">HACover</a> ()</td></tr>\n<tr class=\"memdesc:acc7fe4e246ebd9af4ff958447ec78d86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cover constructor.  <a href=\"classHACover.html#acc7fe4e246ebd9af4ff958447ec78d86\">More...</a><br /></td></tr>\n<tr class=\"separator:acc7fe4e246ebd9af4ff958447ec78d86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:add81f3124d1f1f66745798d27b467098\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#add81f3124d1f1f66745798d27b467098\">setDeviceClass</a> (<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a> devClass)</td></tr>\n<tr class=\"memdesc:add81f3124d1f1f66745798d27b467098\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Define cover class as <code>haCoverClass_t</code>  <a href=\"classHACover.html#add81f3124d1f1f66745798d27b467098\">More...</a><br /></td></tr>\n<tr class=\"separator:add81f3124d1f1f66745798d27b467098\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a20860a2f4181be32c69a583104cf9181\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#a20860a2f4181be32c69a583104cf9181\">setPayloadOpen</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a20860a2f4181be32c69a583104cf9181\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The command payload that opens the cover <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#payload_open\">https://www.home-assistant.io/integrations/cover.mqtt/#payload_open</a>.  <a href=\"classHACover.html#a20860a2f4181be32c69a583104cf9181\">More...</a><br /></td></tr>\n<tr class=\"separator:a20860a2f4181be32c69a583104cf9181\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a372d3fac011d58154daca97311fb5a94\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#a372d3fac011d58154daca97311fb5a94\">setPayloadClose</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a372d3fac011d58154daca97311fb5a94\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The command payload that closes the cover <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#payload_close\">https://www.home-assistant.io/integrations/cover.mqtt/#payload_close</a>.  <a href=\"classHACover.html#a372d3fac011d58154daca97311fb5a94\">More...</a><br /></td></tr>\n<tr class=\"separator:a372d3fac011d58154daca97311fb5a94\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a727afd76b2e852a0e177c5d64fff5894\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#a727afd76b2e852a0e177c5d64fff5894\">setPayloadStop</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a727afd76b2e852a0e177c5d64fff5894\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The command payload that stops the cover <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#payload_stop\">https://www.home-assistant.io/integrations/cover.mqtt/#payload_stop</a>.  <a href=\"classHACover.html#a727afd76b2e852a0e177c5d64fff5894\">More...</a><br /></td></tr>\n<tr class=\"separator:a727afd76b2e852a0e177c5d64fff5894\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac2f06095a52cd09cf77fb881754bffd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#ac2f06095a52cd09cf77fb881754bffd4\">setPayloadGoto</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:ac2f06095a52cd09cf77fb881754bffd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The command that moves the cover to specific position.  <a href=\"classHACover.html#ac2f06095a52cd09cf77fb881754bffd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ac2f06095a52cd09cf77fb881754bffd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac7086eaf2411420d3a36df4ba3a55d42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42\">setStateOpen</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:ac7086eaf2411420d3a36df4ba3a55d42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents the open state <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#state_open\">https://www.home-assistant.io/integrations/cover.mqtt/#state_open</a>.  <a href=\"classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42\">More...</a><br /></td></tr>\n<tr class=\"separator:ac7086eaf2411420d3a36df4ba3a55d42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4b984a52e4dae0e93fcd2a360be339d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2\">setStateOpening</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a4b984a52e4dae0e93fcd2a360be339d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents the opening state <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#state_opening\">https://www.home-assistant.io/integrations/cover.mqtt/#state_opening</a>.  <a href=\"classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2\">More...</a><br /></td></tr>\n<tr class=\"separator:a4b984a52e4dae0e93fcd2a360be339d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7caf15ccd3d71002c83f67ef65e814d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0\">setStateClosed</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a7caf15ccd3d71002c83f67ef65e814d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents the closed state <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#state_closed\">https://www.home-assistant.io/integrations/cover.mqtt/#state_closed</a>.  <a href=\"classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0\">More...</a><br /></td></tr>\n<tr class=\"separator:a7caf15ccd3d71002c83f67ef65e814d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4bfa8996be4012ccf22cae3385ddcc69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69\">setStateClosing</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a4bfa8996be4012ccf22cae3385ddcc69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents the closing state <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#state_closing\">https://www.home-assistant.io/integrations/cover.mqtt/#state_closing</a>.  <a href=\"classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69\">More...</a><br /></td></tr>\n<tr class=\"separator:a4bfa8996be4012ccf22cae3385ddcc69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2341ee037b2dae238703f15bf95e6ccf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#a2341ee037b2dae238703f15bf95e6ccf\">setStateStopped</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a2341ee037b2dae238703f15bf95e6ccf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents the stopped state <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#state_stopped\">https://www.home-assistant.io/integrations/cover.mqtt/#state_stopped</a>.  <a href=\"classHACover.html#a2341ee037b2dae238703f15bf95e6ccf\">More...</a><br /></td></tr>\n<tr class=\"separator:a2341ee037b2dae238703f15bf95e6ccf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (int bufferlen, uint8_t *buffer)</td></tr>\n<tr class=\"memdesc:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity anounce message to be sent over EnigmaIOT message.  <a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">More...</a><br /></td></tr>\n<tr class=\"separator:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets name suffix. Used for multi entity nodes.  <a href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">More...</a><br /></td></tr>\n<tr class=\"separator:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a> ()</td></tr>\n<tr class=\"memdesc:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enables registering entity attributes as a json object.  <a href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">More...</a><br /></td></tr>\n<tr class=\"separator:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ()</td></tr>\n<tr class=\"memdesc:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets needed buffer size for discovery message.  <a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">More...</a><br /></td></tr>\n<tr class=\"separator:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:ab8bc696d21186a4468f8add2c5e8d7c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">getDiscoveryJson</a> (char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</td></tr>\n<tr class=\"memdesc:ab8bc696d21186a4468f8add2c5e8d7c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get Home Assistant discovery message using Cover template.  <a href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ab8bc696d21186a4468f8add2c5e8d7c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab9e4ae5934dd24bbd5014ec9eb16e2ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">deviceClassStr</a> (<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a> sensorClass)</td></tr>\n<tr class=\"memdesc:ab9e4ae5934dd24bbd5014ec9eb16e2ef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets binary sensor class name from <code>haCoverClass_t</code> <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#device_class\">https://www.home-assistant.io/integrations/cover.mqtt/#device_class</a>.  <a href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">More...</a><br /></td></tr>\n<tr class=\"separator:ab9e4ae5934dd24bbd5014ec9eb16e2ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_static_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_static_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Static Public Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a> (<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType)</td></tr>\n<tr class=\"memdesc:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity type string from haDeviceType_t value <a href=\"https://www.home-assistant.io/docs/mqtt/discovery/\">https://www.home-assistant.io/docs/mqtt/discovery/</a>.  <a href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">More...</a><br /></td></tr>\n<tr class=\"separator:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a> (const char *hassPrefix, const char *nodeName, <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType, const char *nameSuffix=NULL)</td></tr>\n<tr class=\"memdesc:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get discovery message MQTT topic.  <a href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">More...</a><br /></td></tr>\n<tr class=\"separator:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a> ()</td></tr>\n<tr class=\"memdesc:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default constructor. Needed for inheritance.  <a href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">More...</a><br /></td></tr>\n<tr class=\"separator:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td></tr>\n<tr class=\"memdesc:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object memory reservation length.  <a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">More...</a><br /></td></tr>\n<tr class=\"separator:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a></td></tr>\n<tr class=\"memdesc:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">HomeAssistant entity device type.  <a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">More...</a><br /></td></tr>\n<tr class=\"separator:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">DynamicJsonDocument *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td></tr>\n<tr class=\"memdesc:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object to be sent to gateway.  <a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">More...</a><br /></td></tr>\n<tr class=\"separator:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>A cover entity can be in states (open, opening, closed or closing). If a state_topic is configured, the entity’s state will be updated only after an MQTT message is received on state_topic matching state_open, state_opening, state_closed or state_closing. For covers that only report 3 states (opening, closing, stopped), a state_stopped state can be configured to indicate that the device is not moving. When this payload is received on the state_topic, and a position_topic is not configured, the cover will be set to state closed if its state was closing and to state open otherwise. If a position_topic is set, the cover’s position will be used to set the state to either open or closed state. If the cover reports its position, a position_topic can be configured for receiving the position. If no state_topic is configured, the cover’s state will be set to either open or closed when a position is received.</p>\n<p><a href=\"https://www.home-assistant.io/integrations/cover.mqtt/\">https://www.home-assistant.io/integrations/cover.mqtt/</a></p>\n<p>An example of cover discovery message may be like this:</p>\n<p>Topic: homeassistant/cover/cover-bedroom/config</p>\n<p>Payload:</p>\n<p>{ \"name\":\"cover-bedroom\", // string (optional, default: MQTT Cover) The name of the cover. \"unique_id\":\"cover-bedroom\", // string (optional) An ID that uniquely identifies this cover. If two covers have // the same unique ID, Home Assistant will raise an exception. \"command_topic\":\"EnigmaIOT/cover-bedroom/set/data\", // string (optional) The MQTT topic to publish commands to control the cover. \"device_class\":\"shade\", // string (optional) Sets the class of the device, changing the device state and icon that is displayed on the frontend. // <a href=\"https://www.home-assistant.io/integrations/cover/\">https://www.home-assistant.io/integrations/cover/</a> \"json_attributes_topic\":\"EnigmaIOT/cover-bedroom/data\", // string (optional) The MQTT topic subscribed to receive a JSON dictionary // payload and then set as sensor attributes. Usage example can be found in MQTT sensor documentation \"json_attributes_template\":\"{{value_json}}\", // template (optional) Defines a template to extract the JSON dictionary from messages received // on the json_attributes_topic. Usage example can be found in MQTT sensor documentation \"payload_close\":\"{\\\"cmd\":\"dd\"}\",  // string (optional, default: CLOSE) The command payload that closes the cover\n  \"payload_open\":\"{\"cmd\":\"uu\"}\",   // string (optional, default: OPEN) The command payload that opens the cover.\n  \"payload_stop\":\"{\"cmd\":\"stop\"}\",  // string (optional, default: STOP) The command payload that stops the cover.\n  \"position_topic\":\"EnigmaIOT/cover-bedroom/data\",  // string (optional) The MQTT topic subscribed to receive cover position messages\n  \"position_template\":\"{{value_json.pos}}\",  // string (optional) Defines a template that can be used to extract the payload for the position_topic topic\n  \"set_position_topic\":\"EnigmaIOT/cover-bedroom/set/data, // string (optional) The MQTT topic to publish position commands to. // You need to set position_topic as well if you want to use position topic. // Use template if position topic wants different values than within range position_closed - position_open. // If template is not defined and position_closed != 100 and position_open != 0 then proper position // value is calculated from percentage position \"set_position_template\":\"{\\\"cmd\":\"go\",\"pos\":{{position|int}}}\", // string (optional) Defines a template to define the position to be sent to the // set_position_topic topic. Incoming position value is available for use in the template ``. // If no template is defined, the position (0-100) will be calculated according to // position_open and <code>position_closed</code> values \"state_closed\":\"CLOSED\"\",  // string (optional, default: closed) The payload that represents the closed state\n  \"state_closing\":\"CLOSING\",  // string (optional, default: closing) The payload that represents the closing state\n  \"state_open\":\"OPEN\",  // string (optional, default: open) The payload that represents the open state\n  \"state_opening\":\"OPENING\",  // string (optional, default: opening) The payload that represents the opening state\n  \"state_stopped\":\"STOPPED\",  // string (optional, default: stopped) The payload that represents the stopped state (for covers that do not report open/closed state)\n  \"state_topic\":\"EnigmaIOT/cover-bedroom/data\",  //  string (optional) The MQTT topic subscribed to receive cover state messages. State topic can only read (open, opening, closed, closing or stopped) state\n  \"value_template\":\"{{value_json.state}}\", // string (optional) Defines a template that can be used to extract the payload for the state_topic topic }</p>\n<p>Template message for cover is this</p>\n<p>Topic: homeassistant/cover/&lt;node_name&gt;_&lt;name_suffix&gt;/config</p>\n<p>Payload { \"name\":&lt;node_name&gt;_&lt;name_suffix&gt;, \"unique_id\":&lt;node_name&gt;_&lt;name_suffix&gt;, \"command_topic\":&lt;network_name&gt;/&lt;node_name&gt;/set/data, \"device_class\":&lt;device_class&gt;, \"json_attributes_topic\":\"&lt;network_name&gt;/&lt;node_name&gt;/data\", \"json_attributes_template\":\"{{value_json}}\", \"payload_close\":\"{\\\"cmd\":&lt;pl_cls&gt;}\",\n  \"payload_open\":\"{\"cmd\":&lt;pl_open&gt;}\",\n  \"payload_stop\":\"{\"cmd\":&lt;pl_stop&gt;}\",\n  \"position_topic\":\"&lt;network_name&gt;/&lt;node_name&gt;/data\",\n  \"position_template\":\"{{value_json.pos}}\",\n  \"set_position_topic\":\"&lt;network_name&gt;/&lt;node_name&gt;/set/data, \"set_position_template\":\"{\\\"cmd\":&lt;pl_goto&gt;,\"pos\":{{position|int}}}\",\n  \"state_closed\":&lt;stat_clsd&gt;,\n  \"state_closing\":&lt;stat_closing&gt;,\n  \"state_open\":&lt;stat_open&gt;,\n  \"state_opening\":&lt;stat_opening&gt;,\n  \"state_stopped\":&lt;stat_stopped&gt;,\n  \"state_topic\":\"&lt;network_name&gt;/&lt;node_name&gt;/data\",\n  \"value_template\":\"{{value_json.state}}\", }</p>\n<p>Message to gateway is like following</p>\n<p>{ \"dev_cla\":&lt;device_class&gt;, \"pl_cls\":&lt;pl_cls&gt;&gt;, \"pl_open\":&lt;pl_open&gt;, \"pl_stop\":&lt;pl_stop&gt;, \"pl_goto\":&lt;pl_goto&gt;, \"pos_open\":&lt;pos_open&gt;, \"pos_clsd\":&lt;pos_clsd&gt;, \"set_pos_tpl\":&lt;pl_goto&gt;, \"stat_clsd\":&lt;stat_clsd&gt;, \"stat_closing\":&lt;stat_closing&gt;, \"stat_open\":&lt;stat_open&gt;, \"stat_opening\":&lt;stat_opening&gt;, \"stat_stopped\":&lt;stat_stopped&gt;, } </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8h_source.html#l00119\">119</a> of file <a class=\"el\" href=\"haCover_8h_source.html\">haCover.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"acc7fe4e246ebd9af4ff958447ec78d86\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acc7fe4e246ebd9af4ff958447ec78d86\">&#9670;&nbsp;</a></span>HACover()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">HACover::HACover </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Cover constructor. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8h_source.html#l00126\">126</a> of file <a class=\"el\" href=\"haCover_8h_source.html\">haCover.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"ab9e4ae5934dd24bbd5014ec9eb16e2ef\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">&#9670;&nbsp;</a></span>deviceClassStr()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">String HACover::deviceClassStr </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a>&#160;</td>\n          <td class=\"paramname\"><em>sensorClass</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets binary sensor class name from <code>haCoverClass_t</code> <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#device_class\">https://www.home-assistant.io/integrations/cover.mqtt/#device_class</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sensorClass</td><td>Cover class code </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00192\">192</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab8bc696d21186a4468f8add2c5e8d7c2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab8bc696d21186a4468f8add2c5e8d7c2\">&#9670;&nbsp;</a></span>getDiscoveryJson()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t HACover::getDiscoveryJson </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>buflen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>networkName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">DynamicJsonDocument *&#160;</td>\n          <td class=\"paramname\"><em>inputJSON</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Allows Gateway to get Home Assistant discovery message using Cover template. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">buffer</td><td>Buffer to hold message string </td></tr>\n    <tr><td class=\"paramname\">buflen</td><td>Buffer size </td></tr>\n    <tr><td class=\"paramname\">nodeName</td><td>Originating node name </td></tr>\n    <tr><td class=\"paramname\">networkName</td><td>EnigmaIOT network name </td></tr>\n    <tr><td class=\"paramname\">inputJSON</td><td>JSON object sent by node with needed data to fill template in </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Discovery message payload </dd></dl>\n<p>msgPack || !len</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00114\">114</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"add81f3124d1f1f66745798d27b467098\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#add81f3124d1f1f66745798d27b467098\">&#9670;&nbsp;</a></span>setDeviceClass()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HACover::setDeviceClass </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a>&#160;</td>\n          <td class=\"paramname\"><em>devClass</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Define cover class as <code>haCoverClass_t</code> </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">devClass</td><td>Device class </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00013\">13</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a372d3fac011d58154daca97311fb5a94\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a372d3fac011d58154daca97311fb5a94\">&#9670;&nbsp;</a></span>setPayloadClose()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HACover::setPayloadClose </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The command payload that closes the cover <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#payload_close\">https://www.home-assistant.io/integrations/cover.mqtt/#payload_close</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Close command string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00026\">26</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ac2f06095a52cd09cf77fb881754bffd4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac2f06095a52cd09cf77fb881754bffd4\">&#9670;&nbsp;</a></span>setPayloadGoto()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HACover::setPayloadGoto </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The command that moves the cover to specific position. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Go to command string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00038\">38</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a20860a2f4181be32c69a583104cf9181\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a20860a2f4181be32c69a583104cf9181\">&#9670;&nbsp;</a></span>setPayloadOpen()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HACover::setPayloadOpen </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The command payload that opens the cover <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#payload_open\">https://www.home-assistant.io/integrations/cover.mqtt/#payload_open</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Open command string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00020\">20</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a727afd76b2e852a0e177c5d64fff5894\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a727afd76b2e852a0e177c5d64fff5894\">&#9670;&nbsp;</a></span>setPayloadStop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HACover::setPayloadStop </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The command payload that stops the cover <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#payload_stop\">https://www.home-assistant.io/integrations/cover.mqtt/#payload_stop</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Stop command string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00032\">32</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a7caf15ccd3d71002c83f67ef65e814d0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7caf15ccd3d71002c83f67ef65e814d0\">&#9670;&nbsp;</a></span>setStateClosed()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HACover::setStateClosed </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents the closed state <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#state_closed\">https://www.home-assistant.io/integrations/cover.mqtt/#state_closed</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Closed state string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00056\">56</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4bfa8996be4012ccf22cae3385ddcc69\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4bfa8996be4012ccf22cae3385ddcc69\">&#9670;&nbsp;</a></span>setStateClosing()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HACover::setStateClosing </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents the closing state <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#state_closing\">https://www.home-assistant.io/integrations/cover.mqtt/#state_closing</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Closing state string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00062\">62</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ac7086eaf2411420d3a36df4ba3a55d42\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac7086eaf2411420d3a36df4ba3a55d42\">&#9670;&nbsp;</a></span>setStateOpen()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HACover::setStateOpen </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents the open state <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#state_open\">https://www.home-assistant.io/integrations/cover.mqtt/#state_open</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Open state string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00044\">44</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4b984a52e4dae0e93fcd2a360be339d2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4b984a52e4dae0e93fcd2a360be339d2\">&#9670;&nbsp;</a></span>setStateOpening()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HACover::setStateOpening </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents the opening state <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#state_opening\">https://www.home-assistant.io/integrations/cover.mqtt/#state_opening</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Opening state string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00050\">50</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2341ee037b2dae238703f15bf95e6ccf\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2341ee037b2dae238703f15bf95e6ccf\">&#9670;&nbsp;</a></span>setStateStopped()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HACover::setStateStopped </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents the stopped state <a href=\"https://www.home-assistant.io/integrations/cover.mqtt/#state_stopped\">https://www.home-assistant.io/integrations/cover.mqtt/#state_stopped</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Stopped state string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haCover_8cpp_source.html#l00068\">68</a> of file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"haCover_8h_source.html\">haCover.h</a></li>\n<li>src/<a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHAEntity-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">HAEntity Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a>(haDeviceType_t entityType)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a>(int bufferlen, uint8_t *buffer)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a>(const char *hassPrefix, const char *nodeName, haDeviceType_t entityType, const char *nameSuffix=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHAEntity.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: HAEntity Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classHAEntity-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">HAEntity Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for HAEntity:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classHAEntity.png\" usemap=\"#HAEntity_map\" alt=\"\"/>\n  <map id=\"HAEntity_map\" name=\"HAEntity_map\">\n<area href=\"classHABinarySensor.html\" alt=\"HABinarySensor\" shape=\"rect\" coords=\"0,56,107,80\"/>\n<area href=\"classHACover.html\" alt=\"HACover\" shape=\"rect\" coords=\"117,56,224,80\"/>\n<area href=\"classHASensor.html\" alt=\"HASensor\" shape=\"rect\" coords=\"234,56,341,80\"/>\n<area href=\"classHASwitch.html\" alt=\"HASwitch\" shape=\"rect\" coords=\"351,56,458,80\"/>\n<area href=\"classHATrigger.html\" alt=\"HATrigger\" shape=\"rect\" coords=\"468,56,575,80\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a64140dc1e3e041eafbcd6eca04abb9ef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (int bufferlen, uint8_t *buffer)</td></tr>\n<tr class=\"memdesc:a64140dc1e3e041eafbcd6eca04abb9ef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity anounce message to be sent over EnigmaIOT message.  <a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">More...</a><br /></td></tr>\n<tr class=\"separator:a64140dc1e3e041eafbcd6eca04abb9ef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bd8a543ed665f9e48ca47b220123063\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a1bd8a543ed665f9e48ca47b220123063\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets name suffix. Used for multi entity nodes.  <a href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">More...</a><br /></td></tr>\n<tr class=\"separator:a1bd8a543ed665f9e48ca47b220123063\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2b81d38a3d72a0848b81f6d240b781da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a> ()</td></tr>\n<tr class=\"memdesc:a2b81d38a3d72a0848b81f6d240b781da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enables registering entity attributes as a json object.  <a href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">More...</a><br /></td></tr>\n<tr class=\"separator:a2b81d38a3d72a0848b81f6d240b781da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad299ecdb73519da56e2f5439941af544\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ()</td></tr>\n<tr class=\"memdesc:ad299ecdb73519da56e2f5439941af544\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets needed buffer size for discovery message.  <a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">More...</a><br /></td></tr>\n<tr class=\"separator:ad299ecdb73519da56e2f5439941af544\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:ac083c92c7973db1f2b51ede001768f2f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a> (<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType)</td></tr>\n<tr class=\"memdesc:ac083c92c7973db1f2b51ede001768f2f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity type string from haDeviceType_t value <a href=\"https://www.home-assistant.io/docs/mqtt/discovery/\">https://www.home-assistant.io/docs/mqtt/discovery/</a>.  <a href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">More...</a><br /></td></tr>\n<tr class=\"separator:ac083c92c7973db1f2b51ede001768f2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a264a9779679d77db65566233a952100d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a> (const char *hassPrefix, const char *nodeName, <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType, const char *nameSuffix=NULL)</td></tr>\n<tr class=\"memdesc:a264a9779679d77db65566233a952100d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get discovery message MQTT topic.  <a href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">More...</a><br /></td></tr>\n<tr class=\"separator:a264a9779679d77db65566233a952100d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a1e3da7d22fd155a3661f754b9b1f64a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a> ()</td></tr>\n<tr class=\"memdesc:a1e3da7d22fd155a3661f754b9b1f64a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default constructor. Needed for inheritance.  <a href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">More...</a><br /></td></tr>\n<tr class=\"separator:a1e3da7d22fd155a3661f754b9b1f64a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:aeff41e84aaa1b70df8137cbd05d8ddbe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td></tr>\n<tr class=\"memdesc:aeff41e84aaa1b70df8137cbd05d8ddbe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object memory reservation length.  <a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">More...</a><br /></td></tr>\n<tr class=\"separator:aeff41e84aaa1b70df8137cbd05d8ddbe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8c9d02fb762b3af1739ba632479473d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a></td></tr>\n<tr class=\"memdesc:a8c9d02fb762b3af1739ba632479473d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">HomeAssistant entity device type.  <a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">More...</a><br /></td></tr>\n<tr class=\"separator:a8c9d02fb762b3af1739ba632479473d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aadb3c5676c00fc0c8b3939888e408d2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">DynamicJsonDocument *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td></tr>\n<tr class=\"memdesc:aadb3c5676c00fc0c8b3939888e408d2b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object to be sent to gateway.  <a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">More...</a><br /></td></tr>\n<tr class=\"separator:aadb3c5676c00fc0c8b3939888e408d2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00132\">132</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"a1e3da7d22fd155a3661f754b9b1f64a3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1e3da7d22fd155a3661f754b9b1f64a3\">&#9670;&nbsp;</a></span>HAEntity()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">HAEntity::HAEntity </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Default constructor. Needed for inheritance. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00143\">143</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a2b81d38a3d72a0848b81f6d240b781da\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2b81d38a3d72a0848b81f6d240b781da\">&#9670;&nbsp;</a></span>allowSendAttributes()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HAEntity::allowSendAttributes </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Enables registering entity attributes as a json object. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00209\">209</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac083c92c7973db1f2b51ede001768f2f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac083c92c7973db1f2b51ede001768f2f\">&#9670;&nbsp;</a></span>deviceTypeStr()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static String HAEntity::deviceTypeStr </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>entityType</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets entity type string from haDeviceType_t value <a href=\"https://www.home-assistant.io/docs/mqtt/discovery/\">https://www.home-assistant.io/docs/mqtt/discovery/</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">entityType</td><td>Entity code </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Entity string </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00227\">227</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a64140dc1e3e041eafbcd6eca04abb9ef\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a64140dc1e3e041eafbcd6eca04abb9ef\">&#9670;&nbsp;</a></span>getAnounceMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t HAEntity::getAnounceMessage </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>bufferlen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets entity anounce message to be sent over EnigmaIOT message. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">bufferlen</td><td>Buffer length. Needed legth can be got using <code>measureMessage ()</code> </td></tr>\n    <tr><td class=\"paramname\">buffer</td><td>Buffer to put the payload in </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Amount of data written to buffer </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00153\">153</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a264a9779679d77db65566233a952100d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a264a9779679d77db65566233a952100d\">&#9670;&nbsp;</a></span>getDiscoveryTopic()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static String HAEntity::getDiscoveryTopic </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>hassPrefix</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>entityType</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>nameSuffix</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Allows Gateway to get discovery message MQTT topic. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">hassPrefix</td><td>HomeAssistant topic prefix. Usually it is \"homeassistant\" </td></tr>\n    <tr><td class=\"paramname\">nodeName</td><td>Name of the node </td></tr>\n    <tr><td class=\"paramname\">entityType</td><td>Entity type. Used to differentiate discovery message template </td></tr>\n    <tr><td class=\"paramname\">nameSuffix</td><td>This is used to allow a single node to have different HomeAssistant entities. For instance, a smart switch may behave as a power, voltage and current sensor too. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>MQTT topic </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00277\">277</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad299ecdb73519da56e2f5439941af544\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad299ecdb73519da56e2f5439941af544\">&#9670;&nbsp;</a></span>measureMessage()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t HAEntity::measureMessage </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets needed buffer size for discovery message. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Minimum buffer size </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00217\">217</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1bd8a543ed665f9e48ca47b220123063\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1bd8a543ed665f9e48ca47b220123063\">&#9670;&nbsp;</a></span>setNameSufix()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HAEntity::setNameSufix </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets name suffix. Used for multi entity nodes. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Name suffix </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00200\">200</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"aeff41e84aaa1b70df8137cbd05d8ddbe\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aeff41e84aaa1b70df8137cbd05d8ddbe\">&#9670;&nbsp;</a></span>capacity</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t HAEntity::capacity</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>JSON object memory reservation length. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00134\">134</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a8c9d02fb762b3af1739ba632479473d5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8c9d02fb762b3af1739ba632479473d5\">&#9670;&nbsp;</a></span>deviceType</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> HAEntity::deviceType = <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>HomeAssistant entity device type. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00135\">135</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aadb3c5676c00fc0c8b3939888e408d2b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aadb3c5676c00fc0c8b3939888e408d2b\">&#9670;&nbsp;</a></span>entityConfig</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">DynamicJsonDocument* HAEntity::entityConfig</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>JSON object to be sent to gateway. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00138\">138</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following file:<ul>\n<li>src/<a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHASensor-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">HASensor Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classHASensor.html\">HASensor</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">deviceClassStr</a>(haSensorClass_t sensorClass)</td><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html\">HASensor</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a>(haDeviceType_t entityType)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a>(int bufferlen, uint8_t *buffer)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">getDiscoveryJson</a>(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</td><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html\">HASensor</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a>(const char *hassPrefix, const char *nodeName, haDeviceType_t entityType, const char *nameSuffix=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html#a07979a82942d08d6f24db5b76e6fe269\">HASensor</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html\">HASensor</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">setDeviceClass</a>(haSensorClass_t devClass)</td><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html\">HASensor</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">setExpireTime</a>(uint payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html\">HASensor</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">setUnitOfMeasurement</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html\">HASensor</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">setValueField</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html\">HASensor</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html#a41e55b745b034127a7d7a98cb50d4559\">setValueTemplate</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASensor.html\">HASensor</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHASensor.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: HASensor Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"classHASensor-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">HASensor Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"haSensor_8h_source.html\">haSensor.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for HASensor:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classHASensor.png\" usemap=\"#HASensor_map\" alt=\"\"/>\n  <map id=\"HASensor_map\" name=\"HASensor_map\">\n<area href=\"classHAEntity.html\" alt=\"HAEntity\" shape=\"rect\" coords=\"0,0,70,24\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a07979a82942d08d6f24db5b76e6fe269\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASensor.html#a07979a82942d08d6f24db5b76e6fe269\">HASensor</a> ()</td></tr>\n<tr class=\"memdesc:a07979a82942d08d6f24db5b76e6fe269\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sensor constructor.  <a href=\"classHASensor.html#a07979a82942d08d6f24db5b76e6fe269\">More...</a><br /></td></tr>\n<tr class=\"separator:a07979a82942d08d6f24db5b76e6fe269\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acdd930c6953bd7383eac0d58b3693f71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">setDeviceClass</a> (<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a> devClass)</td></tr>\n<tr class=\"memdesc:acdd930c6953bd7383eac0d58b3693f71\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Define sensor class as <code>haSensorClass_t</code> <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#device_class\">https://www.home-assistant.io/integrations/sensor.mqtt/#device_class</a>.  <a href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">More...</a><br /></td></tr>\n<tr class=\"separator:acdd930c6953bd7383eac0d58b3693f71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afcb6f12671331f88f5bc2b940be9221f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">setExpireTime</a> (uint payload)</td></tr>\n<tr class=\"memdesc:afcb6f12671331f88f5bc2b940be9221f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines the number of seconds after the sensor’s state expires, if it’s not updated. After expiry, the sensor’s state becomes unavailable. <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#expire_after\">https://www.home-assistant.io/integrations/sensor.mqtt/#expire_after</a>.  <a href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">More...</a><br /></td></tr>\n<tr class=\"separator:afcb6f12671331f88f5bc2b940be9221f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adad5ecbe11d2c2fcdc62be14acc8b89e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">setUnitOfMeasurement</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:adad5ecbe11d2c2fcdc62be14acc8b89e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set unit of measure <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#unit_of_measurement\">https://www.home-assistant.io/integrations/sensor.mqtt/#unit_of_measurement</a>.  <a href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">More...</a><br /></td></tr>\n<tr class=\"separator:adad5ecbe11d2c2fcdc62be14acc8b89e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a61e3c5e250794fc2c8ad2f96da1be6dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">setValueField</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a61e3c5e250794fc2c8ad2f96da1be6dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a json key that defines sensor value. When setting this, <code>setValueTemplate ()</code> should not be called <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#value_template\">https://www.home-assistant.io/integrations/sensor.mqtt/#value_template</a>.  <a href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">More...</a><br /></td></tr>\n<tr class=\"separator:a61e3c5e250794fc2c8ad2f96da1be6dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41e55b745b034127a7d7a98cb50d4559\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASensor.html#a41e55b745b034127a7d7a98cb50d4559\">setValueTemplate</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a41e55b745b034127a7d7a98cb50d4559\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a template that defines sensor value. When setting this you should not call <code>setValueField ()</code> <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#value_template\">https://www.home-assistant.io/integrations/sensor.mqtt/#value_template</a>.  <a href=\"classHASensor.html#a41e55b745b034127a7d7a98cb50d4559\">More...</a><br /></td></tr>\n<tr class=\"separator:a41e55b745b034127a7d7a98cb50d4559\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (int bufferlen, uint8_t *buffer)</td></tr>\n<tr class=\"memdesc:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity anounce message to be sent over EnigmaIOT message.  <a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">More...</a><br /></td></tr>\n<tr class=\"separator:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets name suffix. Used for multi entity nodes.  <a href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">More...</a><br /></td></tr>\n<tr class=\"separator:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a> ()</td></tr>\n<tr class=\"memdesc:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enables registering entity attributes as a json object.  <a href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">More...</a><br /></td></tr>\n<tr class=\"separator:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ()</td></tr>\n<tr class=\"memdesc:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets needed buffer size for discovery message.  <a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">More...</a><br /></td></tr>\n<tr class=\"separator:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a4e1eb68bd22273bc33e60c01f703e08f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">getDiscoveryJson</a> (char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</td></tr>\n<tr class=\"memdesc:a4e1eb68bd22273bc33e60c01f703e08f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get Home Assistant discovery message using Sensor template.  <a href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">More...</a><br /></td></tr>\n<tr class=\"separator:a4e1eb68bd22273bc33e60c01f703e08f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa79457154d1e06cfa9ffe11d0d5bcd40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">deviceClassStr</a> (<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a> sensorClass)</td></tr>\n<tr class=\"memdesc:aa79457154d1e06cfa9ffe11d0d5bcd40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets sensor class name from <code>haSensorClass_t</code> <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#device_class\">https://www.home-assistant.io/integrations/sensor.mqtt/#device_class</a>.  <a href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">More...</a><br /></td></tr>\n<tr class=\"separator:aa79457154d1e06cfa9ffe11d0d5bcd40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_static_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_static_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Static Public Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a> (<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType)</td></tr>\n<tr class=\"memdesc:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity type string from haDeviceType_t value <a href=\"https://www.home-assistant.io/docs/mqtt/discovery/\">https://www.home-assistant.io/docs/mqtt/discovery/</a>.  <a href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">More...</a><br /></td></tr>\n<tr class=\"separator:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a> (const char *hassPrefix, const char *nodeName, <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType, const char *nameSuffix=NULL)</td></tr>\n<tr class=\"memdesc:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get discovery message MQTT topic.  <a href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">More...</a><br /></td></tr>\n<tr class=\"separator:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a> ()</td></tr>\n<tr class=\"memdesc:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default constructor. Needed for inheritance.  <a href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">More...</a><br /></td></tr>\n<tr class=\"separator:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td></tr>\n<tr class=\"memdesc:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object memory reservation length.  <a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">More...</a><br /></td></tr>\n<tr class=\"separator:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a></td></tr>\n<tr class=\"memdesc:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">HomeAssistant entity device type.  <a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">More...</a><br /></td></tr>\n<tr class=\"separator:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">DynamicJsonDocument *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td></tr>\n<tr class=\"memdesc:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object to be sent to gateway.  <a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">More...</a><br /></td></tr>\n<tr class=\"separator:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>This mqtt sensor platform uses the MQTT message payload as the sensor value. If messages in this state_topic are published with RETAIN flag, the sensor will receive an instant update with last known value. Otherwise, the initial state will be undefined.</p>\n<p><a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/\">https://www.home-assistant.io/integrations/sensor.mqtt/</a></p>\n<p>An example of sensor discovery message may be like this:</p>\n<p>Topic: homeassistant/sensor/mains_power/config</p>\n<p>Payload:</p>\n<p>{ \"name\":\"mains_power\", // string (optional, default: MQTT Sensor). The name of the MQTT sensor \"unique_id\":\"mains_power\", // string (optional) An ID that uniquely identifies this sensor. If two sensors have the same unique ID, // Home Assistant will raise an exception \"device_class\":\"power\", // device_class (optional, default: None). The type/class of the sensor to set the icon in the frontend // <a href=\"https://www.home-assistant.io/integrations/sensor/#device-class\">https://www.home-assistant.io/integrations/sensor/#device-class</a> \"expire_after\":300, // integer (optional, default: 0) Defines the number of seconds after the sensor’s state expires, // if it’s not updated. After expiry, the sensor’s state becomes unavailable \"json_attributes_template\":\"{{value_json | tojson}}\", // template (optional) Defines a template to extract the JSON dictionary // from messages received on the json_attributes_topic \"json_attributes_topic\":\"EnigmaIOT/mains/data\", // string (optional) The MQTT topic subscribed to receive a JSON dictionary // payload and then set as sensor attributes. Implies force_update of the // current sensor state when a message is received on this topic \"state_topic\":\"EnigmaIOT/mains/data\", // string REQUIRED. The MQTT topic subscribed to receive sensor values \"unit_of_measurement\":\"W\"\",            // string (optional). Defines the units of measurement of the sensor, if any\n   \"value_template\":\"{{value_json.pow}}\" // template (optional). Defines a template to extract the value }</p>\n<p>Template message for sensor is this</p>\n<p>Topic: homeassistant/sensor/&lt;node_name&gt;_&lt;name_suffix&gt;/config</p>\n<p>Payload</p>\n<div class=\"fragment\"><div class=\"line\"> {</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;name&quot;</span>:&lt;node_name&gt;_&lt;name_suffix&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;unique_id&quot;</span>:&lt;node_name&gt;_&lt;name_suffix&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;device_class&quot;</span>: &lt;device_class&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;expire_after&quot;</span>:&lt;expire_time&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;json_attributes_template&quot;</span>:<span class=\"stringliteral\">&quot;{{value_json | tojson}}&quot;</span>,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;json_attributes_topic&quot;</span>:<span class=\"stringliteral\">&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;</span>,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;state_topic&quot;</span>:<span class=\"stringliteral\">&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;</span>,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;unit_of_measurement&quot;</span>:&lt;unit_of_measurement&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;value_template&quot;</span>:<span class=\"stringliteral\">&quot;{{value_json.&lt;value_field&gt;}}&quot;</span></div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><p>Message to gateway is like following</p>\n<div class=\"fragment\"><div class=\"line\">{</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;dev_cla&quot;</span>:&lt;device_class&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;exp_aft&quot;</span>:&lt;expire_time&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;unit_of_meas&quot;</span>:&lt;unit_of_measurement&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;val&quot;</span>:&lt;value_field&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;nmsfx&quot;</span>:&lt;name_suffix&gt;</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --> \n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSensor_8h_source.html#l00081\">81</a> of file <a class=\"el\" href=\"haSensor_8h_source.html\">haSensor.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"a07979a82942d08d6f24db5b76e6fe269\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a07979a82942d08d6f24db5b76e6fe269\">&#9670;&nbsp;</a></span>HASensor()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">HASensor::HASensor </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sensor constructor. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSensor_8h_source.html#l00087\">87</a> of file <a class=\"el\" href=\"haSensor_8h_source.html\">haSensor.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"aa79457154d1e06cfa9ffe11d0d5bcd40\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa79457154d1e06cfa9ffe11d0d5bcd40\">&#9670;&nbsp;</a></span>deviceClassStr()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">String HASensor::deviceClassStr </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a>&#160;</td>\n          <td class=\"paramname\"><em>sensorClass</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets sensor class name from <code>haSensorClass_t</code> <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#device_class\">https://www.home-assistant.io/integrations/sensor.mqtt/#device_class</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sensorClass</td><td>Binary sensor class code </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSensor_8cpp_source.html#l00123\">123</a> of file <a class=\"el\" href=\"haSensor_8cpp_source.html\">haSensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4e1eb68bd22273bc33e60c01f703e08f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4e1eb68bd22273bc33e60c01f703e08f\">&#9670;&nbsp;</a></span>getDiscoveryJson()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t HASensor::getDiscoveryJson </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>buflen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>networkName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">DynamicJsonDocument *&#160;</td>\n          <td class=\"paramname\"><em>inputJSON</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Allows Gateway to get Home Assistant discovery message using Sensor template. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">buffer</td><td>Buffer to hold message string </td></tr>\n    <tr><td class=\"paramname\">buflen</td><td>Buffer size </td></tr>\n    <tr><td class=\"paramname\">nodeName</td><td>Originating node name </td></tr>\n    <tr><td class=\"paramname\">networkName</td><td>EnigmaIOT network name </td></tr>\n    <tr><td class=\"paramname\">inputJSON</td><td>JSON object sent by node with needed data to fill template in </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Discovery message payload </dd></dl>\n<p>msgPack || !len</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSensor_8cpp_source.html#l00065\">65</a> of file <a class=\"el\" href=\"haSensor_8cpp_source.html\">haSensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"acdd930c6953bd7383eac0d58b3693f71\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acdd930c6953bd7383eac0d58b3693f71\">&#9670;&nbsp;</a></span>setDeviceClass()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASensor::setDeviceClass </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a>&#160;</td>\n          <td class=\"paramname\"><em>devClass</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Define sensor class as <code>haSensorClass_t</code> <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#device_class\">https://www.home-assistant.io/integrations/sensor.mqtt/#device_class</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">devClass</td><td>Device class </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSensor_8cpp_source.html#l00013\">13</a> of file <a class=\"el\" href=\"haSensor_8cpp_source.html\">haSensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afcb6f12671331f88f5bc2b940be9221f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afcb6f12671331f88f5bc2b940be9221f\">&#9670;&nbsp;</a></span>setExpireTime()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASensor::setExpireTime </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Defines the number of seconds after the sensor’s state expires, if it’s not updated. After expiry, the sensor’s state becomes unavailable. <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#expire_after\">https://www.home-assistant.io/integrations/sensor.mqtt/#expire_after</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Expiration value in seconds </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSensor_8cpp_source.html#l00020\">20</a> of file <a class=\"el\" href=\"haSensor_8cpp_source.html\">haSensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"adad5ecbe11d2c2fcdc62be14acc8b89e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adad5ecbe11d2c2fcdc62be14acc8b89e\">&#9670;&nbsp;</a></span>setUnitOfMeasurement()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASensor::setUnitOfMeasurement </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set unit of measure <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#unit_of_measurement\">https://www.home-assistant.io/integrations/sensor.mqtt/#unit_of_measurement</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Measure unit </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSensor_8cpp_source.html#l00026\">26</a> of file <a class=\"el\" href=\"haSensor_8cpp_source.html\">haSensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a61e3c5e250794fc2c8ad2f96da1be6dc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a61e3c5e250794fc2c8ad2f96da1be6dc\">&#9670;&nbsp;</a></span>setValueField()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASensor::setValueField </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Defines a json key that defines sensor value. When setting this, <code>setValueTemplate ()</code> should not be called <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#value_template\">https://www.home-assistant.io/integrations/sensor.mqtt/#value_template</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>json key </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSensor_8cpp_source.html#l00032\">32</a> of file <a class=\"el\" href=\"haSensor_8cpp_source.html\">haSensor.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a41e55b745b034127a7d7a98cb50d4559\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41e55b745b034127a7d7a98cb50d4559\">&#9670;&nbsp;</a></span>setValueTemplate()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASensor::setValueTemplate </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Defines a template that defines sensor value. When setting this you should not call <code>setValueField ()</code> <a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/#value_template\">https://www.home-assistant.io/integrations/sensor.mqtt/#value_template</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Value template definition </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSensor_8cpp_source.html#l00038\">38</a> of file <a class=\"el\" href=\"haSensor_8cpp_source.html\">haSensor.cpp</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"haSensor_8h_source.html\">haSensor.h</a></li>\n<li>src/<a class=\"el\" href=\"haSensor_8cpp_source.html\">haSensor.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHASwitch-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">HASwitch Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classHASwitch.html\">HASwitch</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a>(haDeviceType_t entityType)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a>(int bufferlen, uint8_t *buffer)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">getDiscoveryJson</a>(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a>(const char *hassPrefix, const char *nodeName, haDeviceType_t entityType, const char *nameSuffix=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#a282ac7ec44e7fc43d0d6493808e68ba3\">HASwitch</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">setPayloadOff</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#ad87f7ed8d117684176195abb75de10fd\">setPayloadOff</a>(int payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">setPayloadOn</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#adb657f3c1e7a6d0dd201ae1ae58c4c61\">setPayloadOn</a>(int payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">setStateOff</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#a92d97f25fd24278191e3ded747f1eac9\">setStateOff</a>(int payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">setStateOn</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#a8a83e4675f294b203737539245e13c34\">setStateOn</a>(int payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">setValueField</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHASwitch.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: HASwitch Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"classHASwitch-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">HASwitch Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"haSwitch_8h_source.html\">haSwitch.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for HASwitch:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classHASwitch.png\" usemap=\"#HASwitch_map\" alt=\"\"/>\n  <map id=\"HASwitch_map\" name=\"HASwitch_map\">\n<area href=\"classHAEntity.html\" alt=\"HAEntity\" shape=\"rect\" coords=\"0,0,67,24\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a282ac7ec44e7fc43d0d6493808e68ba3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#a282ac7ec44e7fc43d0d6493808e68ba3\">HASwitch</a> ()</td></tr>\n<tr class=\"memdesc:a282ac7ec44e7fc43d0d6493808e68ba3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Switch constructor.  <a href=\"classHASwitch.html#a282ac7ec44e7fc43d0d6493808e68ba3\">More...</a><br /></td></tr>\n<tr class=\"separator:a282ac7ec44e7fc43d0d6493808e68ba3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a58d4755d08863514f81805d29d96605b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">setPayloadOn</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a58d4755d08863514f81805d29d96605b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents on state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_on for details) and sending as on command to the command_topic <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#payload_on\">https://www.home-assistant.io/integrations/switch.mqtt/#payload_on</a>.  <a href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">More...</a><br /></td></tr>\n<tr class=\"separator:a58d4755d08863514f81805d29d96605b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad34555ca78f7d9c9ccd49139751ed831\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">setPayloadOff</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:ad34555ca78f7d9c9ccd49139751ed831\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents off state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_off for details) and sending as on command to the command_topic <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#payload_off\">https://www.home-assistant.io/integrations/switch.mqtt/#payload_off</a>.  <a href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">More...</a><br /></td></tr>\n<tr class=\"separator:ad34555ca78f7d9c9ccd49139751ed831\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adb657f3c1e7a6d0dd201ae1ae58c4c61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#adb657f3c1e7a6d0dd201ae1ae58c4c61\">setPayloadOn</a> (int payload)</td></tr>\n<tr class=\"memdesc:adb657f3c1e7a6d0dd201ae1ae58c4c61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents on state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_on for details) and sending as on command to the command_topic <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#payload_on\">https://www.home-assistant.io/integrations/switch.mqtt/#payload_on</a>.  <a href=\"classHASwitch.html#adb657f3c1e7a6d0dd201ae1ae58c4c61\">More...</a><br /></td></tr>\n<tr class=\"separator:adb657f3c1e7a6d0dd201ae1ae58c4c61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad87f7ed8d117684176195abb75de10fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#ad87f7ed8d117684176195abb75de10fd\">setPayloadOff</a> (int payload)</td></tr>\n<tr class=\"memdesc:ad87f7ed8d117684176195abb75de10fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents off state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_off for details) and sending as on command to the command_topic <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#payload_off\">https://www.home-assistant.io/integrations/switch.mqtt/#payload_off</a>.  <a href=\"classHASwitch.html#ad87f7ed8d117684176195abb75de10fd\">More...</a><br /></td></tr>\n<tr class=\"separator:ad87f7ed8d117684176195abb75de10fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa59604bf62e63caaf3dcd6a2ad67814f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">setStateOn</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:aa59604bf62e63caaf3dcd6a2ad67814f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents the on state. Used when value that represents on state in the state_topic is different from value that should be sent to the command_topic to turn the device on <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#state_on\">https://www.home-assistant.io/integrations/switch.mqtt/#state_on</a>.  <a href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">More...</a><br /></td></tr>\n<tr class=\"separator:aa59604bf62e63caaf3dcd6a2ad67814f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8498809d5a4ba56039c8397e1c22f272\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">setStateOff</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a8498809d5a4ba56039c8397e1c22f272\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents the off state. Used when value that represents off state in the state_topic is different from value that should be sent to the command_topic to turn the device off <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#state_off\">https://www.home-assistant.io/integrations/switch.mqtt/#state_off</a>.  <a href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">More...</a><br /></td></tr>\n<tr class=\"separator:a8498809d5a4ba56039c8397e1c22f272\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8a83e4675f294b203737539245e13c34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#a8a83e4675f294b203737539245e13c34\">setStateOn</a> (int payload)</td></tr>\n<tr class=\"memdesc:a8a83e4675f294b203737539245e13c34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents the on state. Used when value that represents on state in the state_topic is different from value that should be sent to the command_topic to turn the device on <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#state_on\">https://www.home-assistant.io/integrations/switch.mqtt/#state_on</a>.  <a href=\"classHASwitch.html#a8a83e4675f294b203737539245e13c34\">More...</a><br /></td></tr>\n<tr class=\"separator:a8a83e4675f294b203737539245e13c34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92d97f25fd24278191e3ded747f1eac9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#a92d97f25fd24278191e3ded747f1eac9\">setStateOff</a> (int payload)</td></tr>\n<tr class=\"memdesc:a92d97f25fd24278191e3ded747f1eac9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The payload that represents the off state. Used when value that represents off state in the state_topic is different from value that should be sent to the command_topic to turn the device off <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#state_off\">https://www.home-assistant.io/integrations/switch.mqtt/#state_off</a>.  <a href=\"classHASwitch.html#a92d97f25fd24278191e3ded747f1eac9\">More...</a><br /></td></tr>\n<tr class=\"separator:a92d97f25fd24278191e3ded747f1eac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a237b5b70434642df1031dac738955634\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">setValueField</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a237b5b70434642df1031dac738955634\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines a json key to extract device’s state from the state_topic. To determine the switches’s state result of this template will be compared to state_on and state_off <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#value_template\">https://www.home-assistant.io/integrations/switch.mqtt/#value_template</a>.  <a href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">More...</a><br /></td></tr>\n<tr class=\"separator:a237b5b70434642df1031dac738955634\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (int bufferlen, uint8_t *buffer)</td></tr>\n<tr class=\"memdesc:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity anounce message to be sent over EnigmaIOT message.  <a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">More...</a><br /></td></tr>\n<tr class=\"separator:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets name suffix. Used for multi entity nodes.  <a href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">More...</a><br /></td></tr>\n<tr class=\"separator:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a> ()</td></tr>\n<tr class=\"memdesc:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enables registering entity attributes as a json object.  <a href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">More...</a><br /></td></tr>\n<tr class=\"separator:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ()</td></tr>\n<tr class=\"memdesc:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets needed buffer size for discovery message.  <a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">More...</a><br /></td></tr>\n<tr class=\"separator:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a6f1fba7f12792a5a622de9db17cd2bc9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">getDiscoveryJson</a> (char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</td></tr>\n<tr class=\"memdesc:a6f1fba7f12792a5a622de9db17cd2bc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get Home Assistant discovery message using Switch template.  <a href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">More...</a><br /></td></tr>\n<tr class=\"separator:a6f1fba7f12792a5a622de9db17cd2bc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_static_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_static_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Static Public Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a> (<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType)</td></tr>\n<tr class=\"memdesc:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity type string from haDeviceType_t value <a href=\"https://www.home-assistant.io/docs/mqtt/discovery/\">https://www.home-assistant.io/docs/mqtt/discovery/</a>.  <a href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">More...</a><br /></td></tr>\n<tr class=\"separator:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a> (const char *hassPrefix, const char *nodeName, <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType, const char *nameSuffix=NULL)</td></tr>\n<tr class=\"memdesc:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get discovery message MQTT topic.  <a href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">More...</a><br /></td></tr>\n<tr class=\"separator:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a> ()</td></tr>\n<tr class=\"memdesc:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default constructor. Needed for inheritance.  <a href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">More...</a><br /></td></tr>\n<tr class=\"separator:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td></tr>\n<tr class=\"memdesc:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object memory reservation length.  <a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">More...</a><br /></td></tr>\n<tr class=\"separator:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a></td></tr>\n<tr class=\"memdesc:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">HomeAssistant entity device type.  <a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">More...</a><br /></td></tr>\n<tr class=\"separator:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">DynamicJsonDocument *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td></tr>\n<tr class=\"memdesc:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object to be sent to gateway.  <a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">More...</a><br /></td></tr>\n<tr class=\"separator:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>The mqtt switch platform lets you control your MQTT enabled switches. In an ideal scenario, the MQTT device will have a state_topic to publish state changes. If these messages are published with a RETAIN flag, the MQTT switch will receive an instant state update after subscription, and will start with the correct state. Otherwise, the initial state of the switch will be false / off.</p>\n<p>When a state_topic is not available, the switch will work in optimistic mode. In this mode, the switch will immediately change state after every command. Otherwise, the switch will wait for state confirmation from the device (message from state_topic).</p>\n<p>Optimistic mode can be forced, even if the state_topic is available. Try to enable it, if experiencing incorrect switch operation.</p>\n<p><a href=\"https://www.home-assistant.io/integrations/switch.mqtt/\">https://www.home-assistant.io/integrations/switch.mqtt/</a></p>\n<p>An example of switch discovery message may be like this:</p>\n<p>Topic: homeassistant/switch/lights_switch/config</p>\n<p>Payload:</p>\n<p>{ \"name\":\"light_switch\", // string (optional) The name of the device \"unique_id\":\"light_switch\", // string (optional) An ID that uniquely identifies this switch device. If two switches have the same unique ID, // Home Assistant will raise an exception \"command_topic\":\"EnigmaIOT/light/set/data\", // string (optional) The MQTT topic to publish commands to change the switch state \"payload_off\":\"{\\\"cmd\":\"swi\",\"swi\":0}\", // string (optional, default: OFF) The payload that represents off state. If specified, will be used for both // comparing to the value in the state_topic (see value_template and state_off for details) and sending as off command to the command_topic \"payload_on\":\"{\\\"cmd\":\"swi\",\"swi\":1}\", // string (optional, default: ON) The payload that represents on state. If specified, will be used for both comparing to the value in the // state_topic (see value_template and state_on for details) and sending as on command to the command_topic \"state_topic\":\"EnigmaIOT/light/data\", // string (optional) The MQTT topic subscribed to receive state updates \"state_off\":0, // string (optional) The payload that represents the off state. Used when value that represents off state in the state_topic is different // from value that should be sent to the command_topic to turn the device off. Default: payload_off if defined, else OFF \"state_on\":1, // string (optional) The payload that represents the on state. Used when value that represents on state in the state_topic is different // from value that should be sent to the command_topic to turn the device on. Default: payload_on if defined, else ON \"value_template\":\"{{value_json.swi}}\" // string (optional) Defines a template to extract device’s state from the state_topic. To determine the switches’s state result of this // template will be compared to state_on and state_off \"json_attributes_template\":\"{{value_json | tojson}}\", // template (optional) Defines a template to extract the JSON dictionary from messages received on the json_attributes_topic. // Usage example can be found in MQTT sensor documentation \"json_attributes_topic\":\"EnigmaIOT/light/data\", // string (optional) The MQTT topic subscribed to receive a JSON dictionary payload and then set as sensor attributes. // Usage example can be found in MQTT sensor documentation }</p>\n<p>Template message for switch is this</p>\n<p>Topic: homeassistant/switch/&lt;node_name&gt;_&lt;name_suffix&gt;/config</p>\n<p>Payload</p>\n<div class=\"fragment\"><div class=\"line\"> {</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;name&quot;</span>:<span class=\"stringliteral\">&quot;&lt;node_name&gt;_&lt;name_suffix&gt;&quot;</span>,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;unique_id&quot;</span>:<span class=\"stringliteral\">&quot;&lt;node_name&gt;_&lt;name_suffix&gt;&quot;</span>,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;command_topic&quot;</span>:<span class=\"stringliteral\">&quot;&lt;network_name&gt;/&lt;node_name&gt;/set/data&quot;</span></div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;payload_off&quot;</span>:<span class=\"stringliteral\">&quot;&lt;cmd_payload_on&gt;&quot;</span>,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;payload_on&quot;</span>:<span class=\"stringliteral\">&quot;&lt;cmd_payload_off&gt;&quot;</span></div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;state_topic&quot;</span>:<span class=\"stringliteral\">&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;</span>,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;state_off&quot;</span>:<span class=\"stringliteral\">&quot;&lt;state_off&gt;&quot;</span>,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;state_on&quot;</span>:<span class=\"stringliteral\">&quot;&lt;state_on&gt;&quot;</span>,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;value_template&quot;</span>:<span class=\"stringliteral\">&quot;{{value_json.&lt;value_field&gt;}}&quot;</span></div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;json_attributes_template&quot;</span>:<span class=\"stringliteral\">&quot;{{value_json | tojson}}&quot;</span>,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;json_attributes_topic&quot;</span>:<span class=\"stringliteral\">&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;</span>,</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><p>Message to gateway is like following</p>\n<div class=\"fragment\"><div class=\"line\">{</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;nmsfx&quot;</span>:&lt;name_suffix&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;pl_on&quot;</span>:&lt;cmd_payload_on&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;pl_off&quot;</span>:&lt;cmd_payload_off&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;stat_on&quot;</span>:&lt;state_on&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;stat_off&quot;</span>:&lt;state_off&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;val&quot;</span>:&lt;value_field&gt;</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --> \n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8h_source.html#l00094\">94</a> of file <a class=\"el\" href=\"haSwitch_8h_source.html\">haSwitch.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"a282ac7ec44e7fc43d0d6493808e68ba3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a282ac7ec44e7fc43d0d6493808e68ba3\">&#9670;&nbsp;</a></span>HASwitch()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">HASwitch::HASwitch </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Switch constructor. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8h_source.html#l00100\">100</a> of file <a class=\"el\" href=\"haSwitch_8h_source.html\">haSwitch.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a6f1fba7f12792a5a622de9db17cd2bc9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6f1fba7f12792a5a622de9db17cd2bc9\">&#9670;&nbsp;</a></span>getDiscoveryJson()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t HASwitch::getDiscoveryJson </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>buflen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>networkName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">DynamicJsonDocument *&#160;</td>\n          <td class=\"paramname\"><em>inputJSON</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Allows Gateway to get Home Assistant discovery message using Switch template. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">buffer</td><td>Buffer to hold message string </td></tr>\n    <tr><td class=\"paramname\">buflen</td><td>Buffer size </td></tr>\n    <tr><td class=\"paramname\">nodeName</td><td>Originating node name </td></tr>\n    <tr><td class=\"paramname\">networkName</td><td>EnigmaIOT network name </td></tr>\n    <tr><td class=\"paramname\">inputJSON</td><td>JSON object sent by node with needed data to fill template in </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Discovery message payload </dd></dl>\n<p>msgPack || !len</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8cpp_source.html#l00085\">85</a> of file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad34555ca78f7d9c9ccd49139751ed831\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad34555ca78f7d9c9ccd49139751ed831\">&#9670;&nbsp;</a></span>setPayloadOff() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASwitch::setPayloadOff </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents off state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_off for details) and sending as on command to the command_topic <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#payload_off\">https://www.home-assistant.io/integrations/switch.mqtt/#payload_off</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8cpp_source.html#l00020\">20</a> of file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad87f7ed8d117684176195abb75de10fd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad87f7ed8d117684176195abb75de10fd\">&#9670;&nbsp;</a></span>setPayloadOff() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASwitch::setPayloadOff </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents off state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_off for details) and sending as on command to the command_topic <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#payload_off\">https://www.home-assistant.io/integrations/switch.mqtt/#payload_off</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8cpp_source.html#l00030\">30</a> of file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a58d4755d08863514f81805d29d96605b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a58d4755d08863514f81805d29d96605b\">&#9670;&nbsp;</a></span>setPayloadOn() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASwitch::setPayloadOn </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents on state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_on for details) and sending as on command to the command_topic <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#payload_on\">https://www.home-assistant.io/integrations/switch.mqtt/#payload_on</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8cpp_source.html#l00014\">14</a> of file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"adb657f3c1e7a6d0dd201ae1ae58c4c61\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adb657f3c1e7a6d0dd201ae1ae58c4c61\">&#9670;&nbsp;</a></span>setPayloadOn() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASwitch::setPayloadOn </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents on state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_on for details) and sending as on command to the command_topic <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#payload_on\">https://www.home-assistant.io/integrations/switch.mqtt/#payload_on</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state integer </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8cpp_source.html#l00026\">26</a> of file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a8498809d5a4ba56039c8397e1c22f272\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8498809d5a4ba56039c8397e1c22f272\">&#9670;&nbsp;</a></span>setStateOff() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASwitch::setStateOff </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents the off state. Used when value that represents off state in the state_topic is different from value that should be sent to the command_topic to turn the device off <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#state_off\">https://www.home-assistant.io/integrations/switch.mqtt/#state_off</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state integer </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8cpp_source.html#l00040\">40</a> of file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a92d97f25fd24278191e3ded747f1eac9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a92d97f25fd24278191e3ded747f1eac9\">&#9670;&nbsp;</a></span>setStateOff() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASwitch::setStateOff </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents the off state. Used when value that represents off state in the state_topic is different from value that should be sent to the command_topic to turn the device off <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#state_off\">https://www.home-assistant.io/integrations/switch.mqtt/#state_off</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state integer </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8cpp_source.html#l00050\">50</a> of file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa59604bf62e63caaf3dcd6a2ad67814f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa59604bf62e63caaf3dcd6a2ad67814f\">&#9670;&nbsp;</a></span>setStateOn() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASwitch::setStateOn </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents the on state. Used when value that represents on state in the state_topic is different from value that should be sent to the command_topic to turn the device on <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#state_on\">https://www.home-assistant.io/integrations/switch.mqtt/#state_on</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state integer </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8cpp_source.html#l00034\">34</a> of file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a8a83e4675f294b203737539245e13c34\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8a83e4675f294b203737539245e13c34\">&#9670;&nbsp;</a></span>setStateOn() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASwitch::setStateOn </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The payload that represents the on state. Used when value that represents on state in the state_topic is different from value that should be sent to the command_topic to turn the device on <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#state_on\">https://www.home-assistant.io/integrations/switch.mqtt/#state_on</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state integer </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8cpp_source.html#l00046\">46</a> of file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a237b5b70434642df1031dac738955634\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a237b5b70434642df1031dac738955634\">&#9670;&nbsp;</a></span>setValueField()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HASwitch::setValueField </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Defines a json key to extract device’s state from the state_topic. To determine the switches’s state result of this template will be compared to state_on and state_off <a href=\"https://www.home-assistant.io/integrations/switch.mqtt/#value_template\">https://www.home-assistant.io/integrations/switch.mqtt/#value_template</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>ON state value </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haSwitch_8cpp_source.html#l00054\">54</a> of file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"haSwitch_8h_source.html\">haSwitch.h</a></li>\n<li>src/<a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHATrigger-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">HATrigger Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classHATrigger.html\">HATrigger</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a>(haDeviceType_t entityType)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a>(int bufferlen, uint8_t *buffer)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">getDiscoveryJson</a>(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</td><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a></td><td class=\"entry\"><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a>(const char *hassPrefix, const char *nodeName, haDeviceType_t entityType, const char *nameSuffix=NULL)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b\">getTriggerSubtypeStr</a>(int subtype)</td><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html#a25585b365d726848d22ad5c4f299d803\">getTriggerTypeStr</a>(int type)</td><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html#a91af9e612da244483b5704c4ed835d0f\">HATrigger</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">setPayload</a>(const char *payload)</td><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">setSubtype</a>(ha_triggerSubtype_t subtype)</td><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html#ab16d63fc344bac17dd99834be15585aa\">setSubtype</a>(const char *subtype)</td><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">setType</a>(ha_triggerType_t type)</td><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html#af86406b876cfddbe13ef433582600658\">setType</a>(const char *type)</td><td class=\"entry\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classHATrigger.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: HATrigger Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-static-methods\">Static Public Member Functions</a> &#124;\n<a href=\"classHATrigger-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">HATrigger Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>&gt;</code></p>\n<div class=\"dynheader\">\nInheritance diagram for HATrigger:</div>\n<div class=\"dyncontent\">\n <div class=\"center\">\n  <img src=\"classHATrigger.png\" usemap=\"#HATrigger_map\" alt=\"\"/>\n  <map id=\"HATrigger_map\" name=\"HATrigger_map\">\n<area href=\"classHAEntity.html\" alt=\"HAEntity\" shape=\"rect\" coords=\"0,0,71,24\"/>\n  </map>\n</div></div>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a91af9e612da244483b5704c4ed835d0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHATrigger.html#a91af9e612da244483b5704c4ed835d0f\">HATrigger</a> ()</td></tr>\n<tr class=\"memdesc:a91af9e612da244483b5704c4ed835d0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Trigger constructor.  <a href=\"classHATrigger.html#a91af9e612da244483b5704c4ed835d0f\">More...</a><br /></td></tr>\n<tr class=\"separator:a91af9e612da244483b5704c4ed835d0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a42e581722e8a914238bf0d06d8f8f51b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">setPayload</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a42e581722e8a914238bf0d06d8f8f51b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Optional payload to match the payload being sent over the topic <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#payload\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#payload</a>.  <a href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">More...</a><br /></td></tr>\n<tr class=\"separator:a42e581722e8a914238bf0d06d8f8f51b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adda48fb69d4ad6c9f95dfb7f7f92b79c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">setType</a> (<a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c\">ha_triggerType_t</a> type)</td></tr>\n<tr class=\"memdesc:adda48fb69d4ad6c9f95dfb7f7f92b79c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set trigger type as ha_triggerType_t <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#type\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#type</a>.  <a href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">More...</a><br /></td></tr>\n<tr class=\"separator:adda48fb69d4ad6c9f95dfb7f7f92b79c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af86406b876cfddbe13ef433582600658\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHATrigger.html#af86406b876cfddbe13ef433582600658\">setType</a> (const char *type)</td></tr>\n<tr class=\"memdesc:af86406b876cfddbe13ef433582600658\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set trigger type as char string <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#type\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#type</a>.  <a href=\"classHATrigger.html#af86406b876cfddbe13ef433582600658\">More...</a><br /></td></tr>\n<tr class=\"separator:af86406b876cfddbe13ef433582600658\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fb9c73855aba7474fb26e13bd74f3cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">setSubtype</a> (<a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b\">ha_triggerSubtype_t</a> subtype)</td></tr>\n<tr class=\"memdesc:a4fb9c73855aba7474fb26e13bd74f3cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set trigger subtype as ha_triggerSubtype_t <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype</a>.  <a href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">More...</a><br /></td></tr>\n<tr class=\"separator:a4fb9c73855aba7474fb26e13bd74f3cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab16d63fc344bac17dd99834be15585aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHATrigger.html#ab16d63fc344bac17dd99834be15585aa\">setSubtype</a> (const char *subtype)</td></tr>\n<tr class=\"memdesc:ab16d63fc344bac17dd99834be15585aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set trigger subtype as char string <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype</a>.  <a href=\"classHATrigger.html#ab16d63fc344bac17dd99834be15585aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ab16d63fc344bac17dd99834be15585aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Public Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (int bufferlen, uint8_t *buffer)</td></tr>\n<tr class=\"memdesc:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity anounce message to be sent over EnigmaIOT message.  <a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">More...</a><br /></td></tr>\n<tr class=\"separator:a64140dc1e3e041eafbcd6eca04abb9ef inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (const char *payload)</td></tr>\n<tr class=\"memdesc:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets name suffix. Used for multi entity nodes.  <a href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">More...</a><br /></td></tr>\n<tr class=\"separator:a1bd8a543ed665f9e48ca47b220123063 inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a> ()</td></tr>\n<tr class=\"memdesc:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enables registering entity attributes as a json object.  <a href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">More...</a><br /></td></tr>\n<tr class=\"separator:a2b81d38a3d72a0848b81f6d240b781da inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ()</td></tr>\n<tr class=\"memdesc:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets needed buffer size for discovery message.  <a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">More...</a><br /></td></tr>\n<tr class=\"separator:ad299ecdb73519da56e2f5439941af544 inherit pub_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-static-methods\"></a>\nStatic Public Member Functions</h2></td></tr>\n<tr class=\"memitem:a25585b365d726848d22ad5c4f299d803\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHATrigger.html#a25585b365d726848d22ad5c4f299d803\">getTriggerTypeStr</a> (int type)</td></tr>\n<tr class=\"memdesc:a25585b365d726848d22ad5c4f299d803\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns string that correspond with trigger type in ha_triggerType_t format <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#type\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#type</a>.  <a href=\"classHATrigger.html#a25585b365d726848d22ad5c4f299d803\">More...</a><br /></td></tr>\n<tr class=\"separator:a25585b365d726848d22ad5c4f299d803\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2886663fe1bc9b03ecb7024e646eab0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b\">getTriggerSubtypeStr</a> (int subtype)</td></tr>\n<tr class=\"memdesc:a2886663fe1bc9b03ecb7024e646eab0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns string that correspond with trigger subtype in ha_triggerSubtype_t format <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype</a>.  <a href=\"classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b\">More...</a><br /></td></tr>\n<tr class=\"separator:a2886663fe1bc9b03ecb7024e646eab0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a09bed6e6ead886a7b0389afe7470835c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">getDiscoveryJson</a> (char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</td></tr>\n<tr class=\"memdesc:a09bed6e6ead886a7b0389afe7470835c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get Home Assistant discovery message using Trigger template.  <a href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">More...</a><br /></td></tr>\n<tr class=\"separator:a09bed6e6ead886a7b0389afe7470835c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pub_static_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pub_static_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Static Public Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a> (<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType)</td></tr>\n<tr class=\"memdesc:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets entity type string from haDeviceType_t value <a href=\"https://www.home-assistant.io/docs/mqtt/discovery/\">https://www.home-assistant.io/docs/mqtt/discovery/</a>.  <a href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">More...</a><br /></td></tr>\n<tr class=\"separator:ac083c92c7973db1f2b51ede001768f2f inherit pub_static_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static String&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a> (const char *hassPrefix, const char *nodeName, <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType, const char *nameSuffix=NULL)</td></tr>\n<tr class=\"memdesc:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allows Gateway to get discovery message MQTT topic.  <a href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">More...</a><br /></td></tr>\n<tr class=\"separator:a264a9779679d77db65566233a952100d inherit pub_static_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"inherited\"></a>\nAdditional Inherited Members</h2></td></tr>\n<tr class=\"inherit_header pro_methods_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_methods_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Member Functions inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a> ()</td></tr>\n<tr class=\"memdesc:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default constructor. Needed for inheritance.  <a href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">More...</a><br /></td></tr>\n<tr class=\"separator:a1e3da7d22fd155a3661f754b9b1f64a3 inherit pro_methods_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"inherit_header pro_attribs_classHAEntity\"><td colspan=\"2\" onclick=\"javascript:toggleInherit('pro_attribs_classHAEntity')\"><img src=\"closed.png\" alt=\"-\"/>&#160;Protected Attributes inherited from <a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"memitem:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a></td></tr>\n<tr class=\"memdesc:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object memory reservation length.  <a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">More...</a><br /></td></tr>\n<tr class=\"separator:aeff41e84aaa1b70df8137cbd05d8ddbe inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a></td></tr>\n<tr class=\"memdesc:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">HomeAssistant entity device type.  <a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">More...</a><br /></td></tr>\n<tr class=\"separator:a8c9d02fb762b3af1739ba632479473d5 inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">DynamicJsonDocument *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a></td></tr>\n<tr class=\"memdesc:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">JSON object to be sent to gateway.  <a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">More...</a><br /></td></tr>\n<tr class=\"separator:aadb3c5676c00fc0c8b3939888e408d2b inherit pro_attribs_classHAEntity\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00126\">126</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"a91af9e612da244483b5704c4ed835d0f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a91af9e612da244483b5704c4ed835d0f\">&#9670;&nbsp;</a></span>HATrigger()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">HATrigger::HATrigger </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Trigger constructor. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00132\">132</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a09bed6e6ead886a7b0389afe7470835c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a09bed6e6ead886a7b0389afe7470835c\">&#9670;&nbsp;</a></span>getDiscoveryJson()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t HATrigger::getDiscoveryJson </td>\n          <td>(</td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>buflen</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>nodeName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>networkName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">DynamicJsonDocument *&#160;</td>\n          <td class=\"paramname\"><em>inputJSON</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Allows Gateway to get Home Assistant discovery message using Trigger template. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">buffer</td><td>Buffer to hold message string </td></tr>\n    <tr><td class=\"paramname\">buflen</td><td>Buffer size </td></tr>\n    <tr><td class=\"paramname\">nodeName</td><td>Originating node name </td></tr>\n    <tr><td class=\"paramname\">networkName</td><td>EnigmaIOT network name </td></tr>\n    <tr><td class=\"paramname\">inputJSON</td><td>JSON object sent by node with needed data to fill template in </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Discovery message payload </dd></dl>\n<p>msgPack || !len</p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8cpp_source.html#l00039\">39</a> of file <a class=\"el\" href=\"haTrigger_8cpp_source.html\">haTrigger.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2886663fe1bc9b03ecb7024e646eab0b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2886663fe1bc9b03ecb7024e646eab0b\">&#9670;&nbsp;</a></span>getTriggerSubtypeStr()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static const char* HATrigger::getTriggerSubtypeStr </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>subtype</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns string that correspond with trigger subtype in ha_triggerSubtype_t format <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">subtype</td><td>Trigger type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00158\">158</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a25585b365d726848d22ad5c4f299d803\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a25585b365d726848d22ad5c4f299d803\">&#9670;&nbsp;</a></span>getTriggerTypeStr()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">static const char* HATrigger::getTriggerTypeStr </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>type</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns string that correspond with trigger type in ha_triggerType_t format <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#type\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#type</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">type</td><td>Trigger type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00145\">145</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a42e581722e8a914238bf0d06d8f8f51b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a42e581722e8a914238bf0d06d8f8f51b\">&#9670;&nbsp;</a></span>setPayload()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HATrigger::setPayload </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>payload</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Optional payload to match the payload being sent over the topic <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#payload\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#payload</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">payload</td><td>Payload string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8cpp_source.html#l00013\">13</a> of file <a class=\"el\" href=\"haTrigger_8cpp_source.html\">haTrigger.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab16d63fc344bac17dd99834be15585aa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab16d63fc344bac17dd99834be15585aa\">&#9670;&nbsp;</a></span>setSubtype() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HATrigger::setSubtype </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>subtype</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Set trigger subtype as char string <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">subtype</td><td>Payload string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00205\">205</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fb9c73855aba7474fb26e13bd74f3cf\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fb9c73855aba7474fb26e13bd74f3cf\">&#9670;&nbsp;</a></span>setSubtype() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HATrigger::setSubtype </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b\">ha_triggerSubtype_t</a>&#160;</td>\n          <td class=\"paramname\"><em>subtype</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Set trigger subtype as ha_triggerSubtype_t <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">subtype</td><td>Payload string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00196\">196</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af86406b876cfddbe13ef433582600658\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af86406b876cfddbe13ef433582600658\">&#9670;&nbsp;</a></span>setType() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HATrigger::setType </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>type</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Set trigger type as char string <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#type\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#type</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">type</td><td>Payload string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00187\">187</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n<a id=\"adda48fb69d4ad6c9f95dfb7f7f92b79c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adda48fb69d4ad6c9f95dfb7f7f92b79c\">&#9670;&nbsp;</a></span>setType() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void HATrigger::setType </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c\">ha_triggerType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>type</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Set trigger type as ha_triggerType_t <a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/#type\">https://www.home-assistant.io/integrations/device_trigger.mqtt/#type</a>. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">type</td><td>Payload string </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00178\">178</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a></li>\n<li>src/<a class=\"el\" href=\"haTrigger_8cpp_source.html\">haTrigger.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classNode-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Node Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classNode.html\">Node</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a918b7ad8582d1b2d569dbd66a262ee50\">askedTimeSync</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed\">broadcastEnabled</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">broadcastIsEnabled</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">broadcastKeyRequested</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a2c6ecfa165b71155d3d25331ca56d98e\">enableBroadcast</a>(bool broadcast)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">enigmaIOTVersion</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">getInitAsSleepy</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a30a8e0aaad582a1baa269c6641150586\">getKeyValidFrom</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">getLastControlCounter</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">getLastDownlinkMsgCounter</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">getLastMessageCounter</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">getLastMessageTime</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">getMacAddress</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a129745eaa2b8e08ac8201809a6e2cb17\">getNodeData</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">getNodeName</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#ac9cb809cbf8a76bda02e2c92731b213b\">getRSSI</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a628b04339453635be34148c9fbe66506\">getVersion</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">initAsSleepy</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">initRateFilter</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a30aa0104f6df938075c7ff4ac64b3f41\">isBroadcastKeyRequested</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">isKeyValid</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">isRegistered</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">keyValid</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">keyValidFrom</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">lastControlCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">lastDownlinkMsgCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">lastMessageCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a2d56bbba3211927eff545e385ef5d162\">lastMessageTime</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">mac</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">Node</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a45db0ed8c3ce61c3cee9d2070e20493f\">Node</a>(node_t nodeData)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">explicit</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a796dbbcdb4e627658df143380ddb88fa\">NodeList</a> class</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">friend</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">nodeName</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a4e2e4c6afb4bf93ca10e60d239fd87c5\">packetErrors</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#aedfde4376c7c84dd8c88c2c530b3b102\">packetNumber</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">packetsHour</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a2f8f6419cc10c972285178991b2cec78\">per</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">printToSerial</a>(Stream *port=&amp;Serial)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a41f17a6abd376d602bef3925c751a181\">qMessageLength</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a0db2a4dfda51cfc5afe8c846a622ba54\">qMessagePending</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a712ec21cec6ac19ee68c8beb202fbf92\">queuedMessage</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">rateFilter</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">rssi</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a0e298bac431d8ac9e98fb12b71292de1\">setBroadcastKeyRequested</a>(bool request)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">setEncryptionKey</a>(const uint8_t *key)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a3621fd27cee1a28145a7daa167ad0b3d\">setInitAsSleepy</a>(bool sleepy)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">setKeyValid</a>(bool status)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">setKeyValidFrom</a>(time_t keyValidFrom)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">setLastControlCounter</a>(uint16_t counter)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">setLastDownlinkMsgCounter</a>(uint16_t counter)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">setLastMessageCounter</a>(uint16_t counter)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">setLastMessageTime</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">setMacAddress</a>(const uint8_t *macAddress)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">setNodeId</a>(uint16_t nodeId)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">setNodeName</a>(const char *name)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#aa14110f23c8cfe73c44e1a87382a1081\">setRSSI</a>(int8_t rssi)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">setSleepy</a>(bool sleepy)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">setStatus</a>(status_t status)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a121f5ac6ef71317bd8900b97a8abc65a\">setTimeSyncEnabled</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#accf5025ffbf53e48db9ab7f429c68b1e\">setVersion</a>(uint8_t major, uint8_t minor, uint8_t incremental)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">sleepyNode</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a></td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a71c1077723465057bd8cbc90f33c2ead\">updatePacketsRate</a>(float value)</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNode.html#a4bb77cd04f77b857935836284c5e41af\">useTimeSync</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNode.html\">Node</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classNode.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Node Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"#pro-methods\">Protected Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"#friends\">Friends</a> &#124;\n<a href=\"classNode-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Node Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Class definition for a single sensor <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.  \n <a href=\"classNode.html#details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:ad7a34779cad45d997bfd6d3d8043c75f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">Node</a> ()</td></tr>\n<tr class=\"memdesc:ad7a34779cad45d997bfd6d3d8043c75f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Plain constructor.  <a href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">More...</a><br /></td></tr>\n<tr class=\"separator:ad7a34779cad45d997bfd6d3d8043c75f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a45db0ed8c3ce61c3cee9d2070e20493f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a45db0ed8c3ce61c3cee9d2070e20493f\">Node</a> (<a class=\"el\" href=\"NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6\">node_t</a> nodeData)</td></tr>\n<tr class=\"memdesc:a45db0ed8c3ce61c3cee9d2070e20493f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Constructor that initializes data from another <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> data.  <a href=\"classNode.html#a45db0ed8c3ce61c3cee9d2070e20493f\">More...</a><br /></td></tr>\n<tr class=\"separator:a45db0ed8c3ce61c3cee9d2070e20493f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4cefee4f9feaa563b8e8a725a847e9ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">getMacAddress</a> ()</td></tr>\n<tr class=\"memdesc:a4cefee4f9feaa563b8e8a725a847e9ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets address from <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.  <a href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">More...</a><br /></td></tr>\n<tr class=\"separator:a4cefee4f9feaa563b8e8a725a847e9ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2563f7f556d09035dbbf042656d4fa3a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">getNodeId</a> ()</td></tr>\n<tr class=\"memdesc:a2563f7f556d09035dbbf042656d4fa3a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identifier.  <a href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">More...</a><br /></td></tr>\n<tr class=\"separator:a2563f7f556d09035dbbf042656d4fa3a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3615b98da7f0ea0d8615a8f45519a715\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">setNodeId</a> (uint16_t <a class=\"el\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a>)</td></tr>\n<tr class=\"memdesc:a3615b98da7f0ea0d8615a8f45519a715\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets a new <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identifier.  <a href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">More...</a><br /></td></tr>\n<tr class=\"separator:a3615b98da7f0ea0d8615a8f45519a715\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5c665e844c5f7f121a72baae270a2ba7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">getNodeName</a> ()</td></tr>\n<tr class=\"memdesc:a5c665e844c5f7f121a72baae270a2ba7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name.  <a href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">More...</a><br /></td></tr>\n<tr class=\"separator:a5c665e844c5f7f121a72baae270a2ba7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a31c7b1dce5c26d81ead2cabf5395d935\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">setNodeName</a> (const char *name)</td></tr>\n<tr class=\"memdesc:a31c7b1dce5c26d81ead2cabf5395d935\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name.  <a href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">More...</a><br /></td></tr>\n<tr class=\"separator:a31c7b1dce5c26d81ead2cabf5395d935\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a61ac445d996a9304b34fc78a2514364f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">getEncriptionKey</a> ()</td></tr>\n<tr class=\"memdesc:a61ac445d996a9304b34fc78a2514364f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> encryption key.  <a href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">More...</a><br /></td></tr>\n<tr class=\"separator:a61ac445d996a9304b34fc78a2514364f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae7b7337fdc178fe350ac4ce2f4675040\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">setEncryptionKey</a> (const uint8_t *<a class=\"el\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a>)</td></tr>\n<tr class=\"memdesc:ae7b7337fdc178fe350ac4ce2f4675040\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets encryption key.  <a href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">More...</a><br /></td></tr>\n<tr class=\"separator:ae7b7337fdc178fe350ac4ce2f4675040\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30a8e0aaad582a1baa269c6641150586\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a30a8e0aaad582a1baa269c6641150586\">getKeyValidFrom</a> ()</td></tr>\n<tr class=\"memdesc:a30a8e0aaad582a1baa269c6641150586\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets last time that key was agreed with gateway.  <a href=\"classNode.html#a30a8e0aaad582a1baa269c6641150586\">More...</a><br /></td></tr>\n<tr class=\"separator:a30a8e0aaad582a1baa269c6641150586\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a65284f939ba9d70cff90e7e508ac1a13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">setKeyValidFrom</a> (time_t <a class=\"el\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">keyValidFrom</a>)</td></tr>\n<tr class=\"memdesc:a65284f939ba9d70cff90e7e508ac1a13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets time when key was agreed with gateway.  <a href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">More...</a><br /></td></tr>\n<tr class=\"separator:a65284f939ba9d70cff90e7e508ac1a13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15877a320c33f77402c5700774d936cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">getLastMessageTime</a> ()</td></tr>\n<tr class=\"memdesc:a15877a320c33f77402c5700774d936cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets last time that node sent a message.  <a href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">More...</a><br /></td></tr>\n<tr class=\"separator:a15877a320c33f77402c5700774d936cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae7d5f900dd1290910a30692175dc8e23\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">setLastMessageTime</a> ()</td></tr>\n<tr class=\"memdesc:ae7d5f900dd1290910a30692175dc8e23\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets current moment as last node message time.  <a href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">More...</a><br /></td></tr>\n<tr class=\"separator:ae7d5f900dd1290910a30692175dc8e23\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab5c31a536cb60a6c86dec8524117f50e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">getLastMessageCounter</a> ()</td></tr>\n<tr class=\"memdesc:ab5c31a536cb60a6c86dec8524117f50e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets counter for last received message from node.  <a href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">More...</a><br /></td></tr>\n<tr class=\"separator:ab5c31a536cb60a6c86dec8524117f50e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae4b169a75d7c1fa535eb883c28683001\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">getLastControlCounter</a> ()</td></tr>\n<tr class=\"memdesc:ae4b169a75d7c1fa535eb883c28683001\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets counter for last received control message from node.  <a href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">More...</a><br /></td></tr>\n<tr class=\"separator:ae4b169a75d7c1fa535eb883c28683001\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aecf8d05afddcd5d460472963ee88bd2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">getLastDownlinkMsgCounter</a> ()</td></tr>\n<tr class=\"memdesc:aecf8d05afddcd5d460472963ee88bd2b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets counter for last downlink message from gateway.  <a href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">More...</a><br /></td></tr>\n<tr class=\"separator:aecf8d05afddcd5d460472963ee88bd2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aaa07721114c6b57152caf9a7b8cd4c23\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">setLastMessageCounter</a> (uint16_t counter)</td></tr>\n<tr class=\"memdesc:aaa07721114c6b57152caf9a7b8cd4c23\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets counter for last received message from node.  <a href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">More...</a><br /></td></tr>\n<tr class=\"separator:aaa07721114c6b57152caf9a7b8cd4c23\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2d876405390237c8cbbd4689fb2f960b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">setLastControlCounter</a> (uint16_t counter)</td></tr>\n<tr class=\"memdesc:a2d876405390237c8cbbd4689fb2f960b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets counter for last received control message from node.  <a href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">More...</a><br /></td></tr>\n<tr class=\"separator:a2d876405390237c8cbbd4689fb2f960b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a68eac7f22f879dbe7bb1dec0615c5ce9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">setLastDownlinkMsgCounter</a> (uint16_t counter)</td></tr>\n<tr class=\"memdesc:a68eac7f22f879dbe7bb1dec0615c5ce9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets counter for last downlink message from gateway.  <a href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">More...</a><br /></td></tr>\n<tr class=\"separator:a68eac7f22f879dbe7bb1dec0615c5ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aea12cab858f40940a1ab5c61596b6355\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">setMacAddress</a> (const uint8_t *macAddress)</td></tr>\n<tr class=\"memdesc:aea12cab858f40940a1ab5c61596b6355\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets node address.  <a href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">More...</a><br /></td></tr>\n<tr class=\"separator:aea12cab858f40940a1ab5c61596b6355\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa382c421546fc99b22b4698acb36c3d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">isKeyValid</a> ()</td></tr>\n<tr class=\"memdesc:aa382c421546fc99b22b4698acb36c3d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets shared key validity for this node.  <a href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">More...</a><br /></td></tr>\n<tr class=\"separator:aa382c421546fc99b22b4698acb36c3d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81ded601038e157ecb03daa7fb85242d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">setKeyValid</a> (bool <a class=\"el\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>)</td></tr>\n<tr class=\"memdesc:a81ded601038e157ecb03daa7fb85242d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets shared key validity for this node.  <a href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">More...</a><br /></td></tr>\n<tr class=\"separator:a81ded601038e157ecb03daa7fb85242d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0b809fd0304e6e55173ac1e6fa8d3dc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">isRegistered</a> ()</td></tr>\n<tr class=\"memdesc:a0b809fd0304e6e55173ac1e6fa8d3dc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets registration state of this node.  <a href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">More...</a><br /></td></tr>\n<tr class=\"separator:a0b809fd0304e6e55173ac1e6fa8d3dc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6172f9eb39a02f01b692a53b9ee09c56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">getStatus</a> ()</td></tr>\n<tr class=\"memdesc:a6172f9eb39a02f01b692a53b9ee09c56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets status for finite state machine that represents node.  <a href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">More...</a><br /></td></tr>\n<tr class=\"separator:a6172f9eb39a02f01b692a53b9ee09c56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7590c6b11a260ca766a2ad46f2b0cf27\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">setStatus</a> (<a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> <a class=\"el\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a>)</td></tr>\n<tr class=\"memdesc:a7590c6b11a260ca766a2ad46f2b0cf27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets status for finite state machine that represents node.  <a href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">More...</a><br /></td></tr>\n<tr class=\"separator:a7590c6b11a260ca766a2ad46f2b0cf27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a129745eaa2b8e08ac8201809a6e2cb17\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6\">node_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a129745eaa2b8e08ac8201809a6e2cb17\">getNodeData</a> ()</td></tr>\n<tr class=\"memdesc:a129745eaa2b8e08ac8201809a6e2cb17\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets a struct that represents node object. May be used for node serialization.  <a href=\"classNode.html#a129745eaa2b8e08ac8201809a6e2cb17\">More...</a><br /></td></tr>\n<tr class=\"separator:a129745eaa2b8e08ac8201809a6e2cb17\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a36b675e4186420fb1f8e324fc0987cbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">printToSerial</a> (Stream *port=&amp;Serial)</td></tr>\n<tr class=\"memdesc:a36b675e4186420fb1f8e324fc0987cbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dumps node data to the given stream, Serial by default. This method may be used for debugging.  <a href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">More...</a><br /></td></tr>\n<tr class=\"separator:a36b675e4186420fb1f8e324fc0987cbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7c565caad2fea0439f28d24887ac2498\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">reset</a> ()</td></tr>\n<tr class=\"memdesc:a7c565caad2fea0439f28d24887ac2498\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Resets all node fields to a default initial and not registered state.  <a href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">More...</a><br /></td></tr>\n<tr class=\"separator:a7c565caad2fea0439f28d24887ac2498\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae1a2a8c747a1af2e7d9467ae9199edd7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">setSleepy</a> (bool sleepy)</td></tr>\n<tr class=\"memdesc:ae1a2a8c747a1af2e7d9467ae9199edd7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sleep after sending a message. In this case it will wait for a short while for a downlink message from gateway.  <a href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">More...</a><br /></td></tr>\n<tr class=\"separator:ae1a2a8c747a1af2e7d9467ae9199edd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3621fd27cee1a28145a7daa167ad0b3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a3621fd27cee1a28145a7daa167ad0b3d\">setInitAsSleepy</a> (bool sleepy)</td></tr>\n<tr class=\"memdesc:a3621fd27cee1a28145a7daa167ad0b3d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Records if node started as a sleepy node or not. If it did not started so it will never accept sleep time changes.  <a href=\"classNode.html#a3621fd27cee1a28145a7daa167ad0b3d\">More...</a><br /></td></tr>\n<tr class=\"separator:a3621fd27cee1a28145a7daa167ad0b3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a89ccd5b416ac31593da426c48ec8562a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">getInitAsSleepy</a> ()</td></tr>\n<tr class=\"memdesc:a89ccd5b416ac31593da426c48ec8562a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets initial sleepy mode.  <a href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">More...</a><br /></td></tr>\n<tr class=\"separator:a89ccd5b416ac31593da426c48ec8562a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5bf02d202c9cb76831de89e4d1ef8893\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">getSleepy</a> ()</td></tr>\n<tr class=\"memdesc:a5bf02d202c9cb76831de89e4d1ef8893\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sleep after sending a message. In this case it will wait for a short while for a downlink message from gateway.  <a href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">More...</a><br /></td></tr>\n<tr class=\"separator:a5bf02d202c9cb76831de89e4d1ef8893\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae6768d968b8f72fb12001fa3895a4670\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">broadcastIsEnabled</a> ()</td></tr>\n<tr class=\"memdesc:ae6768d968b8f72fb12001fa3895a4670\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted broadcast messages. If this is enabled this will be notified to gateway so that it sends broadcast key. Notice this mode is optional and does not disable the ability to send normal messages.  <a href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">More...</a><br /></td></tr>\n<tr class=\"separator:ae6768d968b8f72fb12001fa3895a4670\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2c6ecfa165b71155d3d25331ca56d98e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a2c6ecfa165b71155d3d25331ca56d98e\">enableBroadcast</a> (bool broadcast)</td></tr>\n<tr class=\"memdesc:a2c6ecfa165b71155d3d25331ca56d98e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Enables node broadcast mode. <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> will request broadcast key to Gateway. When it is received node will be able to send and receive encrypted broadcast messages.  <a href=\"classNode.html#a2c6ecfa165b71155d3d25331ca56d98e\">More...</a><br /></td></tr>\n<tr class=\"separator:a2c6ecfa165b71155d3d25331ca56d98e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0e298bac431d8ac9e98fb12b71292de1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a0e298bac431d8ac9e98fb12b71292de1\">setBroadcastKeyRequested</a> (bool request)</td></tr>\n<tr class=\"memdesc:a0e298bac431d8ac9e98fb12b71292de1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Mark node to be waiting for broadcast key.  <a href=\"classNode.html#a0e298bac431d8ac9e98fb12b71292de1\">More...</a><br /></td></tr>\n<tr class=\"separator:a0e298bac431d8ac9e98fb12b71292de1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30aa0104f6df938075c7ff4ac64b3f41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a30aa0104f6df938075c7ff4ac64b3f41\">isBroadcastKeyRequested</a> ()</td></tr>\n<tr class=\"memdesc:a30aa0104f6df938075c7ff4ac64b3f41\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if node is waiting for broadcast key.  <a href=\"classNode.html#a30aa0104f6df938075c7ff4ac64b3f41\">More...</a><br /></td></tr>\n<tr class=\"separator:a30aa0104f6df938075c7ff4ac64b3f41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a71c1077723465057bd8cbc90f33c2ead\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a71c1077723465057bd8cbc90f33c2ead\">updatePacketsRate</a> (float value)</td></tr>\n<tr class=\"memdesc:a71c1077723465057bd8cbc90f33c2ead\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Adds a new message rate value for filter calculation.  <a href=\"classNode.html#a71c1077723465057bd8cbc90f33c2ead\">More...</a><br /></td></tr>\n<tr class=\"separator:a71c1077723465057bd8cbc90f33c2ead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac9cb809cbf8a76bda02e2c92731b213b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#ac9cb809cbf8a76bda02e2c92731b213b\">getRSSI</a> ()</td></tr>\n<tr class=\"memdesc:ac9cb809cbf8a76bda02e2c92731b213b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets last RSSI measurement of Gateway.  <a href=\"classNode.html#ac9cb809cbf8a76bda02e2c92731b213b\">More...</a><br /></td></tr>\n<tr class=\"separator:ac9cb809cbf8a76bda02e2c92731b213b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa14110f23c8cfe73c44e1a87382a1081\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#aa14110f23c8cfe73c44e1a87382a1081\">setRSSI</a> (int8_t <a class=\"el\" href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">rssi</a>)</td></tr>\n<tr class=\"memdesc:aa14110f23c8cfe73c44e1a87382a1081\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Stores last RSSI measurement of Gateway.  <a href=\"classNode.html#aa14110f23c8cfe73c44e1a87382a1081\">More...</a><br /></td></tr>\n<tr class=\"separator:aa14110f23c8cfe73c44e1a87382a1081\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4bb77cd04f77b857935836284c5e41af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a4bb77cd04f77b857935836284c5e41af\">useTimeSync</a> ()</td></tr>\n<tr class=\"memdesc:a4bb77cd04f77b857935836284c5e41af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets node info to check if it has requested time sync ever.  <a href=\"classNode.html#a4bb77cd04f77b857935836284c5e41af\">More...</a><br /></td></tr>\n<tr class=\"separator:a4bb77cd04f77b857935836284c5e41af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a121f5ac6ef71317bd8900b97a8abc65a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a121f5ac6ef71317bd8900b97a8abc65a\">setTimeSyncEnabled</a> ()</td></tr>\n<tr class=\"memdesc:a121f5ac6ef71317bd8900b97a8abc65a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Mark node as time sync enabled.  <a href=\"classNode.html#a121f5ac6ef71317bd8900b97a8abc65a\">More...</a><br /></td></tr>\n<tr class=\"separator:a121f5ac6ef71317bd8900b97a8abc65a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a628b04339453635be34148c9fbe66506\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a628b04339453635be34148c9fbe66506\">getVersion</a> ()</td></tr>\n<tr class=\"memdesc:a628b04339453635be34148c9fbe66506\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets node EnigmaIOT version.  <a href=\"classNode.html#a628b04339453635be34148c9fbe66506\">More...</a><br /></td></tr>\n<tr class=\"separator:a628b04339453635be34148c9fbe66506\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:accf5025ffbf53e48db9ab7f429c68b1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#accf5025ffbf53e48db9ab7f429c68b1e\">setVersion</a> (uint8_t major, uint8_t minor, uint8_t incremental)</td></tr>\n<tr class=\"memdesc:accf5025ffbf53e48db9ab7f429c68b1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Sets node EnigmaIOT version.  <a href=\"classNode.html#accf5025ffbf53e48db9ab7f429c68b1e\">More...</a><br /></td></tr>\n<tr class=\"separator:accf5025ffbf53e48db9ab7f429c68b1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a712ec21cec6ac19ee68c8beb202fbf92\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a712ec21cec6ac19ee68c8beb202fbf92\">queuedMessage</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]</td></tr>\n<tr class=\"memdesc:a712ec21cec6ac19ee68c8beb202fbf92\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Message queued for sending to node in case of sleepy mode.  <a href=\"classNode.html#a712ec21cec6ac19ee68c8beb202fbf92\">More...</a><br /></td></tr>\n<tr class=\"separator:a712ec21cec6ac19ee68c8beb202fbf92\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41f17a6abd376d602bef3925c751a181\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a41f17a6abd376d602bef3925c751a181\">qMessageLength</a></td></tr>\n<tr class=\"memdesc:a41f17a6abd376d602bef3925c751a181\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Queued message length.  <a href=\"classNode.html#a41f17a6abd376d602bef3925c751a181\">More...</a><br /></td></tr>\n<tr class=\"separator:a41f17a6abd376d602bef3925c751a181\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0db2a4dfda51cfc5afe8c846a622ba54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a0db2a4dfda51cfc5afe8c846a622ba54\">qMessagePending</a> = false</td></tr>\n<tr class=\"memdesc:a0db2a4dfda51cfc5afe8c846a622ba54\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><code>True</code> if message should be sent just after next data message  <a href=\"classNode.html#a0db2a4dfda51cfc5afe8c846a622ba54\">More...</a><br /></td></tr>\n<tr class=\"separator:a0db2a4dfda51cfc5afe8c846a622ba54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aedfde4376c7c84dd8c88c2c530b3b102\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#aedfde4376c7c84dd8c88c2c530b3b102\">packetNumber</a> = 0</td></tr>\n<tr class=\"memdesc:aedfde4376c7c84dd8c88c2c530b3b102\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Number of packets received from node to gateway.  <a href=\"classNode.html#aedfde4376c7c84dd8c88c2c530b3b102\">More...</a><br /></td></tr>\n<tr class=\"separator:aedfde4376c7c84dd8c88c2c530b3b102\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4e2e4c6afb4bf93ca10e60d239fd87c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a4e2e4c6afb4bf93ca10e60d239fd87c5\">packetErrors</a> = 0</td></tr>\n<tr class=\"memdesc:a4e2e4c6afb4bf93ca10e60d239fd87c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Number of errored packets.  <a href=\"classNode.html#a4e2e4c6afb4bf93ca10e60d239fd87c5\">More...</a><br /></td></tr>\n<tr class=\"separator:a4e2e4c6afb4bf93ca10e60d239fd87c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2f8f6419cc10c972285178991b2cec78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a2f8f6419cc10c972285178991b2cec78\">per</a> = 0</td></tr>\n<tr class=\"memdesc:a2f8f6419cc10c972285178991b2cec78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Current packet error rate of a specific node.  <a href=\"classNode.html#a2f8f6419cc10c972285178991b2cec78\">More...</a><br /></td></tr>\n<tr class=\"separator:a2f8f6419cc10c972285178991b2cec78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abc1ad898434142e44923f7220b6a2ae4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">packetsHour</a> = 0</td></tr>\n<tr class=\"memdesc:abc1ad898434142e44923f7220b6a2ae4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Packet rate for a specific nope.  <a href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">More...</a><br /></td></tr>\n<tr class=\"separator:abc1ad898434142e44923f7220b6a2ae4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-methods\"></a>\nProtected Member Functions</h2></td></tr>\n<tr class=\"memitem:a90d944dd41d445ec73a5b9534483329f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">initRateFilter</a> ()</td></tr>\n<tr class=\"memdesc:a90d944dd41d445ec73a5b9534483329f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Starts smoothing filter.  <a href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">More...</a><br /></td></tr>\n<tr class=\"separator:a90d944dd41d445ec73a5b9534483329f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a03e424c2251b5b96fb68444f008f6f17\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">keyValid</a></td></tr>\n<tr class=\"memdesc:a03e424c2251b5b96fb68444f008f6f17\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> shared key valid.  <a href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">More...</a><br /></td></tr>\n<tr class=\"separator:a03e424c2251b5b96fb68444f008f6f17\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a02eb5aa6340f2d4e0cfd48f7bb661dd3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">status</a></td></tr>\n<tr class=\"memdesc:a02eb5aa6340f2d4e0cfd48f7bb661dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Current node status. See <code>enum node_status</code>  <a href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:a02eb5aa6340f2d4e0cfd48f7bb661dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2378f7b085ccdc06314b12263fd2d34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">lastMessageCounter</a></td></tr>\n<tr class=\"memdesc:af2378f7b085ccdc06314b12263fd2d34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.  <a href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">More...</a><br /></td></tr>\n<tr class=\"separator:af2378f7b085ccdc06314b12263fd2d34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac36076f507ba318d5f3fd37c9eee2cc2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">lastControlCounter</a></td></tr>\n<tr class=\"memdesc:ac36076f507ba318d5f3fd37c9eee2cc2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.  <a href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">More...</a><br /></td></tr>\n<tr class=\"separator:ac36076f507ba318d5f3fd37c9eee2cc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a91fa5b6c997bf5a84369d8f9dd691c54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">lastDownlinkMsgCounter</a></td></tr>\n<tr class=\"memdesc:a91fa5b6c997bf5a84369d8f9dd691c54\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last downlink message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.  <a href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">More...</a><br /></td></tr>\n<tr class=\"separator:a91fa5b6c997bf5a84369d8f9dd691c54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f9547a1ede244be2b33d1fcf6de68b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">nodeId</a></td></tr>\n<tr class=\"memdesc:a4f9547a1ede244be2b33d1fcf6de68b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identifier asigned by gateway.  <a href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">More...</a><br /></td></tr>\n<tr class=\"separator:a4f9547a1ede244be2b33d1fcf6de68b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afad1c640f8fc2623996d3d2a174ad763\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">timer_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">keyValidFrom</a></td></tr>\n<tr class=\"memdesc:afad1c640f8fc2623996d3d2a174ad763\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last time that <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> and Gateway agreed a key.  <a href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">More...</a><br /></td></tr>\n<tr class=\"separator:afad1c640f8fc2623996d3d2a174ad763\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a774efd63a9d427c0911b07dc3a7ac11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">sleepyNode</a> = true</td></tr>\n<tr class=\"memdesc:a774efd63a9d427c0911b07dc3a7ac11d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> sleepy definition.  <a href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">More...</a><br /></td></tr>\n<tr class=\"separator:a774efd63a9d427c0911b07dc3a7ac11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a09ee8b1462486a05fbcd1af2bbdd44ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed\">broadcastEnabled</a> = false</td></tr>\n<tr class=\"memdesc:a09ee8b1462486a05fbcd1af2bbdd44ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> is able to send broadcast messages.  <a href=\"classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed\">More...</a><br /></td></tr>\n<tr class=\"separator:a09ee8b1462486a05fbcd1af2bbdd44ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aebc89c4269923800190e3c340f45d550\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">broadcastKeyRequested</a> = false</td></tr>\n<tr class=\"memdesc:aebc89c4269923800190e3c340f45d550\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> is waiting for broadcast key.  <a href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">More...</a><br /></td></tr>\n<tr class=\"separator:aebc89c4269923800190e3c340f45d550\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac492ae71e392fe59002e9900fb0d8c03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">initAsSleepy</a></td></tr>\n<tr class=\"memdesc:ac492ae71e392fe59002e9900fb0d8c03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Stores initial sleepy node. If this is false, this node does not accept sleep time changes.  <a href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">More...</a><br /></td></tr>\n<tr class=\"separator:ac492ae71e392fe59002e9900fb0d8c03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a918b7ad8582d1b2d569dbd66a262ee50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a918b7ad8582d1b2d569dbd66a262ee50\">askedTimeSync</a> = false</td></tr>\n<tr class=\"separator:a918b7ad8582d1b2d569dbd66a262ee50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aba2a2a0bc44214b57f57abd59ec5b0a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">mac</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]</td></tr>\n<tr class=\"memdesc:aba2a2a0bc44214b57f57abd59ec5b0a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address.  <a href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">More...</a><br /></td></tr>\n<tr class=\"separator:aba2a2a0bc44214b57f57abd59ec5b0a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aad088b52de3eb46a8c89e6cb87bdf887\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">key</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td></tr>\n<tr class=\"memdesc:aad088b52de3eb46a8c89e6cb87bdf887\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Shared key.  <a href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">More...</a><br /></td></tr>\n<tr class=\"separator:aad088b52de3eb46a8c89e6cb87bdf887\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2d56bbba3211927eff545e385ef5d162\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">timer_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a2d56bbba3211927eff545e385ef5d162\">lastMessageTime</a></td></tr>\n<tr class=\"memdesc:a2d56bbba3211927eff545e385ef5d162\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> state.  <a href=\"classNode.html#a2d56bbba3211927eff545e385ef5d162\">More...</a><br /></td></tr>\n<tr class=\"separator:a2d56bbba3211927eff545e385ef5d162\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adba11398693739d5fc1d9a755d4bc567\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">rateFilter</a></td></tr>\n<tr class=\"memdesc:adba11398693739d5fc1d9a755d4bc567\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Filter for message rate smoothing.  <a href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">More...</a><br /></td></tr>\n<tr class=\"separator:adba11398693739d5fc1d9a755d4bc567\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa270ef450c28e630de129a94c6992805\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">nodeName</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>]</td></tr>\n<tr class=\"memdesc:aa270ef450c28e630de129a94c6992805\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name. Use as a human friendly name to avoid use of numeric address.  <a href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">More...</a><br /></td></tr>\n<tr class=\"separator:aa270ef450c28e630de129a94c6992805\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a48d7a268139be97133747b7692a5f888\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">rssi</a></td></tr>\n<tr class=\"memdesc:a48d7a268139be97133747b7692a5f888\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Stores last RSSI measurement.  <a href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">More...</a><br /></td></tr>\n<tr class=\"separator:a48d7a268139be97133747b7692a5f888\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9af4beb0e8a8cf8405116b92077d9027\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">enigmaIOTVersion</a> [3]</td></tr>\n<tr class=\"memdesc:a9af4beb0e8a8cf8405116b92077d9027\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Protocol version, filled when a version message is received.  <a href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">More...</a><br /></td></tr>\n<tr class=\"separator:a9af4beb0e8a8cf8405116b92077d9027\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"friends\"></a>\nFriends</h2></td></tr>\n<tr class=\"memitem:a796dbbcdb4e627658df143380ddb88fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNode.html#a796dbbcdb4e627658df143380ddb88fa\">NodeList</a></td></tr>\n<tr class=\"separator:a796dbbcdb4e627658df143380ddb88fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Class definition for a single sensor <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00109\">109</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"ad7a34779cad45d997bfd6d3d8043c75f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad7a34779cad45d997bfd6d3d8043c75f\">&#9670;&nbsp;</a></span>Node() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Node::Node </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Plain constructor. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a new unregistered <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00078\">78</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a45db0ed8c3ce61c3cee9d2070e20493f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a45db0ed8c3ce61c3cee9d2070e20493f\">&#9670;&nbsp;</a></span>Node() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">Node::Node </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6\">node_t</a>&#160;</td>\n          <td class=\"paramname\"><em>nodeData</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">explicit</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Constructor that initializes data from another <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> data. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">nodeData</td><td><code><a class=\"el\" href=\"structnode__instance.html\" title=\"Struct that define node fields. Used for long term storage needs.\">node_instance</a></code> struct that contains initalization values for new <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a new <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance with same data as given <code><a class=\"el\" href=\"structnode__instance.html\" title=\"Struct that define node fields. Used for long term storage needs.\">node_instance</a></code> struct </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00084\">84</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"ae6768d968b8f72fb12001fa3895a4670\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae6768d968b8f72fb12001fa3895a4670\">&#9670;&nbsp;</a></span>broadcastIsEnabled()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::broadcastIsEnabled </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted broadcast messages. If this is enabled this will be notified to gateway so that it sends broadcast key. Notice this mode is optional and does not disable the ability to send normal messages. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if node has broadcast mode enabled. </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00373\">373</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2c6ecfa165b71155d3d25331ca56d98e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2c6ecfa165b71155d3d25331ca56d98e\">&#9670;&nbsp;</a></span>enableBroadcast()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::enableBroadcast </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>broadcast</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Enables node broadcast mode. <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> will request broadcast key to Gateway. When it is received node will be able to send and receive encrypted broadcast messages. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">broadcast</td><td><code>true</code> to enable broadcast mode on this node. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00386\">386</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a61ac445d996a9304b34fc78a2514364f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a61ac445d996a9304b34fc78a2514364f\">&#9670;&nbsp;</a></span>getEncriptionKey()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t* Node::getEncriptionKey </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> encryption key. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a pointer to <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> encryption key </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00173\">173</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a89ccd5b416ac31593da426c48ec8562a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a89ccd5b416ac31593da426c48ec8562a\">&#9670;&nbsp;</a></span>getInitAsSleepy()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::getInitAsSleepy </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets initial sleepy mode. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if node started as sleepy. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00354\">354</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a30a8e0aaad582a1baa269c6641150586\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a30a8e0aaad582a1baa269c6641150586\">&#9670;&nbsp;</a></span>getKeyValidFrom()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t Node::getKeyValidFrom </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets last time that key was agreed with gateway. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Time in milliseconds of last key agreement </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00187\">187</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae4b169a75d7c1fa535eb883c28683001\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae4b169a75d7c1fa535eb883c28683001\">&#9670;&nbsp;</a></span>getLastControlCounter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t Node::getLastControlCounter </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets counter for last received control message from node. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Message counter </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00226\">226</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aecf8d05afddcd5d460472963ee88bd2b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aecf8d05afddcd5d460472963ee88bd2b\">&#9670;&nbsp;</a></span>getLastDownlinkMsgCounter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t Node::getLastDownlinkMsgCounter </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets counter for last downlink message from gateway. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Message counter </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00234\">234</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ab5c31a536cb60a6c86dec8524117f50e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab5c31a536cb60a6c86dec8524117f50e\">&#9670;&nbsp;</a></span>getLastMessageCounter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t Node::getLastMessageCounter </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets counter for last received message from node. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Message counter </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00218\">218</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a15877a320c33f77402c5700774d936cc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a15877a320c33f77402c5700774d936cc\">&#9670;&nbsp;</a></span>getLastMessageTime()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t Node::getLastMessageTime </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets last time that node sent a message. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Time in milliseconds of last received node message </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00203\">203</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4cefee4f9feaa563b8e8a725a847e9ac\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4cefee4f9feaa563b8e8a725a847e9ac\">&#9670;&nbsp;</a></span>getMacAddress()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t* Node::getMacAddress </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets address from <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a pointer to <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00128\">128</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a129745eaa2b8e08ac8201809a6e2cb17\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a129745eaa2b8e08ac8201809a6e2cb17\">&#9670;&nbsp;</a></span>getNodeData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6\">node_t</a> Node::getNodeData </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets a struct that represents node object. May be used for node serialization. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> struct </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00017\">17</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2563f7f556d09035dbbf042656d4fa3a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2563f7f556d09035dbbf042656d4fa3a\">&#9670;&nbsp;</a></span>getNodeId()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t Node::getNodeId </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identifier. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identifier </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00136\">136</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5c665e844c5f7f121a72baae270a2ba7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5c665e844c5f7f121a72baae270a2ba7\">&#9670;&nbsp;</a></span>getNodeName()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char* Node::getNodeName </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00152\">152</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac9cb809cbf8a76bda02e2c92731b213b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac9cb809cbf8a76bda02e2c92731b213b\">&#9670;&nbsp;</a></span>getRSSI()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int8_t Node::getRSSI </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets last RSSI measurement of Gateway. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>RSSI power of Gateway signal </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00418\">418</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5bf02d202c9cb76831de89e4d1ef8893\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5bf02d202c9cb76831de89e4d1ef8893\">&#9670;&nbsp;</a></span>getSleepy()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::getSleepy </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sleep after sending a message. In this case it will wait for a short while for a downlink message from gateway. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if node sleeps after sending a message and wait for downlink. <code>false</code> if downlink may happen in any moment </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00363\">363</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6172f9eb39a02f01b692a53b9ee09c56\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6172f9eb39a02f01b692a53b9ee09c56\">&#9670;&nbsp;</a></span>getStatus()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> Node::getStatus </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets status for finite state machine that represents node. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> status </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00300\">300</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a628b04339453635be34148c9fbe66506\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a628b04339453635be34148c9fbe66506\">&#9670;&nbsp;</a></span>getVersion()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t* Node::getVersion </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets node EnigmaIOT version. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>EnigmaIOT protocol version in a uint8_t array of 3 elements </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00449\">449</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a90d944dd41d445ec73a5b9534483329f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a90d944dd41d445ec73a5b9534483329f\">&#9670;&nbsp;</a></span>initRateFilter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::initRateFilter </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Starts smoothing filter. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00067\">67</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a30aa0104f6df938075c7ff4ac64b3f41\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a30aa0104f6df938075c7ff4ac64b3f41\">&#9670;&nbsp;</a></span>isBroadcastKeyRequested()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::isBroadcastKeyRequested </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Checks if node is waiting for broadcast key. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if node is waiting. </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00404\">404</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa382c421546fc99b22b4698acb36c3d8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa382c421546fc99b22b4698acb36c3d8\">&#9670;&nbsp;</a></span>isKeyValid()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::isKeyValid </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets shared key validity for this node. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if node shared key is valid. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00276\">276</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0b809fd0304e6e55173ac1e6fa8d3dc8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0b809fd0304e6e55173ac1e6fa8d3dc8\">&#9670;&nbsp;</a></span>isRegistered()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::isRegistered </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets registration state of this node. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if node is registered on gateway. <code>false</code> otherwise </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00292\">292</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a36b675e4186420fb1f8e324fc0987cbd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a36b675e4186420fb1f8e324fc0987cbd\">&#9670;&nbsp;</a></span>printToSerial()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::printToSerial </td>\n          <td>(</td>\n          <td class=\"paramtype\">Stream *&#160;</td>\n          <td class=\"paramname\"><em>port</em> = <code>&amp;Serial</code></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dumps node data to the given stream, Serial by default. This method may be used for debugging. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">port</td><td>Stream to print data to </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00032\">32</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a7c565caad2fea0439f28d24887ac2498\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7c565caad2fea0439f28d24887ac2498\">&#9670;&nbsp;</a></span>reset()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::reset </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Resets all node fields to a default initial and not registered state. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00106\">106</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0e298bac431d8ac9e98fb12b71292de1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0e298bac431d8ac9e98fb12b71292de1\">&#9670;&nbsp;</a></span>setBroadcastKeyRequested()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setBroadcastKeyRequested </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>request</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Mark node to be waiting for broadcast key. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">request</td><td><code>true</code> to mark node as waiting. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00396\">396</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae7b7337fdc178fe350ac4ce2f4675040\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae7b7337fdc178fe350ac4ce2f4675040\">&#9670;&nbsp;</a></span>setEncryptionKey()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setEncryptionKey </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>key</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Sets encryption key. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">key</td><td>New key </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00011\">11</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a3621fd27cee1a28145a7daa167ad0b3d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3621fd27cee1a28145a7daa167ad0b3d\">&#9670;&nbsp;</a></span>setInitAsSleepy()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setInitAsSleepy </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>sleepy</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Records if node started as a sleepy node or not. If it did not started so it will never accept sleep time changes. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sleepy</td><td><code>true</code> if node started as sleepy. <code>false</code> otherwise </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00346\">346</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a81ded601038e157ecb03daa7fb85242d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81ded601038e157ecb03daa7fb85242d\">&#9670;&nbsp;</a></span>setKeyValid()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setKeyValid </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets shared key validity for this node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td>node key validity </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00284\">284</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a65284f939ba9d70cff90e7e508ac1a13\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a65284f939ba9d70cff90e7e508ac1a13\">&#9670;&nbsp;</a></span>setKeyValidFrom()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setKeyValidFrom </td>\n          <td>(</td>\n          <td class=\"paramtype\">time_t&#160;</td>\n          <td class=\"paramname\"><em>keyValidFrom</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets time when key was agreed with gateway. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">keyValidFrom</td><td>Time on key agreement </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00195\">195</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2d876405390237c8cbbd4689fb2f960b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2d876405390237c8cbbd4689fb2f960b\">&#9670;&nbsp;</a></span>setLastControlCounter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setLastControlCounter </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>counter</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets counter for last received control message from node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">counter</td><td>Message counter </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00250\">250</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a68eac7f22f879dbe7bb1dec0615c5ce9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a68eac7f22f879dbe7bb1dec0615c5ce9\">&#9670;&nbsp;</a></span>setLastDownlinkMsgCounter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setLastDownlinkMsgCounter </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>counter</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets counter for last downlink message from gateway. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">counter</td><td>Message counter </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00258\">258</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aaa07721114c6b57152caf9a7b8cd4c23\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aaa07721114c6b57152caf9a7b8cd4c23\">&#9670;&nbsp;</a></span>setLastMessageCounter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setLastMessageCounter </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>counter</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets counter for last received message from node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">counter</td><td>Message counter </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00242\">242</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae7d5f900dd1290910a30692175dc8e23\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae7d5f900dd1290910a30692175dc8e23\">&#9670;&nbsp;</a></span>setLastMessageTime()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setLastMessageTime </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets current moment as last node message time. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00210\">210</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aea12cab858f40940a1ab5c61596b6355\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aea12cab858f40940a1ab5c61596b6355\">&#9670;&nbsp;</a></span>setMacAddress()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setMacAddress </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>macAddress</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets node address. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">macAddress</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00266\">266</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a3615b98da7f0ea0d8615a8f45519a715\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3615b98da7f0ea0d8615a8f45519a715\">&#9670;&nbsp;</a></span>setNodeId()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setNodeId </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>nodeId</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets a new <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identifier. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">nodeId</td><td>New nodeId value </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00144\">144</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a31c7b1dce5c26d81ead2cabf5395d935\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a31c7b1dce5c26d81ead2cabf5395d935\">&#9670;&nbsp;</a></span>setNodeName()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setNodeName </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>name</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">name</td><td>Custom node name. This should be unique in the network </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00164\">164</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa14110f23c8cfe73c44e1a87382a1081\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa14110f23c8cfe73c44e1a87382a1081\">&#9670;&nbsp;</a></span>setRSSI()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setRSSI </td>\n          <td>(</td>\n          <td class=\"paramtype\">int8_t&#160;</td>\n          <td class=\"paramname\"><em>rssi</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Stores last RSSI measurement of Gateway. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">rssi</td><td>RSSI power of Gateway signal </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00426\">426</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae1a2a8c747a1af2e7d9467ae9199edd7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae1a2a8c747a1af2e7d9467ae9199edd7\">&#9670;&nbsp;</a></span>setSleepy()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setSleepy </td>\n          <td>(</td>\n          <td class=\"paramtype\">bool&#160;</td>\n          <td class=\"paramname\"><em>sleepy</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sleep after sending a message. In this case it will wait for a short while for a downlink message from gateway. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">sleepy</td><td><code>true</code> if node sleeps after sending a message and wait for downlink. <code>false</code> if downlink may happen in any moment </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00334\">334</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7590c6b11a260ca766a2ad46f2b0cf27\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7590c6b11a260ca766a2ad46f2b0cf27\">&#9670;&nbsp;</a></span>setStatus()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setStatus </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a>&#160;</td>\n          <td class=\"paramname\"><em>status</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets status for finite state machine that represents node. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">status</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> status </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00308\">308</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a121f5ac6ef71317bd8900b97a8abc65a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a121f5ac6ef71317bd8900b97a8abc65a\">&#9670;&nbsp;</a></span>setTimeSyncEnabled()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setTimeSyncEnabled </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Mark node as time sync enabled. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00441\">441</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"accf5025ffbf53e48db9ab7f429c68b1e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#accf5025ffbf53e48db9ab7f429c68b1e\">&#9670;&nbsp;</a></span>setVersion()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::setVersion </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>major</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>minor</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>incremental</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Sets node EnigmaIOT version. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">major</td><td>Major protocol version. In 0.9.6, this should be 0 </td></tr>\n    <tr><td class=\"paramname\">minor</td><td>Minor protocol version. In 0.9.6, this should be 9 </td></tr>\n    <tr><td class=\"paramname\">incremental</td><td>Incremental protocol version. In 0.9.6, this should be 6 </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00459\">459</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a71c1077723465057bd8cbc90f33c2ead\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a71c1077723465057bd8cbc90f33c2ead\">&#9670;&nbsp;</a></span>updatePacketsRate()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void Node::updatePacketsRate </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Adds a new message rate value for filter calculation. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">value</td><td>Next value for calculation </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00101\">101</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4bb77cd04f77b857935836284c5e41af\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4bb77cd04f77b857935836284c5e41af\">&#9670;&nbsp;</a></span>useTimeSync()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::useTimeSync </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets node info to check if it has requested time sync ever. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>true or false </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00434\">434</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Friends And Related Function Documentation</h2>\n<a id=\"a796dbbcdb4e627658df143380ddb88fa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a796dbbcdb4e627658df143380ddb88fa\">&#9670;&nbsp;</a></span>NodeList</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">friend class <a class=\"el\" href=\"classNodeList.html\">NodeList</a></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">friend</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00502\">502</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a918b7ad8582d1b2d569dbd66a262ee50\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a918b7ad8582d1b2d569dbd66a262ee50\">&#9670;&nbsp;</a></span>askedTimeSync</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::askedTimeSync = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00488\">488</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a09ee8b1462486a05fbcd1af2bbdd44ed\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a09ee8b1462486a05fbcd1af2bbdd44ed\">&#9670;&nbsp;</a></span>broadcastEnabled</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::broadcastEnabled = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> is able to send broadcast messages. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00485\">485</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aebc89c4269923800190e3c340f45d550\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aebc89c4269923800190e3c340f45d550\">&#9670;&nbsp;</a></span>broadcastKeyRequested</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::broadcastKeyRequested = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> is waiting for broadcast key. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00486\">486</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a9af4beb0e8a8cf8405116b92077d9027\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9af4beb0e8a8cf8405116b92077d9027\">&#9670;&nbsp;</a></span>enigmaIOTVersion</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t Node::enigmaIOTVersion[3]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Protocol version, filled when a version message is received. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00495\">495</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac492ae71e392fe59002e9900fb0d8c03\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac492ae71e392fe59002e9900fb0d8c03\">&#9670;&nbsp;</a></span>initAsSleepy</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::initAsSleepy</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Stores initial sleepy node. If this is false, this node does not accept sleep time changes. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00487\">487</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aad088b52de3eb46a8c89e6cb87bdf887\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aad088b52de3eb46a8c89e6cb87bdf887\">&#9670;&nbsp;</a></span>key</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t Node::key[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Shared key. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00490\">490</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a03e424c2251b5b96fb68444f008f6f17\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a03e424c2251b5b96fb68444f008f6f17\">&#9670;&nbsp;</a></span>keyValid</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::keyValid</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> shared key valid. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00477\">477</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"afad1c640f8fc2623996d3d2a174ad763\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afad1c640f8fc2623996d3d2a174ad763\">&#9670;&nbsp;</a></span>keyValidFrom</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">timer_t Node::keyValidFrom</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Last time that <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> and Gateway agreed a key. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00483\">483</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac36076f507ba318d5f3fd37c9eee2cc2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac36076f507ba318d5f3fd37c9eee2cc2\">&#9670;&nbsp;</a></span>lastControlCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t Node::lastControlCounter</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Last message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00480\">480</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a91fa5b6c997bf5a84369d8f9dd691c54\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a91fa5b6c997bf5a84369d8f9dd691c54\">&#9670;&nbsp;</a></span>lastDownlinkMsgCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t Node::lastDownlinkMsgCounter</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Last downlink message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00481\">481</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af2378f7b085ccdc06314b12263fd2d34\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af2378f7b085ccdc06314b12263fd2d34\">&#9670;&nbsp;</a></span>lastMessageCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t Node::lastMessageCounter</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Last message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00479\">479</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2d56bbba3211927eff545e385ef5d162\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2d56bbba3211927eff545e385ef5d162\">&#9670;&nbsp;</a></span>lastMessageTime</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">timer_t Node::lastMessageTime</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> state. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00491\">491</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aba2a2a0bc44214b57f57abd59ec5b0a2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aba2a2a0bc44214b57f57abd59ec5b0a2\">&#9670;&nbsp;</a></span>mac</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t Node::mac[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00489\">489</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4f9547a1ede244be2b33d1fcf6de68b0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4f9547a1ede244be2b33d1fcf6de68b0\">&#9670;&nbsp;</a></span>nodeId</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t Node::nodeId</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identifier asigned by gateway. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00482\">482</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa270ef450c28e630de129a94c6992805\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa270ef450c28e630de129a94c6992805\">&#9670;&nbsp;</a></span>nodeName</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char Node::nodeName[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name. Use as a human friendly name to avoid use of numeric address. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00493\">493</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4e2e4c6afb4bf93ca10e60d239fd87c5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4e2e4c6afb4bf93ca10e60d239fd87c5\">&#9670;&nbsp;</a></span>packetErrors</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint32_t Node::packetErrors = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Number of errored packets. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00470\">470</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aedfde4376c7c84dd8c88c2c530b3b102\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aedfde4376c7c84dd8c88c2c530b3b102\">&#9670;&nbsp;</a></span>packetNumber</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint32_t Node::packetNumber = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Number of packets received from node to gateway. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00469\">469</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"abc1ad898434142e44923f7220b6a2ae4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abc1ad898434142e44923f7220b6a2ae4\">&#9670;&nbsp;</a></span>packetsHour</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">double Node::packetsHour = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Packet rate for a specific nope. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00472\">472</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2f8f6419cc10c972285178991b2cec78\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2f8f6419cc10c972285178991b2cec78\">&#9670;&nbsp;</a></span>per</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">double Node::per = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Current packet error rate of a specific node. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00471\">471</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a41f17a6abd376d602bef3925c751a181\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41f17a6abd376d602bef3925c751a181\">&#9670;&nbsp;</a></span>qMessageLength</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t Node::qMessageLength</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Queued message length. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00466\">466</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0db2a4dfda51cfc5afe8c846a622ba54\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0db2a4dfda51cfc5afe8c846a622ba54\">&#9670;&nbsp;</a></span>qMessagePending</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::qMessagePending = false</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p><code>True</code> if message should be sent just after next data message </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00467\">467</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a712ec21cec6ac19ee68c8beb202fbf92\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a712ec21cec6ac19ee68c8beb202fbf92\">&#9670;&nbsp;</a></span>queuedMessage</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t Node::queuedMessage[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Message queued for sending to node in case of sleepy mode. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00465\">465</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"adba11398693739d5fc1d9a755d4bc567\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adba11398693739d5fc1d9a755d4bc567\">&#9670;&nbsp;</a></span>rateFilter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a>* Node::rateFilter</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Filter for message rate smoothing. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00492\">492</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a48d7a268139be97133747b7692a5f888\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a48d7a268139be97133747b7692a5f888\">&#9670;&nbsp;</a></span>rssi</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int8_t Node::rssi</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Stores last RSSI measurement. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00494\">494</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a774efd63a9d427c0911b07dc3a7ac11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a774efd63a9d427c0911b07dc3a7ac11d\">&#9670;&nbsp;</a></span>sleepyNode</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool Node::sleepyNode = true</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> sleepy definition. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00484\">484</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a02eb5aa6340f2d4e0cfd48f7bb661dd3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">&#9670;&nbsp;</a></span>status</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> Node::status</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Current node status. See <code>enum node_status</code> </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00478\">478</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a></li>\n<li>src/<a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classNodeList-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">NodeList Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classNodeList.html\">NodeList</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a></td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">checkNodeName</a>(const char *name, const uint8_t *address)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">countActiveNodes</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711\">findEmptyNode</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">getBroadcastNode</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#acfff6ed812a219b7b7514989da7fc34e\">getLastBroadcastMsgCounter</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">getNewNode</a>(const uint8_t *mac)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">getNextActiveNode</a>(uint16_t nodeId)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#add85a6384d393648fa7ca693a0dba44c\">getNextActiveNode</a>(Node *node)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">getNodeFromID</a>(uint16_t nodeId)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">getNodeFromMAC</a>(const uint8_t *mac)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">getNodeFromName</a>(const char *name)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042\">incLastBroadcastMsgCounter</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">initBroadcastNode</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7\">lastBroadcastMsgCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f\">NodeList</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a></td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">printToSerial</a>(Stream *port)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">unregisterNode</a>(uint16_t nodeId)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8\">unregisterNode</a>(const uint8_t *mac)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html#a52e67df2a4891252279101a492453038\">unregisterNode</a>(Node *node)</td><td class=\"entry\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classNodeList.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: NodeList Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classNodeList-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">NodeList Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a7cf92e8316f291e0a4e4ad608756887f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f\">NodeList</a> ()</td></tr>\n<tr class=\"memdesc:a7cf92e8316f291e0a4e4ad608756887f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> list constructor.  <a href=\"classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f\">More...</a><br /></td></tr>\n<tr class=\"separator:a7cf92e8316f291e0a4e4ad608756887f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aab4a7f7971eeeb4c0fa3af8064006b79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">getNodeFromID</a> (uint16_t nodeId)</td></tr>\n<tr class=\"memdesc:aab4a7f7971eeeb4c0fa3af8064006b79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets node that correspond with given nodeId.  <a href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">More...</a><br /></td></tr>\n<tr class=\"separator:aab4a7f7971eeeb4c0fa3af8064006b79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a08530d06e81c160b346047e37839ee7d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">getNodeFromMAC</a> (const uint8_t *mac)</td></tr>\n<tr class=\"memdesc:a08530d06e81c160b346047e37839ee7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets node that correspond with given address.  <a href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">More...</a><br /></td></tr>\n<tr class=\"separator:a08530d06e81c160b346047e37839ee7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a08caf502661a3bf1b75ba6860eb1bebe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">getNodeFromName</a> (const char *name)</td></tr>\n<tr class=\"memdesc:a08caf502661a3bf1b75ba6860eb1bebe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets node that correspond with given node name.  <a href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">More...</a><br /></td></tr>\n<tr class=\"separator:a08caf502661a3bf1b75ba6860eb1bebe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6702f6b65634da0500f5e99ccf017178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">checkNodeName</a> (const char *name, const uint8_t *address)</td></tr>\n<tr class=\"memdesc:a6702f6b65634da0500f5e99ccf017178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name for duplicate.  <a href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">More...</a><br /></td></tr>\n<tr class=\"separator:a6702f6b65634da0500f5e99ccf017178\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad2f5b99eaeeb4f3b805acb0a019b6711\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711\">findEmptyNode</a> ()</td></tr>\n<tr class=\"memdesc:ad2f5b99eaeeb4f3b805acb0a019b6711\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Searches for a free place for a new <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance.  <a href=\"classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711\">More...</a><br /></td></tr>\n<tr class=\"separator:ad2f5b99eaeeb4f3b805acb0a019b6711\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abb4895c5b9ae6b041c9102178de837c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">countActiveNodes</a> ()</td></tr>\n<tr class=\"memdesc:abb4895c5b9ae6b041c9102178de837c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets the number of active nodes (registered or registering)  <a href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">More...</a><br /></td></tr>\n<tr class=\"separator:abb4895c5b9ae6b041c9102178de837c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2892fb1e6830073f3419da35ddad8725\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">unregisterNode</a> (uint16_t nodeId)</td></tr>\n<tr class=\"memdesc:a2892fb1e6830073f3419da35ddad8725\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Frees up a node and marks it as available.  <a href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">More...</a><br /></td></tr>\n<tr class=\"separator:a2892fb1e6830073f3419da35ddad8725\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8\">unregisterNode</a> (const uint8_t *mac)</td></tr>\n<tr class=\"memdesc:ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Frees up a node and marks it as available.  <a href=\"classNodeList.html#ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8\">More...</a><br /></td></tr>\n<tr class=\"separator:ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a52e67df2a4891252279101a492453038\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a52e67df2a4891252279101a492453038\">unregisterNode</a> (<a class=\"el\" href=\"classNode.html\">Node</a> *node)</td></tr>\n<tr class=\"memdesc:a52e67df2a4891252279101a492453038\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Frees up a node using a pointer to it.  <a href=\"classNodeList.html#a52e67df2a4891252279101a492453038\">More...</a><br /></td></tr>\n<tr class=\"separator:a52e67df2a4891252279101a492453038\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72dc59a4a4d32e2918b20038f2837ee2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">getNextActiveNode</a> (uint16_t nodeId)</td></tr>\n<tr class=\"memdesc:a72dc59a4a4d32e2918b20038f2837ee2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets next active node by nodeId.  <a href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">More...</a><br /></td></tr>\n<tr class=\"separator:a72dc59a4a4d32e2918b20038f2837ee2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:add85a6384d393648fa7ca693a0dba44c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#add85a6384d393648fa7ca693a0dba44c\">getNextActiveNode</a> (<a class=\"el\" href=\"classNode.html\">Node</a> *node)</td></tr>\n<tr class=\"memdesc:add85a6384d393648fa7ca693a0dba44c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets next active node by instance where to get nodeId.  <a href=\"classNodeList.html#add85a6384d393648fa7ca693a0dba44c\">More...</a><br /></td></tr>\n<tr class=\"separator:add85a6384d393648fa7ca693a0dba44c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a04851c9373e00d3c91c11a87d052f1f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">getNewNode</a> (const uint8_t *mac)</td></tr>\n<tr class=\"memdesc:a04851c9373e00d3c91c11a87d052f1f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Finds a node that correspond with given address of creates a new one if it does not exist.  <a href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">More...</a><br /></td></tr>\n<tr class=\"separator:a04851c9373e00d3c91c11a87d052f1f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a239930df15810784dab9a3284730a35f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">printToSerial</a> (Stream *port)</td></tr>\n<tr class=\"memdesc:a239930df15810784dab9a3284730a35f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dumps node list data to a Stream object.  <a href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">More...</a><br /></td></tr>\n<tr class=\"separator:a239930df15810784dab9a3284730a35f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0020539e3b49df3706fe66a44bbf3700\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">getBroadcastNode</a> ()</td></tr>\n<tr class=\"memdesc:a0020539e3b49df3706fe66a44bbf3700\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets broadcas node instance.  <a href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">More...</a><br /></td></tr>\n<tr class=\"separator:a0020539e3b49df3706fe66a44bbf3700\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a956635fa60412a9a026ea64245dd4443\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">initBroadcastNode</a> ()</td></tr>\n<tr class=\"memdesc:a956635fa60412a9a026ea64245dd4443\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Init broadcast node data.  <a href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">More...</a><br /></td></tr>\n<tr class=\"separator:a956635fa60412a9a026ea64245dd4443\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acfff6ed812a219b7b7514989da7fc34e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#acfff6ed812a219b7b7514989da7fc34e\">getLastBroadcastMsgCounter</a> ()</td></tr>\n<tr class=\"memdesc:acfff6ed812a219b7b7514989da7fc34e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Ask for last broadcast message counter state.  <a href=\"classNodeList.html#acfff6ed812a219b7b7514989da7fc34e\">More...</a><br /></td></tr>\n<tr class=\"separator:acfff6ed812a219b7b7514989da7fc34e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab822a0ab8cb5fbdfc582dd7fc5c73042\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042\">incLastBroadcastMsgCounter</a> ()</td></tr>\n<tr class=\"memdesc:ab822a0ab8cb5fbdfc582dd7fc5c73042\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Increments last broadcast message counter stata by one.  <a href=\"classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042\">More...</a><br /></td></tr>\n<tr class=\"separator:ab822a0ab8cb5fbdfc582dd7fc5c73042\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a57a69c9dde4327beeb404c83defdbdaa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">nodes</a> [<a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>]</td></tr>\n<tr class=\"memdesc:a57a69c9dde4327beeb404c83defdbdaa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Static <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> array that holds maximum number of supported nodes.  <a href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">More...</a><br /></td></tr>\n<tr class=\"separator:a57a69c9dde4327beeb404c83defdbdaa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5daacbc6f74ec14aa03325d96ef51ed3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">broadcastNode</a></td></tr>\n<tr class=\"memdesc:a5daacbc6f74ec14aa03325d96ef51ed3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance that holds data used for broadcast messages. This does not represent any individual node.  <a href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">More...</a><br /></td></tr>\n<tr class=\"separator:a5daacbc6f74ec14aa03325d96ef51ed3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0c8a5c30939520843eda50fcee7a41a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7\">lastBroadcastMsgCounter</a></td></tr>\n<tr class=\"memdesc:a0c8a5c30939520843eda50fcee7a41a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last broadcast message counter state for all nodes, both for data and control messages.  <a href=\"classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7\">More...</a><br /></td></tr>\n<tr class=\"separator:a0c8a5c30939520843eda50fcee7a41a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00506\">506</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n</div><h2 class=\"groupheader\">Constructor &amp; Destructor Documentation</h2>\n<a id=\"a7cf92e8316f291e0a4e4ad608756887f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7cf92e8316f291e0a4e4ad608756887f\">&#9670;&nbsp;</a></span>NodeList()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">NodeList::NodeList </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> list constructor. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00129\">129</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a6702f6b65634da0500f5e99ccf017178\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6702f6b65634da0500f5e99ccf017178\">&#9670;&nbsp;</a></span>checkNodeName()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int8_t NodeList::checkNodeName </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>name</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>address</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name for duplicate. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">name</td><td>Custom node name </td></tr>\n    <tr><td class=\"paramname\">address</td><td>Address of node which is being tried to set name </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Error code to show name correctness. 0 = OK, -1 = Name already used, -2 = Name is too long, -3 = Name is empty </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00201\">201</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"abb4895c5b9ae6b041c9102178de837c4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abb4895c5b9ae6b041c9102178de837c4\">&#9670;&nbsp;</a></span>countActiveNodes()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t NodeList::countActiveNodes </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets the number of active nodes (registered or registering) </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Number of active nodes </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00247\">247</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad2f5b99eaeeb4f3b805acb0a019b6711\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad2f5b99eaeeb4f3b805acb0a019b6711\">&#9670;&nbsp;</a></span>findEmptyNode()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> * NodeList::findEmptyNode </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Searches for a free place for a new <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance to hold new instance </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00234\">234</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0020539e3b49df3706fe66a44bbf3700\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0020539e3b49df3706fe66a44bbf3700\">&#9670;&nbsp;</a></span>getBroadcastNode()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a>* NodeList::getBroadcastNode </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets broadcas node instance. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Broadcas node instance </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00607\">607</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"acfff6ed812a219b7b7514989da7fc34e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acfff6ed812a219b7b7514989da7fc34e\">&#9670;&nbsp;</a></span>getLastBroadcastMsgCounter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t NodeList::getLastBroadcastMsgCounter </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Ask for last broadcast message counter state. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>last broadcast message counter </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00620\">620</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a04851c9373e00d3c91c11a87d052f1f2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a04851c9373e00d3c91c11a87d052f1f2\">&#9670;&nbsp;</a></span>getNewNode()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> * NodeList::getNewNode </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Finds a node that correspond with given address of creates a new one if it does not exist. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>address to search for </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance. NULL if it <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> store is full </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00324\">324</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"add85a6384d393648fa7ca693a0dba44c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#add85a6384d393648fa7ca693a0dba44c\">&#9670;&nbsp;</a></span>getNextActiveNode() <span class=\"overload\">[1/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> * NodeList::getNextActiveNode </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets next active node by instance where to get nodeId. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> which have the nodeId to find </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Pointer to node or NULL if it was not found </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00309\">309</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a72dc59a4a4d32e2918b20038f2837ee2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a72dc59a4a4d32e2918b20038f2837ee2\">&#9670;&nbsp;</a></span>getNextActiveNode() <span class=\"overload\">[2/2]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> * NodeList::getNextActiveNode </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>nodeId</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets next active node by nodeId. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">nodeId</td><td>NodeId of the node to find </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Pointer to node or NULL if it was not found </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00295\">295</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aab4a7f7971eeeb4c0fa3af8064006b79\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aab4a7f7971eeeb4c0fa3af8064006b79\">&#9670;&nbsp;</a></span>getNodeFromID()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> * NodeList::getNodeFromID </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>nodeId</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets node that correspond with given nodeId. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">nodeId</td><td>NodeId to search for </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance that has given nodeId. NULL if it was not found </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00135\">135</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a08530d06e81c160b346047e37839ee7d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a08530d06e81c160b346047e37839ee7d\">&#9670;&nbsp;</a></span>getNodeFromMAC()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> * NodeList::getNodeFromMAC </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets node that correspond with given address. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>address to search for </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance that has given address. NULL if it was not found </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00142\">142</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a08caf502661a3bf1b75ba6860eb1bebe\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a08caf502661a3bf1b75ba6860eb1bebe\">&#9670;&nbsp;</a></span>getNodeFromName()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> * NodeList::getNodeFromName </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>name</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets node that correspond with given node name. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">name</td><td><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name to search for </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance that has given name. NULL if it was not found </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00174\">174</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab822a0ab8cb5fbdfc582dd7fc5c73042\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab822a0ab8cb5fbdfc582dd7fc5c73042\">&#9670;&nbsp;</a></span>incLastBroadcastMsgCounter()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void NodeList::incLastBroadcastMsgCounter </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Increments last broadcast message counter stata by one. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00627\">627</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a956635fa60412a9a026ea64245dd4443\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a956635fa60412a9a026ea64245dd4443\">&#9670;&nbsp;</a></span>initBroadcastNode()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void NodeList::initBroadcastNode </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Init broadcast node data. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00161\">161</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a239930df15810784dab9a3284730a35f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a239930df15810784dab9a3284730a35f\">&#9670;&nbsp;</a></span>printToSerial()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void NodeList::printToSerial </td>\n          <td>(</td>\n          <td class=\"paramtype\">Stream *&#160;</td>\n          <td class=\"paramname\"><em>port</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dumps node list data to a Stream object. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">port</td><td>Stram port </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00340\">340</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8\">&#9670;&nbsp;</a></span>unregisterNode() <span class=\"overload\">[1/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool NodeList::unregisterNode </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Frees up a node and marks it as available. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Address to free up </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>'True' if it was deleted. 'False' if address was not found </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00270\">270</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a52e67df2a4891252279101a492453038\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a52e67df2a4891252279101a492453038\">&#9670;&nbsp;</a></span>unregisterNode() <span class=\"overload\">[2/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool NodeList::unregisterNode </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"classNode.html\">Node</a> *&#160;</td>\n          <td class=\"paramname\"><em>node</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Frees up a node using a pointer to it. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">node</td><td>Pointer to node instance </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>'True' if it was deleted. 'False' if it was already deleted </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00281\">281</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2892fb1e6830073f3419da35ddad8725\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2892fb1e6830073f3419da35ddad8725\">&#9670;&nbsp;</a></span>unregisterNode() <span class=\"overload\">[3/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool NodeList::unregisterNode </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>nodeId</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Frees up a node and marks it as available. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">nodeId</td><td>NodeId to free up </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>'True' if it was deleted. 'False' if nodeId was not found </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8cpp_source.html#l00258\">258</a> of file <a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a5daacbc6f74ec14aa03325d96ef51ed3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5daacbc6f74ec14aa03325d96ef51ed3\">&#9670;&nbsp;</a></span>broadcastNode</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> NodeList::broadcastNode</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> instance that holds data used for broadcast messages. This does not represent any individual node. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00633\">633</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0c8a5c30939520843eda50fcee7a41a7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0c8a5c30939520843eda50fcee7a41a7\">&#9670;&nbsp;</a></span>lastBroadcastMsgCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t NodeList::lastBroadcastMsgCounter</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Last broadcast message counter state for all nodes, both for data and control messages. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00634\">634</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a57a69c9dde4327beeb404c83defdbdaa\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a57a69c9dde4327beeb404c83defdbdaa\">&#9670;&nbsp;</a></span>nodes</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classNode.html\">Node</a> NodeList::nodes[<a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">NUM_NODES</a>]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Static <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> array that holds maximum number of supported nodes. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00632\">632</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a></li>\n<li>src/<a class=\"el\" href=\"NodeList_8cpp_source.html\">NodeList.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classTimeManagerClass-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">TimeManagerClass Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">adjustTime</a>(int64_t t1r, int64_t t2r, int64_t t3r, int64_t t4r)</td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">clock</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">clock_us</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a\">getDelay</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#ae188f14a7cf5c38c5ab09b0dc5460490\">getOffset</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615\">isTimeAdjusted</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">offset</a></td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8\">reset</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">roundTripDelay</a></td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">timeIsAdjusted</a></td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"><span class=\"mlabel\">protected</span></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5\">unixtime</a>()</td><td class=\"entry\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td><td class=\"entry\"><span class=\"mlabel\">inline</span></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classTimeManagerClass.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: TimeManagerClass Class Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-methods\">Public Member Functions</a> &#124;\n<a href=\"#pro-attribs\">Protected Attributes</a> &#124;\n<a href=\"classTimeManagerClass-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">TimeManagerClass Class Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-methods\"></a>\nPublic Member Functions</h2></td></tr>\n<tr class=\"memitem:a85889f0610371fd502b47aae07d35506\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int64_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">clock</a> ()</td></tr>\n<tr class=\"memdesc:a85889f0610371fd502b47aae07d35506\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets local clock.  <a href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">More...</a><br /></td></tr>\n<tr class=\"separator:a85889f0610371fd502b47aae07d35506\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a52790ace85f8a18dcbd7fceb5ab49af0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int64_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">clock_us</a> ()</td></tr>\n<tr class=\"memdesc:a52790ace85f8a18dcbd7fceb5ab49af0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets local clock.  <a href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">More...</a><br /></td></tr>\n<tr class=\"separator:a52790ace85f8a18dcbd7fceb5ab49af0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5509b838b2b813cc5b4bce9436c825b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5\">unixtime</a> ()</td></tr>\n<tr class=\"memdesc:a5509b838b2b813cc5b4bce9436c825b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets local clock in seconds. It returns <code>millis() / 1000</code> if not synchronized, local clock otherwise. This may contain current realtime clock if Gateway is synchronized using NTP time.  <a href=\"classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5\">More...</a><br /></td></tr>\n<tr class=\"separator:a5509b838b2b813cc5b4bce9436c825b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a339f610c808ea5b39ccc9ca462269cf2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int64_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">adjustTime</a> (int64_t t1r, int64_t t2r, int64_t t3r, int64_t t4r)</td></tr>\n<tr class=\"memdesc:a339f610c808ea5b39ccc9ca462269cf2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets delay between Gateway time and local clock and adjust local clock accordingly. It uses same procedure as SNTP protocol.  <a href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">More...</a><br /></td></tr>\n<tr class=\"separator:a339f610c808ea5b39ccc9ca462269cf2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae188f14a7cf5c38c5ab09b0dc5460490\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int64_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#ae188f14a7cf5c38c5ab09b0dc5460490\">getOffset</a> ()</td></tr>\n<tr class=\"memdesc:ae188f14a7cf5c38c5ab09b0dc5460490\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets current offset to calculate clock, in milliseconds.  <a href=\"classTimeManagerClass.html#ae188f14a7cf5c38c5ab09b0dc5460490\">More...</a><br /></td></tr>\n<tr class=\"separator:ae188f14a7cf5c38c5ab09b0dc5460490\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac51f1bac4386e3aeb8c2e4fc10577615\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615\">isTimeAdjusted</a> ()</td></tr>\n<tr class=\"memdesc:ac51f1bac4386e3aeb8c2e4fc10577615\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets synchronization status.  <a href=\"classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615\">More...</a><br /></td></tr>\n<tr class=\"separator:ac51f1bac4386e3aeb8c2e4fc10577615\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a195293f46d7c371ed61bbcdcf6d8340a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int64_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a\">getDelay</a> ()</td></tr>\n<tr class=\"memdesc:a195293f46d7c371ed61bbcdcf6d8340a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Gets propagation + processing delay between <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> and Gateway in milliseconds.  <a href=\"classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a\">More...</a><br /></td></tr>\n<tr class=\"separator:a195293f46d7c371ed61bbcdcf6d8340a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a06cedd303513fccb86207c7f8e09d1d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8\">reset</a> ()</td></tr>\n<tr class=\"memdesc:a06cedd303513fccb86207c7f8e09d1d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Resets clock synchronization and sets values to initial status.  <a href=\"classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8\">More...</a><br /></td></tr>\n<tr class=\"separator:a06cedd303513fccb86207c7f8e09d1d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pro-attribs\"></a>\nProtected Attributes</h2></td></tr>\n<tr class=\"memitem:a1e2a434bb89a84d777f40b03d499ba6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">timeIsAdjusted</a> = false</td></tr>\n<tr class=\"memdesc:a1e2a434bb89a84d777f40b03d499ba6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Indicates if time has been synchronized.  <a href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">More...</a><br /></td></tr>\n<tr class=\"separator:a1e2a434bb89a84d777f40b03d499ba6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a76446d0df445c23ecb583b3d50fb3f95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int64_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">offset</a> = 0</td></tr>\n<tr class=\"memdesc:a76446d0df445c23ecb583b3d50fb3f95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Offet between node <code>millis()</code> and gateway time.  <a href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">More...</a><br /></td></tr>\n<tr class=\"separator:a76446d0df445c23ecb583b3d50fb3f95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:addb0c670f91aed75698ff9b70048ed71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int64_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">roundTripDelay</a></td></tr>\n<tr class=\"memdesc:addb0c670f91aed75698ff9b70048ed71\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Propagation delay between <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> and Gateway.  <a href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">More...</a><br /></td></tr>\n<tr class=\"separator:addb0c670f91aed75698ff9b70048ed71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8h_source.html#l00015\">15</a> of file <a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Function Documentation</h2>\n<a id=\"a339f610c808ea5b39ccc9ca462269cf2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a339f610c808ea5b39ccc9ca462269cf2\">&#9670;&nbsp;</a></span>adjustTime()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int64_t TimeManagerClass::adjustTime </td>\n          <td>(</td>\n          <td class=\"paramtype\">int64_t&#160;</td>\n          <td class=\"paramname\"><em>t1r</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int64_t&#160;</td>\n          <td class=\"paramname\"><em>t2r</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int64_t&#160;</td>\n          <td class=\"paramname\"><em>t3r</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int64_t&#160;</td>\n          <td class=\"paramname\"><em>t4r</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets delay between Gateway time and local clock and adjust local clock accordingly. It uses same procedure as SNTP protocol. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">t1r</td><td>T1 </td></tr>\n    <tr><td class=\"paramname\">t2r</td><td>T2 </td></tr>\n    <tr><td class=\"paramname\">t3r</td><td>T3 </td></tr>\n    <tr><td class=\"paramname\">t4r</td><td>T4 </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Clock value in seconds. It uses UnixTime format </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8cpp_source.html#l00034\">34</a> of file <a class=\"el\" href=\"timeManager_8cpp_source.html\">timeManager.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a85889f0610371fd502b47aae07d35506\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a85889f0610371fd502b47aae07d35506\">&#9670;&nbsp;</a></span>clock()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int64_t TimeManagerClass::clock </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets local clock. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Clock value in milliseconds </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8cpp_source.html#l00012\">12</a> of file <a class=\"el\" href=\"timeManager_8cpp_source.html\">timeManager.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a52790ace85f8a18dcbd7fceb5ab49af0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a52790ace85f8a18dcbd7fceb5ab49af0\">&#9670;&nbsp;</a></span>clock_us()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int64_t TimeManagerClass::clock_us </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Gets local clock. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Clock value in microseconds </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8cpp_source.html#l00023\">23</a> of file <a class=\"el\" href=\"timeManager_8cpp_source.html\">timeManager.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a195293f46d7c371ed61bbcdcf6d8340a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a195293f46d7c371ed61bbcdcf6d8340a\">&#9670;&nbsp;</a></span>getDelay()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int64_t TimeManagerClass::getDelay </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets propagation + processing delay between <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> and Gateway in milliseconds. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Delay value in ms </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8h_source.html#l00075\">75</a> of file <a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae188f14a7cf5c38c5ab09b0dc5460490\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae188f14a7cf5c38c5ab09b0dc5460490\">&#9670;&nbsp;</a></span>getOffset()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int64_t TimeManagerClass::getOffset </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets current offset to calculate clock, in milliseconds. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Offset value in ms </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8h_source.html#l00059\">59</a> of file <a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac51f1bac4386e3aeb8c2e4fc10577615\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac51f1bac4386e3aeb8c2e4fc10577615\">&#9670;&nbsp;</a></span>isTimeAdjusted()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool TimeManagerClass::isTimeAdjusted </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets synchronization status. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>True</code> if clock is synchronized </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8h_source.html#l00067\">67</a> of file <a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a06cedd303513fccb86207c7f8e09d1d8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a06cedd303513fccb86207c7f8e09d1d8\">&#9670;&nbsp;</a></span>reset()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void TimeManagerClass::reset </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Resets clock synchronization and sets values to initial status. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8h_source.html#l00082\">82</a> of file <a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5509b838b2b813cc5b4bce9436c825b5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5509b838b2b813cc5b4bce9436c825b5\">&#9670;&nbsp;</a></span>unixtime()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t TimeManagerClass::unixtime </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">inline</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Gets local clock in seconds. It returns <code>millis() / 1000</code> if not synchronized, local clock otherwise. This may contain current realtime clock if Gateway is synchronized using NTP time. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Clock value in seconds. It uses UnixTime format </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8h_source.html#l00040\">40</a> of file <a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a76446d0df445c23ecb583b3d50fb3f95\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a76446d0df445c23ecb583b3d50fb3f95\">&#9670;&nbsp;</a></span>offset</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int64_t TimeManagerClass::offset = 0</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Offet between node <code>millis()</code> and gateway time. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8h_source.html#l00018\">18</a> of file <a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>.</p>\n\n</div>\n</div>\n<a id=\"addb0c670f91aed75698ff9b70048ed71\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#addb0c670f91aed75698ff9b70048ed71\">&#9670;&nbsp;</a></span>roundTripDelay</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int64_t TimeManagerClass::roundTripDelay</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Propagation delay between <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> and Gateway. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8h_source.html#l00019\">19</a> of file <a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1e2a434bb89a84d777f40b03d499ba6f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1e2a434bb89a84d777f40b03d499ba6f\">&#9670;&nbsp;</a></span>timeIsAdjusted</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool TimeManagerClass::timeIsAdjusted = false</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">protected</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Indicates if time has been synchronized. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8h_source.html#l00017\">17</a> of file <a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this class was generated from the following files:<ul>\n<li>src/<a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a></li>\n<li>src/<a class=\"el\" href=\"timeManager_8cpp_source.html\">timeManager.cpp</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/classes.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Index</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Class Index</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"qindex\"><a class=\"qindex\" href=\"#letter_c\">c</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_e\">e</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_f\">f</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_g\">g</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_h\">h</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_m\">m</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_n\">n</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_r\">r</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_s\">s</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_t\">t</a></div>\n<table class=\"classindex\">\n<tr><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_c\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;c&#160;&#160;</div></td></tr></table>\n</td>\n<td valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classGatewayOutput__dummy.html\">GatewayOutput_dummy</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classNodeList.html\">NodeList</a>&#160;&#160;&#160;</td>\n</tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classGatewayOutput__generic.html\">GatewayOutput_generic</a>&#160;&#160;&#160;</td>\n<td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_m\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;m&#160;&#160;</div></td></tr></table>\n</td>\n<td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_r\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;r&#160;&#160;</div></td></tr></table>\n</td>\n</tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"classComms__halClass.html\">Comms_halClass</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classGwOutput__MQTT.html\">GwOutput_MQTT</a>&#160;&#160;&#160;</td>\n</tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a>&#160;&#160;&#160;</td>\n<td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_f\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;f&#160;&#160;</div></td></tr></table>\n</td>\n<td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_h\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;h&#160;&#160;</div></td></tr></table>\n</td>\n<td valign=\"top\"><a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>&#160;&#160;&#160;</td>\n</tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a>&#160;&#160;&#160;</td>\n<td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_s\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;s&#160;&#160;</div></td></tr></table>\n</td>\n</tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classFilterClass.html\">FilterClass</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>&#160;&#160;&#160;</td>\n</tr>\n<tr><td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_e\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;e&#160;&#160;</div></td></tr></table>\n</td>\n<td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_g\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;g&#160;&#160;</div></td></tr></table>\n</td>\n<td valign=\"top\"><a class=\"el\" href=\"classHACover.html\">HACover</a>&#160;&#160;&#160;</td>\n<td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_n\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;n&#160;&#160;</div></td></tr></table>\n</td>\n<td valign=\"top\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a>&#160;&#160;&#160;</td>\n</tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a>&#160;&#160;&#160;</td>\n<td rowspan=\"2\" valign=\"bottom\"><a name=\"letter_t\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&#160;&#160;t&#160;&#160;</div></td></tr></table>\n</td>\n</tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\">EnigmaIOTGatewayClass</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"structgateway__config__t.html\">gateway_config_t</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classHASensor.html\">HASensor</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classNode.html\">Node</a>&#160;&#160;&#160;</td>\n</tr>\n<tr><td valign=\"top\"><a class=\"el\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classGatewayAPI.html\">GatewayAPI</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a>&#160;&#160;&#160;</td>\n<td valign=\"top\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a>&#160;&#160;&#160;</td>\n</tr>\n<tr><td></td><td></td><td></td><td></td><td></td></tr>\n</table>\n<div class=\"qindex\"><a class=\"qindex\" href=\"#letter_c\">c</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_e\">e</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_f\">f</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_g\">g</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_h\">h</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_m\">m</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_n\">n</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_r\">r</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_s\">s</a>&#160;|&#160;<a class=\"qindex\" href=\"#letter_t\">t</a></div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/cryptModule_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/cryptModule.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">cryptModule.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>&quot;</code><br />\n<code>#include &lt;Curve25519.h&gt;</code><br />\n<code>#include &lt;ChaChaPoly.h&gt;</code><br />\n<code>#include &lt;Poly1305.h&gt;</code><br />\n<code>#include &lt;SHA256.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&quot;</code><br />\n</div>\n<p><a href=\"cryptModule_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a474ae1b4cd1e7fe1952c2fe00226d758\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a60424869b9d0955e8745158aadcd95b0\">CYPHER_TYPE</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a></td></tr>\n<tr class=\"separator:a474ae1b4cd1e7fe1952c2fe00226d758\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2f63b7a310b37c1127e7b8cfcbb5eb22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a></td></tr>\n<tr class=\"memdesc:a2f63b7a310b37c1127e7b8cfcbb5eb22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Singleton Crypto class instance.  <a href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">More...</a><br /></td></tr>\n<tr class=\"separator:a2f63b7a310b37c1127e7b8cfcbb5eb22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin</dd></dl>\n<p>Uses <a href=\"https://rweather.github.io/arduinolibs/crypto.html\">Arduino CryptoLib</a> library </p>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n</div><h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a474ae1b4cd1e7fe1952c2fe00226d758\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a474ae1b4cd1e7fe1952c2fe00226d758\">&#9670;&nbsp;</a></span>cipher</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a60424869b9d0955e8745158aadcd95b0\">CYPHER_TYPE</a> cipher</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8cpp_source.html#l00018\">18</a> of file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a2f63b7a310b37c1127e7b8cfcbb5eb22\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2f63b7a310b37c1127e7b8cfcbb5eb22\">&#9670;&nbsp;</a></span>Crypto</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a> Crypto</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Singleton Crypto class instance. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8cpp_source.html#l00167\">167</a> of file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/cryptModule_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/cryptModule.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">cryptModule.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"cryptModule_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"cryptModule_8h.html\">cryptModule.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;Curve25519.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;ChaChaPoly.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;Poly1305.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;SHA256.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\"><a class=\"line\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">   18</a></span>&#160;<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a60424869b9d0955e8745158aadcd95b0\">CYPHER_TYPE</a> <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">   20</a></span>&#160;uint8_t* <a class=\"code\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a> (uint8_t* buffer, uint8_t length) {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;    <span class=\"keyword\">const</span> uint8_t HASH_LEN = 32;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;    uint8_t key[HASH_LEN];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160; </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;    <span class=\"keywordflow\">if</span> (length &lt; HASH_LEN) {</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Too small buffer. Should be 32 bytes&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;    SHA256 hash;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;    <span class=\"comment\">// hash.reset (); // Not needed, implicit to constructor</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    hash.update ((<span class=\"keywordtype\">void</span>*)buffer, length);</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;    hash.finalize (key, HASH_LEN);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    hash.clear ();</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160; </div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    <span class=\"comment\">/*br_sha256_context* shaContext = new br_sha256_context ();</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"comment\">    br_sha256_init (shaContext);</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"comment\">    br_sha224_update (shaContext, (void*)buffer, length);</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"comment\">    br_sha256_out (shaContext, key);</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"comment\">    delete shaContext;*/</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    <span class=\"keywordflow\">if</span> (length &gt; HASH_LEN) {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        length = HASH_LEN;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    memcpy (buffer, key, length);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    <span class=\"keywordflow\">return</span> buffer;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">   52</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                                 <span class=\"keyword\">const</span> uint8_t* iv, uint8_t ivlen, <span class=\"keyword\">const</span> uint8_t* key, uint8_t keylen,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                                 <span class=\"keyword\">const</span> uint8_t* aad, uint8_t aadLen, <span class=\"keyword\">const</span> uint8_t* tag, uint8_t tagLen) {</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    <span class=\"keywordflow\">if</span> (key &amp;&amp; iv &amp;&amp; <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160; </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;IV: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (iv, ivlen));</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (key, keylen));</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;AAD: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (aad, aadLen));</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.clear ();</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.setKey (key, keylen)) {</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.setIV ((uint8_t*)iv, ivlen)) {</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.addAuthData ((uint8_t*)aad, aadLen);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.decrypt ((uint8_t*)<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, (uint8_t*)<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, length);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                <span class=\"keywordtype\">bool</span> ok = <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.checkTag ((uint8_t*)tag, tagLen);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.clear ();</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Tag: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (tag, tagLen));</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                <span class=\"keywordflow\">if</span> (!ok) {</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                    DEBUG_ERROR (<span class=\"stringliteral\">&quot;Data authentication error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"keywordflow\">return</span> ok;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting IV&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting key&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error in key or IV&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160; </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">   86</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length,</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                                 <span class=\"keyword\">const</span> uint8_t* iv, uint8_t ivlen, <span class=\"keyword\">const</span> uint8_t* key, uint8_t keylen,</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                                 <span class=\"keyword\">const</span> uint8_t* aad, uint8_t aadLen, <span class=\"keyword\">const</span> uint8_t* tag, uint8_t tagLen) {</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160; </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;    <span class=\"keywordflow\">if</span> (key &amp;&amp; iv &amp;&amp; <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;IV: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (iv, ivlen));</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (key, keylen));</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;AAD: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (aad, aadLen));</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.clear ();</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.setKey ((uint8_t*)key, keylen)) {</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.setIV ((uint8_t*)iv, ivlen)) {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.addAuthData ((uint8_t*)aad, aadLen);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.encrypt ((uint8_t*)<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, (uint8_t*)<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, length);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.computeTag ((uint8_t*)tag, tagLen);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                <a class=\"code\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a>.clear ();</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Tag: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (tag, tagLen));</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting IV&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting key&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error on input data for encryption&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160; </div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">  119</a></span>&#160;uint32_t <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a> () {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <span class=\"keywordflow\">return</span> *(<span class=\"keyword\">volatile</span> uint32_t*)RANDOM_32;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <span class=\"keywordflow\">return</span> esp_random ();</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160; </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#a81975699307738712329b4ef8cb47675\">  127</a></span>&#160;uint8_t* <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a> (<span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> len) {</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;    <span class=\"keywordflow\">if</span> (buf) {</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i = 0; i &lt; len; i += <span class=\"keyword\">sizeof</span> (uint32_t)) {</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;            uint32_t rnd = <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ();</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;            <span class=\"keywordflow\">if</span> (i &lt; len - (len % <span class=\"keyword\">sizeof</span> (int32_t))) {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                memcpy (<span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(buf) + i, &amp;rnd, <span class=\"keyword\">sizeof</span> (uint32_t));</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;            } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                memcpy (<span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(buf) + i, &amp;rnd, len % <span class=\"keyword\">sizeof</span> (int32_t));</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(buf);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160; </div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">  141</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">CryptModule::getDH1</a> () {</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;    Curve25519::dh1 (<a class=\"code\" href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">publicDHKey</a>, <a class=\"code\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">privateDHKey</a>);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Public key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">publicDHKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160; </div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Private key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">privateDHKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160; </div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">  148</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">CryptModule::getDH2</a> (<span class=\"keyword\">const</span> uint8_t* remotePubKey) {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Remote public key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(remotePubKey), <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;    DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;Private key: %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<a class=\"code\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">privateDHKey</a>, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>));</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <span class=\"keywordflow\">if</span> (!Curve25519::dh2 (<span class=\"keyword\">const_cast&lt;</span>uint8_t*<span class=\"keyword\">&gt;</span>(remotePubKey), <a class=\"code\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">privateDHKey</a>)) {</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;DH2 error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    memset (<a class=\"code\" href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">publicDHKey</a>, 0, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>); <span class=\"comment\">// delete public key from memory</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160; </div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160; </div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"comment\">/*size_t CryptModule::getBlockSize ()</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"comment\">    CYPHER_TYPE cipher;</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"comment\">    return cipher.blockSize();</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"comment\">}*/</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160; </div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"cryptModule_8h.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">  167</a></span>&#160;<a class=\"code\" href=\"classCryptModule.html\">CryptModule</a> <a class=\"code\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>;</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassCryptModule_html_a55883c161c22f5182fc40f97a84a5da6\"><div class=\"ttname\"><a href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a></div><div class=\"ttdeci\">static bool decryptBuffer(const uint8_t *data, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</div><div class=\"ttdoc\">Decrypts a buffer using a shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00052\">cryptModule.cpp:52</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_ab043ae3361d34921f36d7d0189c058d1\"><div class=\"ttname\"><a href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">CryptModule::getDH1</a></div><div class=\"ttdeci\">void getDH1()</div><div class=\"ttdoc\">Starts first stage of Diffie Hellman key agreement algorithm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00141\">cryptModule.cpp:141</a></div></div>\n<div class=\"ttc\" id=\"acryptModule_8h_html\"><div class=\"ttname\"><a href=\"cryptModule_8h.html\">cryptModule.h</a></div><div class=\"ttdoc\">Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions.</div></div>\n<div class=\"ttc\" id=\"acryptModule_8cpp_html_a474ae1b4cd1e7fe1952c2fe00226d758\"><div class=\"ttname\"><a href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cipher</a></div><div class=\"ttdeci\">CYPHER_TYPE cipher</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00018\">cryptModule.cpp:18</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a34795afc7eeb1110a1672d496b3d55a3\"><div class=\"ttname\"><a href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">CryptModule::privateDHKey</a></div><div class=\"ttdeci\">uint8_t privateDHKey[KEY_LENGTH]</div><div class=\"ttdoc\">Temporary private key store used during key agreement.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00141\">cryptModule.h:141</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_ae90dfe037c5e9b1a6804f0292c28bddc\"><div class=\"ttname\"><a href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a></div><div class=\"ttdeci\">static bool encryptBuffer(const uint8_t *data, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</div><div class=\"ttdoc\">Decrypts a buffer using a shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00086\">cryptModule.cpp:86</a></div></div>\n<div class=\"ttc\" id=\"acryptModule_8cpp_html_a2f63b7a310b37c1127e7b8cfcbb5eb22\"><div class=\"ttname\"><a href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a></div><div class=\"ttdeci\">CryptModule Crypto</div><div class=\"ttdoc\">Singleton Crypto class instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00167\">cryptModule.cpp:167</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html\"><div class=\"ttname\"><a href=\"classCryptModule.html\">CryptModule</a></div><div class=\"ttdoc\">EnigmaIoT Crypto module. Wraps Arduino CryptoLib classes and methods.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00035\">cryptModule.h:35</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a0bc27edb1340a28f92b43dd4f91e9a16\"><div class=\"ttname\"><a href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a></div><div class=\"ttdeci\">static uint8_t * getSHA256(uint8_t *buffer, uint8_t length)</div><div class=\"ttdoc\">Generates a SHA256 hash from input.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00020\">cryptModule.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a96b21ebe23b1914e09408bd3e41b34b0\"><div class=\"ttname\"><a href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a></div><div class=\"ttdeci\">static uint32_t random()</div><div class=\"ttdoc\">Gets a random number.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00119\">cryptModule.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a863ca9be67da8cdc5fb9447378021e07\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a></div><div class=\"ttdeci\">const uint8_t KEY_LENGTH</div><div class=\"ttdoc\">Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00070\">EnigmaIoTconfigAdvanced.h:70</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a60424869b9d0955e8745158aadcd95b0\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a60424869b9d0955e8745158aadcd95b0\">CYPHER_TYPE</a></div><div class=\"ttdeci\">#define CYPHER_TYPE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00074\">EnigmaIoTconfigAdvanced.h:74</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a1cd41eabb8dc153f74d42f263d168fee\"><div class=\"ttname\"><a href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">CryptModule::getDH2</a></div><div class=\"ttdeci\">bool getDH2(const uint8_t *remotePubKey)</div><div class=\"ttdoc\">Starts second stage of Diffie Hellman key agreement algorithm and calculate shares key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00148\">cryptModule.cpp:148</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_ae55611b17617615a79de5325d2c3c02d\"><div class=\"ttname\"><a href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">CryptModule::publicDHKey</a></div><div class=\"ttdeci\">uint8_t publicDHKey[KEY_LENGTH]</div><div class=\"ttdoc\">Temporary public key store used during key agreement.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00142\">cryptModule.h:142</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/cryptModule_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/cryptModule.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">cryptModule.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>&quot;</code><br />\n</div>\n<p><a href=\"cryptModule_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">EnigmaIoT Crypto module. Wraps Arduino CryptoLib classes and methods.  <a href=\"classCryptModule.html#details\">More...</a><br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a589540d306f62e7810a03bcfa28fbeef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"cryptModule_8h.html#a589540d306f62e7810a03bcfa28fbeef\">CRYPTMODULE_DEBUG_TAG</a>&#160;&#160;&#160;&quot;CryptModule&quot;</td></tr>\n<tr class=\"separator:a589540d306f62e7810a03bcfa28fbeef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a164ce4566a4b31ef42907bf37f3e6654\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">RANDOM_LENGTH</a> = sizeof (uint32_t)</td></tr>\n<tr class=\"memdesc:a164ce4566a4b31ef42907bf37f3e6654\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Length of random number generator values.  <a href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">More...</a><br /></td></tr>\n<tr class=\"separator:a164ce4566a4b31ef42907bf37f3e6654\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab705865bb866bc5f070bbde9650eaa2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"cryptModule_8h.html#ab705865bb866bc5f070bbde9650eaa2a\">CRC_LENGTH</a> = sizeof (uint32_t)</td></tr>\n<tr class=\"memdesc:ab705865bb866bc5f070bbde9650eaa2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Length of CRC.  <a href=\"cryptModule_8h.html#ab705865bb866bc5f070bbde9650eaa2a\">More...</a><br /></td></tr>\n<tr class=\"separator:ab705865bb866bc5f070bbde9650eaa2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2f63b7a310b37c1127e7b8cfcbb5eb22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"cryptModule_8h.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a></td></tr>\n<tr class=\"memdesc:a2f63b7a310b37c1127e7b8cfcbb5eb22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Singleton Crypto class instance.  <a href=\"cryptModule_8h.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">More...</a><br /></td></tr>\n<tr class=\"separator:a2f63b7a310b37c1127e7b8cfcbb5eb22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin</dd></dl>\n<p>Uses <a href=\"https://rweather.github.io/arduinolibs/crypto.html\">Arduino CryptoLib</a> library </p>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a589540d306f62e7810a03bcfa28fbeef\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a589540d306f62e7810a03bcfa28fbeef\">&#9670;&nbsp;</a></span>CRYPTMODULE_DEBUG_TAG</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define CRYPTMODULE_DEBUG_TAG&#160;&#160;&#160;&quot;CryptModule&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8h_source.html#l00021\">21</a> of file <a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"ab705865bb866bc5f070bbde9650eaa2a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab705865bb866bc5f070bbde9650eaa2a\">&#9670;&nbsp;</a></span>CRC_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t CRC_LENGTH = sizeof (uint32_t)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Length of CRC. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8h_source.html#l00028\">28</a> of file <a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2f63b7a310b37c1127e7b8cfcbb5eb22\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2f63b7a310b37c1127e7b8cfcbb5eb22\">&#9670;&nbsp;</a></span>Crypto</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classCryptModule.html\">CryptModule</a> Crypto</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">extern</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Singleton Crypto class instance. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8cpp_source.html#l00167\">167</a> of file <a class=\"el\" href=\"cryptModule_8cpp_source.html\">cryptModule.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a164ce4566a4b31ef42907bf37f3e6654\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a164ce4566a4b31ef42907bf37f3e6654\">&#9670;&nbsp;</a></span>RANDOM_LENGTH</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const uint8_t RANDOM_LENGTH = sizeof (uint32_t)</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Length of random number generator values. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"cryptModule_8h_source.html#l00027\">27</a> of file <a class=\"el\" href=\"cryptModule_8h_source.html\">cryptModule.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/cryptModule_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/cryptModule.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">cryptModule.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"cryptModule_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#ifndef _CRYPTMODULE_h</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#define _CRYPTMODULE_h</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160; </div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"cryptModule_8h.html#a589540d306f62e7810a03bcfa28fbeef\">   21</a></span>&#160;<span class=\"preprocessor\">#define CRYPTMODULE_DEBUG_TAG &quot;CryptModule&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#define RANDOM_32 0x3FF20E44</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160; </div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">   27</a></span>&#160;<span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">RANDOM_LENGTH</a> = <span class=\"keyword\">sizeof</span> (uint32_t); </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"cryptModule_8h.html#ab705865bb866bc5f070bbde9650eaa2a\">   28</a></span>&#160;<span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"cryptModule_8h.html#ab705865bb866bc5f070bbde9650eaa2a\">CRC_LENGTH</a> = <span class=\"keyword\">sizeof</span> (uint32_t); </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html\">   35</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classCryptModule.html\">CryptModule</a> {</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    <span class=\"keyword\">static</span> uint32_t <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> ();</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#a880b6a28ae062613f81b1524df884832\">   43</a></span>&#160;    <span class=\"keyword\">static</span> uint32_t <a class=\"code\" href=\"classCryptModule.html#a880b6a28ae062613f81b1524df884832\">random</a> (uint32_t max, uint32_t min = 0) {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        uint32_t _max, _min;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160; </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keywordflow\">if</span> (max &gt; min) {</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;            _max = max;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;            _min = min;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;            _max = min;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;            _min = max;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keywordflow\">if</span> (_max != _min) {</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;            <span class=\"keywordflow\">return</span> _min + (<a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> () % (_max - _min));</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;            <span class=\"keywordflow\">return</span> _min;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    <span class=\"keyword\">static</span> uint8_t* <a class=\"code\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">random</a> (<span class=\"keyword\">const</span> uint8_t* buf, <span class=\"keywordtype\">size_t</span> len);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">decryptBuffer</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length,</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                               <span class=\"keyword\">const</span> uint8_t* iv, uint8_t ivlen, <span class=\"keyword\">const</span> uint8_t* key, uint8_t keylen,</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                               <span class=\"keyword\">const</span> uint8_t* aad, uint8_t aadLen, <span class=\"keyword\">const</span> uint8_t* tag, uint8_t tagLen);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    <span class=\"keyword\">static</span> uint8_t* <a class=\"code\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">getSHA256</a> (uint8_t* buffer, uint8_t length);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160; </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">encryptBuffer</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length,</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                               <span class=\"keyword\">const</span> uint8_t* iv, uint8_t ivlen, <span class=\"keyword\">const</span> uint8_t* key, uint8_t keylen,</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                               <span class=\"keyword\">const</span> uint8_t* aad, uint8_t aadLen, <span class=\"keyword\">const</span> uint8_t* tag, uint8_t tagLen);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">getDH1</a> ();</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160; </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">getDH2</a> (<span class=\"keyword\">const</span> uint8_t* remotePubKey);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160; </div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#a9d106f893f329d8648aba205b3717806\">  128</a></span>&#160;    uint8_t* <a class=\"code\" href=\"classCryptModule.html#a9d106f893f329d8648aba205b3717806\">getPrivDHKey</a> () {</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">privateDHKey</a>;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160; </div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">  136</a></span>&#160;    uint8_t* <a class=\"code\" href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">getPubDHKey</a> () {</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">publicDHKey</a>;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">  141</a></span>&#160;    uint8_t <a class=\"code\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">privateDHKey</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]; </div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">  142</a></span>&#160;    uint8_t <a class=\"code\" href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">publicDHKey</a>[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>];  </div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160; </div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"keyword\">extern</span> <a class=\"code\" href=\"classCryptModule.html\">CryptModule</a> <a class=\"code\" href=\"cryptModule_8h.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a>; </div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160; </div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassCryptModule_html_a55883c161c22f5182fc40f97a84a5da6\"><div class=\"ttname\"><a href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule::decryptBuffer</a></div><div class=\"ttdeci\">static bool decryptBuffer(const uint8_t *data, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</div><div class=\"ttdoc\">Decrypts a buffer using a shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00052\">cryptModule.cpp:52</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_aefc84d57eee3eceeadc3611866925804\"><div class=\"ttname\"><a href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">CryptModule::getPubDHKey</a></div><div class=\"ttdeci\">uint8_t * getPubDHKey()</div><div class=\"ttdoc\">Gets own public key used on Diffie Hellman algorithm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00136\">cryptModule.h:136</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_ab043ae3361d34921f36d7d0189c058d1\"><div class=\"ttname\"><a href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">CryptModule::getDH1</a></div><div class=\"ttdeci\">void getDH1()</div><div class=\"ttdoc\">Starts first stage of Diffie Hellman key agreement algorithm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00141\">cryptModule.cpp:141</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a34795afc7eeb1110a1672d496b3d55a3\"><div class=\"ttname\"><a href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">CryptModule::privateDHKey</a></div><div class=\"ttdeci\">uint8_t privateDHKey[KEY_LENGTH]</div><div class=\"ttdoc\">Temporary private key store used during key agreement.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00141\">cryptModule.h:141</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_ae90dfe037c5e9b1a6804f0292c28bddc\"><div class=\"ttname\"><a href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule::encryptBuffer</a></div><div class=\"ttdeci\">static bool encryptBuffer(const uint8_t *data, size_t length, const uint8_t *iv, uint8_t ivlen, const uint8_t *key, uint8_t keylen, const uint8_t *aad, uint8_t aadLen, const uint8_t *tag, uint8_t tagLen)</div><div class=\"ttdoc\">Decrypts a buffer using a shared key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00086\">cryptModule.cpp:86</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a></div><div class=\"ttdoc\">Parameter configuration.</div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html\"><div class=\"ttname\"><a href=\"classCryptModule.html\">CryptModule</a></div><div class=\"ttdoc\">EnigmaIoT Crypto module. Wraps Arduino CryptoLib classes and methods.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00035\">cryptModule.h:35</a></div></div>\n<div class=\"ttc\" id=\"acryptModule_8h_html_a2f63b7a310b37c1127e7b8cfcbb5eb22\"><div class=\"ttname\"><a href=\"cryptModule_8h.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">Crypto</a></div><div class=\"ttdeci\">CryptModule Crypto</div><div class=\"ttdoc\">Singleton Crypto class instance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00167\">cryptModule.cpp:167</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a0bc27edb1340a28f92b43dd4f91e9a16\"><div class=\"ttname\"><a href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule::getSHA256</a></div><div class=\"ttdeci\">static uint8_t * getSHA256(uint8_t *buffer, uint8_t length)</div><div class=\"ttdoc\">Generates a SHA256 hash from input.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00020\">cryptModule.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a880b6a28ae062613f81b1524df884832\"><div class=\"ttname\"><a href=\"classCryptModule.html#a880b6a28ae062613f81b1524df884832\">CryptModule::random</a></div><div class=\"ttdeci\">static uint32_t random(uint32_t max, uint32_t min=0)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00043\">cryptModule.h:43</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a9d106f893f329d8648aba205b3717806\"><div class=\"ttname\"><a href=\"classCryptModule.html#a9d106f893f329d8648aba205b3717806\">CryptModule::getPrivDHKey</a></div><div class=\"ttdeci\">uint8_t * getPrivDHKey()</div><div class=\"ttdoc\">Gets own private key used on Diffie Hellman algorithm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00128\">cryptModule.h:128</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a96b21ebe23b1914e09408bd3e41b34b0\"><div class=\"ttname\"><a href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule::random</a></div><div class=\"ttdeci\">static uint32_t random()</div><div class=\"ttdoc\">Gets a random number.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00119\">cryptModule.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"acryptModule_8h_html_a164ce4566a4b31ef42907bf37f3e6654\"><div class=\"ttname\"><a href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">RANDOM_LENGTH</a></div><div class=\"ttdeci\">const uint8_t RANDOM_LENGTH</div><div class=\"ttdoc\">Length of random number generator values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00027\">cryptModule.h:27</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a863ca9be67da8cdc5fb9447378021e07\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a></div><div class=\"ttdeci\">const uint8_t KEY_LENGTH</div><div class=\"ttdoc\">Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00070\">EnigmaIoTconfigAdvanced.h:70</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_a1cd41eabb8dc153f74d42f263d168fee\"><div class=\"ttname\"><a href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">CryptModule::getDH2</a></div><div class=\"ttdeci\">bool getDH2(const uint8_t *remotePubKey)</div><div class=\"ttdoc\">Starts second stage of Diffie Hellman key agreement algorithm and calculate shares key.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8cpp_source.html#l00148\">cryptModule.cpp:148</a></div></div>\n<div class=\"ttc\" id=\"acryptModule_8h_html_ab705865bb866bc5f070bbde9650eaa2a\"><div class=\"ttname\"><a href=\"cryptModule_8h.html#ab705865bb866bc5f070bbde9650eaa2a\">CRC_LENGTH</a></div><div class=\"ttdeci\">const uint8_t CRC_LENGTH</div><div class=\"ttdoc\">Length of CRC.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00028\">cryptModule.h:28</a></div></div>\n<div class=\"ttc\" id=\"aclassCryptModule_html_ae55611b17617615a79de5325d2c3c02d\"><div class=\"ttname\"><a href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">CryptModule::publicDHKey</a></div><div class=\"ttdeci\">uint8_t publicDHKey[KEY_LENGTH]</div><div class=\"ttdoc\">Temporary public key store used during key agreement.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"cryptModule_8h_source.html#l00142\">cryptModule.h:142</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_00c6ed3b0ef8b691ed3b9ecb58c6534d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Sensor-Controller Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_00c6ed3b0ef8b691ed3b9ecb58c6534d.html\">EnigmaIOT-Sensor-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Sensor-Controller Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:ds18b20Controller_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ds18b20Controller_8cpp.html\">ds18b20Controller.cpp</a> <a href=\"ds18b20Controller_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ds18b20Controller_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ds18b20Controller_8h.html\">ds18b20Controller.h</a> <a href=\"ds18b20Controller_8h_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOT-Sensor-Controller_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html\">EnigmaIOT-Sensor-Controller.cpp</a> <a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_49e56c817e5e54854c35e136979f97ca.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: docs Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_49e56c817e5e54854c35e136979f97ca.html\">docs</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">docs Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_51f3e27dad008037e4264b749ea8e663.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayMQTT Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\">EnigmaIOTGatewayMQTT</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGatewayMQTT Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:dstrootca_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dstrootca_8h.html\">dstrootca.h</a> <a href=\"dstrootca_8h_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOTGatewayMQTT_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html\">EnigmaIOTGatewayMQTT.cpp</a> <a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:GwOutput__mqtt_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8cpp.html\">GwOutput_mqtt.cpp</a> <a href=\"GwOutput__mqtt_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:GwOutput__mqtt_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT Gateway output module. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:GwOutput__mqtt_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__mqtt_8h.html\">GwOutput_mqtt.h</a> <a href=\"GwOutput__mqtt_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:GwOutput__mqtt_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">MQTT Gateway output module. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_56fe63de1287a706a7081958f8373778.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Led-Controller Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_56fe63de1287a706a7081958f8373778.html\">EnigmaIOT-Led-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Led-Controller Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:EnigmaIOT-Led-Controller_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html\">EnigmaIOT-Led-Controller.cpp</a> <a href=\"EnigmaIOT-Led-Controller_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:LedController_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"LedController_8cpp.html\">LedController.cpp</a> <a href=\"LedController_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:LedController_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"LedController_8h.html\">LedController.h</a> <a href=\"LedController_8h_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">src Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:Comms__hal_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"Comms__hal_8h.html\">Comms_hal.h</a> <a href=\"Comms__hal_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:Comms__hal_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generic communication system abstraction layer. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:cryptModule_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"cryptModule_8cpp.html\">cryptModule.cpp</a> <a href=\"cryptModule_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:cryptModule_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:cryptModule_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"cryptModule_8h.html\">cryptModule.h</a> <a href=\"cryptModule_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:cryptModule_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIoTconfig_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a> <a href=\"EnigmaIoTconfig_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:EnigmaIoTconfig_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parameter configuration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIoTconfigAdvanced_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html\">EnigmaIoTconfigAdvanced.h</a> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:EnigmaIoTconfigAdvanced_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Parameter configuration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOTdebug_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a> <a href=\"EnigmaIOTdebug_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:EnigmaIOTdebug_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Auxiliary functions for debugging over Serial. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOTGateway_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html\">EnigmaIOTGateway.cpp</a> <a href=\"EnigmaIOTGateway_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:EnigmaIOTGateway_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Library to build a gateway for EnigmaIoT system. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOTGateway_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGateway_8h.html\">EnigmaIOTGateway.h</a> <a href=\"EnigmaIOTGateway_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:EnigmaIOTGateway_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Library to build a gateway for EnigmaIoT system. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOTjsonController_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a> <a href=\"EnigmaIOTjsonController_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:EnigmaIOTjsonController_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Prototype for JSON/MSGPACK based controller node. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOTNode_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html\">EnigmaIOTNode.cpp</a> <a href=\"EnigmaIOTNode_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:EnigmaIOTNode_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Library to build a node for EnigmaIoT system. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOTNode_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a> <a href=\"EnigmaIOTNode_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:EnigmaIOTNode_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Library to build a node for EnigmaIoT system. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOTRingBuffer_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTRingBuffer_8h.html\">EnigmaIOTRingBuffer.h</a> <a href=\"EnigmaIOTRingBuffer_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:EnigmaIOTRingBuffer_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Library to build a gateway for EnigmaIoT system. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:espnow__hal_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"espnow__hal_8cpp.html\">espnow_hal.cpp</a> <a href=\"espnow__hal_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:espnow__hal_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:espnow__hal_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"espnow__hal_8h.html\">espnow_hal.h</a> <a href=\"espnow__hal_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:espnow__hal_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:Filter_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"Filter_8cpp.html\">Filter.cpp</a> <a href=\"Filter_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:Filter_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Filter to process message rate or other values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:Filter_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"Filter_8h.html\">Filter.h</a> <a href=\"Filter_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:Filter_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Filter to process message rate or other values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:GatewayAPI_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8cpp.html\">GatewayAPI.cpp</a> <a href=\"GatewayAPI_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:GatewayAPI_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">API web server to control EnigmaIOT Gateway. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:GatewayAPI_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GatewayAPI_8h.html\">GatewayAPI.h</a> <a href=\"GatewayAPI_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:GatewayAPI_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">API web server to control EnigmaIOT Gateway. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:GwOutput__generic_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__generic_8h.html\">GwOutput_generic.h</a> <a href=\"GwOutput__generic_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:GwOutput__generic_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generic Gateway output module template. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haBinarySensor_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haBinarySensor_8cpp.html\">haBinarySensor.cpp</a> <a href=\"haBinarySensor_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haBinarySensor_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Home Assistant binary sensor integration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haBinarySensor_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haBinarySensor_8h.html\">haBinarySensor.h</a> <a href=\"haBinarySensor_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haBinarySensor_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Home Assistant binary sensor integration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haCover_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haCover_8cpp.html\">haCover.cpp</a> <a href=\"haCover_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haCover_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Home Assistant cover and shade integration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haCover_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haCover_8h.html\">haCover.h</a> <a href=\"haCover_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haCover_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Home Assistant cover and shade integration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haEntity_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html\">haEntity.h</a> <a href=\"haEntity_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haEntity_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines an entity for Home Assistant autodiscovery. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haSensor_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haSensor_8cpp.html\">haSensor.cpp</a> <a href=\"haSensor_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haSensor_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Home Assistant sensor integration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haSensor_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haSensor_8h.html\">haSensor.h</a> <a href=\"haSensor_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haSensor_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Home Assistant sensor integration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haSwitch_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haSwitch_8cpp.html\">haSwitch.cpp</a> <a href=\"haSwitch_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haSwitch_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Home Assistant switch integration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haSwitch_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haSwitch_8h.html\">haSwitch.h</a> <a href=\"haSwitch_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haSwitch_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Home Assistant switch integration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haTrigger_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haTrigger_8cpp.html\">haTrigger.cpp</a> <a href=\"haTrigger_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haTrigger_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Home Assistant trigger integration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:haTrigger_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haTrigger_8h.html\">haTrigger.h</a> <a href=\"haTrigger_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:haTrigger_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Home Assistant trigger integration. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:helperFunctions_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html\">helperFunctions.cpp</a> <a href=\"helperFunctions_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:helperFunctions_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Auxiliary function definition. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:helperFunctions_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8h.html\">helperFunctions.h</a> <a href=\"helperFunctions_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:helperFunctions_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Auxiliary function definition. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:NodeList_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8cpp.html\">NodeList.cpp</a> <a href=\"NodeList_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:NodeList_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">EnigmaIoT sensor node management structures. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:NodeList_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"NodeList_8h.html\">NodeList.h</a> <a href=\"NodeList_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:NodeList_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">EnigmaIoT sensor node management structures. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:timeManager_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"timeManager_8cpp.html\">timeManager.cpp</a> <a href=\"timeManager_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:timeManager_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clock synchronisation calculations. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:timeManager_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"timeManager_8h.html\">timeManager.h</a> <a href=\"timeManager_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:timeManager_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Clock synchronisation calculations. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_6f51a142868163a30ea6bee5ec2f0159.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node_nonsleepy Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6f51a142868163a30ea6bee5ec2f0159.html\">enigmaiot_node_nonsleepy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_node_nonsleepy Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:enigmaiot__node__nonsleepy_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html\">enigmaiot_node_nonsleepy.cpp</a> <a href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_74730d4cfa9be35e947daeb13bf15f56.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node_msgpack Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_74730d4cfa9be35e947daeb13bf15f56.html\">enigmaiot_node_msgpack</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_node_msgpack Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:enigmaiot__node__msgpack_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html\">enigmaiot_node_msgpack.cpp</a> <a href=\"enigmaiot__node__msgpack_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_7b1e976c444ae84a02a576fc7d2ecc0c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Button-Controller Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_7b1e976c444ae84a02a576fc7d2ecc0c.html\">EnigmaIOT-Button-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Button-Controller Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:ButtonController_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ButtonController_8cpp.html\">ButtonController.cpp</a> <a href=\"ButtonController_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ButtonController_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ButtonController_8h.html\">ButtonController.h</a> <a href=\"ButtonController_8h_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOT-Button-Controller_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html\">EnigmaIOT-Button-Controller.cpp</a> <a href=\"EnigmaIOT-Button-Controller_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_85c13f167532cd35b89eb457361e1e18.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-SmartSwitch-Controller Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_85c13f167532cd35b89eb457361e1e18.html\">EnigmaIOT-SmartSwitch-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-SmartSwitch-Controller Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:EnigmaIOT-SmartSwitch-Controller_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html\">EnigmaIOT-SmartSwitch-Controller.cpp</a> <a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:SmartSwitchController_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8cpp.html\">SmartSwitchController.cpp</a> <a href=\"SmartSwitchController_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:SmartSwitchController_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"SmartSwitchController_8h.html\">SmartSwitchController.h</a> <a href=\"SmartSwitchController_8h_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_8b0ea9d4c22a99833616492a9ee0642b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayDummy Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8b0ea9d4c22a99833616492a9ee0642b.html\">EnigmaIOTGatewayDummy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOTGatewayDummy Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:EnigmaIOTGatewayDummy_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html\">EnigmaIOTGatewayDummy.cpp</a> <a href=\"EnigmaIOTGatewayDummy_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:GwOutput__dummy_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__dummy_8cpp.html\">GwOutput_dummy.cpp</a> <a href=\"GwOutput__dummy_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:GwOutput__dummy_8cpp\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dummy Gateway output module. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:GwOutput__dummy_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"GwOutput__dummy_8h.html\">GwOutput_dummy.h</a> <a href=\"GwOutput__dummy_8h_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:GwOutput__dummy_8h\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dummy Gateway output module. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_b65b262e0a2e64b925763a7d4046e738.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-DashButton-Controller Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_b65b262e0a2e64b925763a7d4046e738.html\">EnigmaIOT-DashButton-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-DashButton-Controller Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:DashButtonController_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"DashButtonController_8cpp.html\">DashButtonController.cpp</a> <a href=\"DashButtonController_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:DashButtonController_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"DashButtonController_8h.html\">DashButtonController.h</a> <a href=\"DashButtonController_8h_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOT-DashButton-Controller_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html\">EnigmaIOT-DashButton-Controller.cpp</a> <a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_bbee7a02677141865fa116b3c1345c33.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIoTUpdate Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_bbee7a02677141865fa116b3c1345c33.html\">EnigmaIoTUpdate</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIoTUpdate Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:EnigmaIoTUpdate_8py\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIoTUpdate_8py.html\">EnigmaIoTUpdate.py</a> <a href=\"EnigmaIoTUpdate_8py_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_d28a4824dc47e487b107a5db32ef43c4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_7b1e976c444ae84a02a576fc7d2ecc0c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_7b1e976c444ae84a02a576fc7d2ecc0c.html\">EnigmaIOT-Button-Controller</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_b65b262e0a2e64b925763a7d4046e738\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_b65b262e0a2e64b925763a7d4046e738.html\">EnigmaIOT-DashButton-Controller</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_d330a1fb834c3b104c380ea4a26b63bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_d330a1fb834c3b104c380ea4a26b63bb.html\">EnigmaIOT-Json-Controller-Template</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_56fe63de1287a706a7081958f8373778\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_56fe63de1287a706a7081958f8373778.html\">EnigmaIOT-Led-Controller</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_00c6ed3b0ef8b691ed3b9ecb58c6534d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_00c6ed3b0ef8b691ed3b9ecb58c6534d.html\">EnigmaIOT-Sensor-Controller</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_85c13f167532cd35b89eb457361e1e18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_85c13f167532cd35b89eb457361e1e18.html\">EnigmaIOT-SmartSwitch-Controller</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_d43fadc45274b5d05cae2a6678e1cfd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_d43fadc45274b5d05cae2a6678e1cfd4.html\">enigmaiot_led_flasher</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_ddb1aa94a6973c510045d1a2166b2b36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_ddb1aa94a6973c510045d1a2166b2b36.html\">enigmaiot_node</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_74730d4cfa9be35e947daeb13bf15f56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_74730d4cfa9be35e947daeb13bf15f56.html\">enigmaiot_node_msgpack</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_6f51a142868163a30ea6bee5ec2f0159\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_6f51a142868163a30ea6bee5ec2f0159.html\">enigmaiot_node_nonsleepy</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_8b0ea9d4c22a99833616492a9ee0642b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_8b0ea9d4c22a99833616492a9ee0642b.html\">EnigmaIOTGatewayDummy</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_51f3e27dad008037e4264b749ea8e663\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\">EnigmaIOTGatewayMQTT</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_d330a1fb834c3b104c380ea4a26b63bb.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Json-Controller-Template Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d330a1fb834c3b104c380ea4a26b63bb.html\">EnigmaIOT-Json-Controller-Template</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT-Json-Controller-Template Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:BasicController_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"BasicController_8cpp.html\">BasicController.cpp</a> <a href=\"BasicController_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:BasicController_8h\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"BasicController_8h.html\">BasicController.h</a> <a href=\"BasicController_8h_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:EnigmaIOT-Json-Controller-Template_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html\">EnigmaIOT-Json-Controller-Template.cpp</a> <a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_d43fadc45274b5d05cae2a6678e1cfd4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_led_flasher Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d43fadc45274b5d05cae2a6678e1cfd4.html\">enigmaiot_led_flasher</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_led_flasher Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:enigmaiot__led__flasher_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html\">enigmaiot_led_flasher.cpp</a> <a href=\"enigmaiot__led__flasher_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dir_ddb1aa94a6973c510045d1a2166b2b36.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_ddb1aa94a6973c510045d1a2166b2b36.html\">enigmaiot_node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_node Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:enigmaiot__node_8cpp\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node_8cpp.html\">enigmaiot_node.cpp</a> <a href=\"enigmaiot__node_8cpp_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/doxygen.css",
    "content": "/* The standard CSS for doxygen 1.8.20 */\n\nbody, table, div, p, dl {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\np.reference, p.definition {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\n/* @group Heading Levels */\n\nh1.groupheader {\n\tfont-size: 150%;\n}\n\n.title {\n\tfont: 400 14px/28px Roboto,sans-serif;\n\tfont-size: 150%;\n\tfont-weight: bold;\n\tmargin: 10px 2px;\n}\n\nh2.groupheader {\n\tborder-bottom: 1px solid #879ECB;\n\tcolor: #354C7B;\n\tfont-size: 150%;\n\tfont-weight: normal;\n\tmargin-top: 1.75em;\n\tpadding-top: 8px;\n\tpadding-bottom: 4px;\n\twidth: 100%;\n}\n\nh3.groupheader {\n\tfont-size: 100%;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\t-webkit-transition: text-shadow 0.5s linear;\n\t-moz-transition: text-shadow 0.5s linear;\n\t-ms-transition: text-shadow 0.5s linear;\n\t-o-transition: text-shadow 0.5s linear;\n\ttransition: text-shadow 0.5s linear;\n\tmargin-right: 15px;\n}\n\nh1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {\n\ttext-shadow: 0 0 15px cyan;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\nul.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\tcolumn-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n\tcolumn-count: 3;\n}\n\np.startli, p.startdd {\n\tmargin-top: 2px;\n}\n\nth p.starttd, th p.intertd, th p.endtd {\n        font-size: 100%;\n        font-weight: 700;\n}\n\np.starttd {\n\tmargin-top: 0px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\np.interli {\n}\n\np.interdd {\n}\n\np.intertd {\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #3D578C;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #4665A2;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #9CAFD4;\n\tcolor: #FFFFFF;\n\tborder: 1px double #869DCA;\n}\n\n.contents a.qindexHL:visited {\n        color: #FFFFFF;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code, a.code:visited, a.line, a.line:visited {\n\tcolor: #4665A2; \n}\n\na.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {\n\tcolor: #4665A2; \n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\nul {\n  overflow: hidden; /*Fixed: list item bullets overlap floating elements*/\n}\n\n#side-nav ul {\n  overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */\n}\n\n#main-nav ul {\n  overflow: visible; /* reset ul rule for the navigation bar drop down lists */\n}\n\n.fragment {\n  text-align: left;\n  direction: ltr;\n  overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/\n  overflow-y: hidden;\n}\n\npre.fragment {\n        border: 1px solid #C4CFE5;\n        background-color: #FBFCFD;\n        padding: 4px 6px;\n        margin: 4px 8px 4px 2px;\n        overflow: auto;\n        word-wrap: break-word;\n        font-size:  9pt;\n        line-height: 125%;\n        font-family: monospace, fixed;\n        font-size: 105%;\n}\n\ndiv.fragment {\n  padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/\n  margin: 4px 8px 4px 2px;\n\tbackground-color: #FBFCFD;\n\tborder: 1px solid #C4CFE5;\n}\n\ndiv.line {\n\tfont-family: monospace, fixed;\n        font-size: 13px;\n\tmin-height: 13px;\n\tline-height: 1.0;\n\ttext-wrap: unrestricted;\n\twhite-space: -moz-pre-wrap; /* Moz */\n\twhite-space: -pre-wrap;     /* Opera 4-6 */\n\twhite-space: -o-pre-wrap;   /* Opera 7 */\n\twhite-space: pre-wrap;      /* CSS3  */\n\tword-wrap: break-word;      /* IE 5.5+ */\n\ttext-indent: -53px;\n\tpadding-left: 53px;\n\tpadding-bottom: 0px;\n\tmargin: 0px;\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\ndiv.line:after {\n    content:\"\\000A\";\n    white-space: pre;\n}\n\ndiv.line.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 10px cyan;\n}\n\n\nspan.lineno {\n\tpadding-right: 4px;\n\ttext-align: right;\n\tborder-right: 2px solid #0F0;\n\tbackground-color: #E8E8E8;\n        white-space: pre;\n}\nspan.lineno a {\n\tbackground-color: #D8D8D8;\n}\n\nspan.lineno a:hover {\n\tbackground-color: #C8C8C8;\n}\n\n.lineno {\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\ndiv.ah, span.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #FFFFFF;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tpadding: 0.2em;\n\tborder: solid thin #333;\n\tborder-radius: 0.5em;\n\t-webkit-border-radius: .5em;\n\t-moz-border-radius: .5em;\n\tbox-shadow: 2px 2px 3px #999;\n\t-webkit-box-shadow: 2px 2px 3px #999;\n\t-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n\tbackground-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);\n}\n\ndiv.classindex ul {\n        list-style: none;\n        padding-left: 0;\n}\n\ndiv.classindex span.ai {\n        display: inline-block;\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tbackground-color: white;\n\tcolor: black;\n        margin: 0;\n}\n\ndiv.contents {\n\tmargin-top: 10px;\n\tmargin-left: 12px;\n\tmargin-right: 8px;\n}\n\ntd.indexkey {\n\tbackground-color: #EBEFF6;\n\tfont-weight: bold;\n\tborder: 1px solid #C4CFE5;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n        white-space: nowrap;\n        vertical-align: top;\n}\n\ntd.indexvalue {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #C4CFE5;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #EEF1F7;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl, img.inline {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n        margin-top: 0px;\n        margin-bottom: 0px;\n        padding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\naddress.footer {\n\ttext-align: right;\n\tpadding-right: 12px;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\nblockquote {\n        background-color: #F7F8FB;\n        border-left: 2px solid #9CAFD4;\n        margin: 0 24px 0 4px;\n        padding: 0 12px 0 16px;\n}\n\nblockquote.DocNodeRTL {\n   border-left: 0;\n   border-right: 2px solid #9CAFD4;\n   margin: 0 4px 0 24px;\n   padding: 0 16px 0 12px;\n}\n\n/* @end */\n\n/*\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n*/\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #A3B4D7;\n}\n\nth.dirtab {\n\tbackground: #EBEFF6;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #4A6AAA;\n}\n\nhr.footer {\n\theight: 1px;\n}\n\n/* @group Member Descriptions */\n\ntable.memberdecls {\n\tborder-spacing: 0px;\n\tpadding: 0px;\n}\n\n.memberdecls td, .fieldtable tr {\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\n.memberdecls td.glow, .fieldtable tr.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 15px cyan;\n}\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #F9FAFC;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memSeparator {\n        border-bottom: 1px solid #DEE4F0;\n        line-height: 1px;\n        margin: 0px;\n        padding: 0px;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memItemRight, .memTemplItemRight {\n\twidth: 100%;\n}\n\n.memTemplParams {\n\tcolor: #4665A2;\n        white-space: nowrap;\n\tfont-size: 80%;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtitle {\n\tpadding: 8px;\n\tborder-top: 1px solid #A8B8D9;\n\tborder-left: 1px solid #A8B8D9;\n\tborder-right: 1px solid #A8B8D9;\n\tborder-top-right-radius: 4px;\n\tborder-top-left-radius: 4px;\n\tmargin-bottom: -1px;\n\tbackground-image: url('nav_f.png');\n\tbackground-repeat: repeat-x;\n\tbackground-color: #E2E8F2;\n\tline-height: 1.25;\n\tfont-weight: 300;\n\tfloat:left;\n}\n\n.permalink\n{\n        font-size: 65%;\n        display: inline-block;\n        vertical-align: middle;\n}\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #4665A2;\n\tfont-weight: normal;\n\tmargin-left: 9px;\n}\n\n.memnav {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.mempage {\n\twidth: 100%;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n\tmargin-right: 5px;\n        -webkit-transition: box-shadow 0.5s linear;\n        -moz-transition: box-shadow 0.5s linear;\n        -ms-transition: box-shadow 0.5s linear;\n        -o-transition: box-shadow 0.5s linear;\n        transition: box-shadow 0.5s linear;\n        display: table !important;\n        width: 100%;\n}\n\n.memitem.glow {\n         box-shadow: 0 0 15px cyan;\n}\n\n.memname {\n        font-weight: 400;\n        margin-left: 6px;\n}\n\n.memname td {\n\tvertical-align: bottom;\n}\n\n.memproto, dl.reflist dt {\n        border-top: 1px solid #A8B8D9;\n        border-left: 1px solid #A8B8D9;\n        border-right: 1px solid #A8B8D9;\n        padding: 6px 0px 6px 0px;\n        color: #253555;\n        font-weight: bold;\n        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n        background-color: #DFE5F1;\n        /* opera specific markup */\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        border-top-right-radius: 4px;\n        /* firefox specific markup */\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        -moz-border-radius-topright: 4px;\n        /* webkit specific markup */\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        -webkit-border-top-right-radius: 4px;\n\n}\n\n.overload {\n        font-family: \"courier new\",courier,monospace;\n\tfont-size: 65%;\n}\n\n.memdoc, dl.reflist dd {\n        border-bottom: 1px solid #A8B8D9;      \n        border-left: 1px solid #A8B8D9;      \n        border-right: 1px solid #A8B8D9; \n        padding: 6px 10px 2px 10px;\n        background-color: #FBFCFD;\n        border-top-width: 0;\n        background-image:url('nav_g.png');\n        background-repeat:repeat-x;\n        background-color: #FFFFFF;\n        /* opera specific markup */\n        border-bottom-left-radius: 4px;\n        border-bottom-right-radius: 4px;\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        /* firefox specific markup */\n        -moz-border-radius-bottomleft: 4px;\n        -moz-border-radius-bottomright: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        /* webkit specific markup */\n        -webkit-border-bottom-left-radius: 4px;\n        -webkit-border-bottom-right-radius: 4px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\ndl.reflist dt {\n        padding: 5px;\n}\n\ndl.reflist dd {\n        margin: 0px 0px 10px 0px;\n        padding: 5px;\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n.paramname code {\n        line-height: 14px;\n}\n\n.params, .retval, .exception, .tparams {\n        margin-left: 0px;\n        padding-left: 0px;\n}       \n\n.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {\n        font-weight: bold;\n        vertical-align: top;\n}\n        \n.params .paramtype, .tparams .paramtype {\n        font-style: italic;\n        vertical-align: top;\n}       \n        \n.params .paramdir, .tparams .paramdir {\n        font-family: \"courier new\",courier,monospace;\n        vertical-align: top;\n}\n\ntable.mlabels {\n\tborder-spacing: 0px;\n}\n\ntd.mlabels-left {\n\twidth: 100%;\n\tpadding: 0px;\n}\n\ntd.mlabels-right {\n\tvertical-align: bottom;\n\tpadding: 0px;\n\twhite-space: nowrap;\n}\n\nspan.mlabels {\n        margin-left: 8px;\n}\n\nspan.mlabel {\n        background-color: #728DC1;\n        border-top:1px solid #5373B4;\n        border-left:1px solid #5373B4;\n        border-right:1px solid #C4CFE5;\n        border-bottom:1px solid #C4CFE5;\n\ttext-shadow: none;\n\tcolor: white;\n\tmargin-right: 4px;\n\tpadding: 2px 3px;\n\tborder-radius: 3px;\n\tfont-size: 7pt;\n\twhite-space: nowrap;\n\tvertical-align: middle;\n}\n\n\n\n/* @end */\n\n/* these are for tree view inside a (index) page */\n\ndiv.directory {\n        margin: 10px 0px;\n        border-top: 1px solid #9CAFD4;\n        border-bottom: 1px solid #9CAFD4;\n        width: 100%;\n}\n\n.directory table {\n        border-collapse:collapse;\n}\n\n.directory td {\n        margin: 0px;\n        padding: 0px;\n\tvertical-align: top;\n}\n\n.directory td.entry {\n        white-space: nowrap;\n        padding-right: 6px;\n\tpadding-top: 3px;\n}\n\n.directory td.entry a {\n        outline:none;\n}\n\n.directory td.entry a img {\n        border: none;\n}\n\n.directory td.desc {\n        width: 100%;\n        padding-left: 6px;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n\tborder-left: 1px solid rgba(0,0,0,0.05);\n}\n\n.directory tr.even {\n\tpadding-left: 6px;\n\tbackground-color: #F7F8FB;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n.directory .levels {\n        white-space: nowrap;\n        width: 100%;\n        text-align: right;\n        font-size: 9pt;\n}\n\n.directory .levels span {\n        cursor: pointer;\n        padding-left: 2px;\n        padding-right: 2px;\n\tcolor: #3D578C;\n}\n\n.arrow {\n    color: #9CAFD4;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    cursor: pointer;\n    font-size: 80%;\n    display: inline-block;\n    width: 16px;\n    height: 22px;\n}\n\n.icon {\n    font-family: Arial, Helvetica;\n    font-weight: bold;\n    font-size: 12px;\n    height: 14px;\n    width: 16px;\n    display: inline-block;\n    background-color: #728DC1;\n    color: white;\n    text-align: center;\n    border-radius: 4px;\n    margin-left: 2px;\n    margin-right: 2px;\n}\n\n.icona {\n    width: 24px;\n    height: 22px;\n    display: inline-block;\n}\n\n.iconfopen {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderopen.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.iconfclosed {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderclosed.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.icondoc {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('doc.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\ntable.directory {\n    font: 400 14px Roboto,sans-serif;\n}\n\n/* @end */\n\ndiv.dynheader {\n        margin-top: 8px;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\naddress {\n\tfont-style: normal;\n\tcolor: #2A3D61;\n}\n\ntable.doxtable caption {\n\tcaption-side: top;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n        margin-top: 4px;\n        margin-bottom: 4px;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\ntable.fieldtable {\n        /*width: 100%;*/\n        margin-bottom: 10px;\n        border: 1px solid #A8B8D9;\n        border-spacing: 0px;\n        -moz-border-radius: 4px;\n        -webkit-border-radius: 4px;\n        border-radius: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n}\n\n.fieldtable td, .fieldtable th {\n        padding: 3px 7px 2px;\n}\n\n.fieldtable td.fieldtype, .fieldtable td.fieldname {\n        white-space: nowrap;\n        border-right: 1px solid #A8B8D9;\n        border-bottom: 1px solid #A8B8D9;\n        vertical-align: top;\n}\n\n.fieldtable td.fieldname {\n        padding-top: 3px;\n}\n\n.fieldtable td.fielddoc {\n        border-bottom: 1px solid #A8B8D9;\n        /*width: 100%;*/\n}\n\n.fieldtable td.fielddoc p:first-child {\n        margin-top: 0px;\n}       \n        \n.fieldtable td.fielddoc p:last-child {\n        margin-bottom: 2px;\n}\n\n.fieldtable tr:last-child td {\n        border-bottom: none;\n}\n\n.fieldtable th {\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        font-size: 90%;\n        color: #253555;\n        padding-bottom: 4px;\n        padding-top: 5px;\n        text-align:left;\n        font-weight: 400;\n        -moz-border-radius-topleft: 4px;\n        -moz-border-radius-topright: 4px;\n        -webkit-border-top-left-radius: 4px;\n        -webkit-border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        border-top-right-radius: 4px;\n        border-bottom: 1px solid #A8B8D9;\n}\n\n\n.tabsearch {\n\ttop: 0px;\n\tleft: 10px;\n\theight: 36px;\n\tbackground-image: url('tab_b.png');\n\tz-index: 101;\n\toverflow: hidden;\n\tfont-size: 13px;\n}\n\n.navpath ul\n{\n\tfont-size: 11px;\n\tbackground-image:url('tab_b.png');\n\tbackground-repeat:repeat-x;\n\tbackground-position: 0 -5px;\n\theight:30px;\n\tline-height:30px;\n\tcolor:#8AA0CC;\n\tborder:solid 1px #C2CDE4;\n\toverflow:hidden;\n\tmargin:0px;\n\tpadding:0px;\n}\n\n.navpath li\n{\n\tlist-style-type:none;\n\tfloat:left;\n\tpadding-left:10px;\n\tpadding-right:15px;\n\tbackground-image:url('bc_s.png');\n\tbackground-repeat:no-repeat;\n\tbackground-position:right;\n\tcolor:#364D7C;\n}\n\n.navpath li.navelem a\n{\n\theight:32px;\n\tdisplay:block;\n\ttext-decoration: none;\n\toutline: none;\n\tcolor: #283A5D;\n\tfont-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n\ttext-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n\ttext-decoration: none;        \n}\n\n.navpath li.navelem a:hover\n{\n\tcolor:#6884BD;\n}\n\n.navpath li.footer\n{\n        list-style-type:none;\n        float:right;\n        padding-left:10px;\n        padding-right:15px;\n        background-image:none;\n        background-repeat:no-repeat;\n        background-position:right;\n        color:#364D7C;\n        font-size: 8pt;\n}\n\n\ndiv.summary\n{\n\tfloat: right;\n\tfont-size: 8pt;\n\tpadding-right: 5px;\n\twidth: 50%;\n\ttext-align: right;\n}       \n\ndiv.summary a\n{\n\twhite-space: nowrap;\n}\n\ntable.classindex\n{\n        margin: 10px;\n        white-space: nowrap;\n        margin-left: 3%;\n        margin-right: 3%;\n        width: 94%;\n        border: 0;\n        border-spacing: 0; \n        padding: 0;\n}\n\ndiv.ingroups\n{\n\tfont-size: 8pt;\n\twidth: 50%;\n\ttext-align: left;\n}\n\ndiv.ingroups a\n{\n\twhite-space: nowrap;\n}\n\ndiv.header\n{\n        background-image:url('nav_h.png');\n        background-repeat:repeat-x;\n\tbackground-color: #F9FAFC;\n\tmargin:  0px;\n\tborder-bottom: 1px solid #C4CFE5;\n}\n\ndiv.headertitle\n{\n\tpadding: 5px 5px 5px 10px;\n}\n\n.PageDocRTL-title div.headertitle {\n  text-align: right;\n  direction: rtl;\n}\n\ndl {\n        padding: 0 0 0 0;\n}\n\n/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */\ndl.section {\n\tmargin-left: 0px;\n\tpadding-left: 0px;\n}\n\ndl.section.DocNodeRTL {\n  margin-right: 0px;\n  padding-right: 0px;\n}\n\ndl.note {\n  margin-left: -7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #D0C000;\n}\n\ndl.note.DocNodeRTL {\n  margin-left: 0;\n  padding-left: 0;\n  border-left: 0;\n  margin-right: -7px;\n  padding-right: 3px;\n  border-right: 4px solid;\n  border-color: #D0C000;\n}\n\ndl.warning, dl.attention {\n  margin-left: -7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #FF0000;\n}\n\ndl.warning.DocNodeRTL, dl.attention.DocNodeRTL {\n  margin-left: 0;\n  padding-left: 0;\n  border-left: 0;\n  margin-right: -7px;\n  padding-right: 3px;\n  border-right: 4px solid;\n  border-color: #FF0000;\n}\n\ndl.pre, dl.post, dl.invariant {\n  margin-left: -7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #00D000;\n}\n\ndl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {\n  margin-left: 0;\n  padding-left: 0;\n  border-left: 0;\n  margin-right: -7px;\n  padding-right: 3px;\n  border-right: 4px solid;\n  border-color: #00D000;\n}\n\ndl.deprecated {\n  margin-left: -7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #505050;\n}\n\ndl.deprecated.DocNodeRTL {\n  margin-left: 0;\n  padding-left: 0;\n  border-left: 0;\n  margin-right: -7px;\n  padding-right: 3px;\n  border-right: 4px solid;\n  border-color: #505050;\n}\n\ndl.todo {\n  margin-left: -7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #00C0E0;\n}\n\ndl.todo.DocNodeRTL {\n  margin-left: 0;\n  padding-left: 0;\n  border-left: 0;\n  margin-right: -7px;\n  padding-right: 3px;\n  border-right: 4px solid;\n  border-color: #00C0E0;\n}\n\ndl.test {\n  margin-left: -7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #3030E0;\n}\n\ndl.test.DocNodeRTL {\n  margin-left: 0;\n  padding-left: 0;\n  border-left: 0;\n  margin-right: -7px;\n  padding-right: 3px;\n  border-right: 4px solid;\n  border-color: #3030E0;\n}\n\ndl.bug {\n  margin-left: -7px;\n  padding-left: 3px;\n  border-left: 4px solid;\n  border-color: #C08050;\n}\n\ndl.bug.DocNodeRTL {\n  margin-left: 0;\n  padding-left: 0;\n  border-left: 0;\n  margin-right: -7px;\n  padding-right: 3px;\n  border-right: 4px solid;\n  border-color: #C08050;\n}\n\ndl.section dd {\n\tmargin-bottom: 6px;\n}\n\n\n#projectlogo\n{\n\ttext-align: center;\n\tvertical-align: bottom;\n\tborder-collapse: separate;\n}\n \n#projectlogo img\n{ \n\tborder: 0px none;\n}\n \n#projectalign\n{\n        vertical-align: middle;\n}\n\n#projectname\n{\n\tfont: 300% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 2px 0px;\n}\n    \n#projectbrief\n{\n\tfont: 120% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#projectnumber\n{\n\tfont: 50% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#titlearea\n{\n\tpadding: 0px;\n\tmargin: 0px;\n\twidth: 100%;\n\tborder-bottom: 1px solid #5373B4;\n}\n\n.image\n{\n        text-align: center;\n}\n\n.dotgraph\n{\n        text-align: center;\n}\n\n.mscgraph\n{\n        text-align: center;\n}\n\n.plantumlgraph\n{\n        text-align: center;\n}\n\n.diagraph\n{\n        text-align: center;\n}\n\n.caption\n{\n\tfont-weight: bold;\n}\n\ndiv.zoom\n{\n\tborder: 1px solid #90A5CE;\n}\n\ndl.citelist {\n        margin-bottom:50px;\n}\n\ndl.citelist dt {\n        color:#334975;\n        float:left;\n        font-weight:bold;\n        margin-right:10px;\n        padding:5px;\n        text-align:right;\n        width:52px;\n}\n\ndl.citelist dd {\n        margin:2px 0 2px 72px;\n        padding:5px 0;\n}\n\ndiv.toc {\n        padding: 14px 25px;\n        background-color: #F4F6FA;\n        border: 1px solid #D8DFEE;\n        border-radius: 7px 7px 7px 7px;\n        float: right;\n        height: auto;\n        margin: 0 8px 10px 10px;\n        width: 200px;\n}\n\n.PageDocRTL-title div.toc {\n  float: left !important;\n  text-align: right;\n}\n\ndiv.toc li {\n        background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n        margin-top: 5px;\n        padding-left: 10px;\n        padding-top: 2px;\n}\n\n.PageDocRTL-title div.toc li {\n  background-position-x: right !important;\n  padding-left: 0 !important;\n  padding-right: 10px;\n}\n\ndiv.toc h3 {\n        font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n\tcolor: #4665A2;\n        border-bottom: 0 none;\n        margin: 0;\n}\n\ndiv.toc ul {\n        list-style: none outside none;\n        border: medium none;\n        padding: 0px;\n}       \n\ndiv.toc li.level1 {\n        margin-left: 0px;\n}\n\ndiv.toc li.level2 {\n        margin-left: 15px;\n}\n\ndiv.toc li.level3 {\n        margin-left: 30px;\n}\n\ndiv.toc li.level4 {\n        margin-left: 45px;\n}\n\n.PageDocRTL-title div.toc li.level1 {\n  margin-left: 0 !important;\n  margin-right: 0;\n}\n\n.PageDocRTL-title div.toc li.level2 {\n  margin-left: 0 !important;\n  margin-right: 15px;\n}\n\n.PageDocRTL-title div.toc li.level3 {\n  margin-left: 0 !important;\n  margin-right: 30px;\n}\n\n.PageDocRTL-title div.toc li.level4 {\n  margin-left: 0 !important;\n  margin-right: 45px;\n}\n\n.inherit_header {\n        font-weight: bold;\n        color: gray;\n        cursor: pointer;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.inherit_header td {\n        padding: 6px 0px 2px 5px;\n}\n\n.inherit {\n        display: none;\n}\n\ntr.heading h2 {\n        margin-top: 12px;\n        margin-bottom: 4px;\n}\n\n/* tooltip related style info */\n\n.ttc {\n        position: absolute;\n        display: none;\n}\n\n#powerTip {\n\tcursor: default;\n\twhite-space: nowrap;\n\tbackground-color: white;\n\tborder: 1px solid gray;\n\tborder-radius: 4px 4px 4px 4px;\n\tbox-shadow: 1px 1px 7px gray;\n\tdisplay: none;\n\tfont-size: smaller;\n\tmax-width: 80%;\n\topacity: 0.9;\n\tpadding: 1ex 1em 1em;\n\tposition: absolute;\n\tz-index: 2147483647;\n}\n\n#powerTip div.ttdoc {\n        color: grey;\n\tfont-style: italic;\n}\n\n#powerTip div.ttname a {\n        font-weight: bold;\n}\n\n#powerTip div.ttname {\n        font-weight: bold;\n}\n\n#powerTip div.ttdeci {\n        color: #006318;\n}\n\n#powerTip div {\n        margin: 0px;\n        padding: 0px;\n        font: 12px/16px Roboto,sans-serif;\n}\n\n#powerTip:before, #powerTip:after {\n\tcontent: \"\";\n\tposition: absolute;\n\tmargin: 0px;\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.w:after,  #powerTip.w:before,\n#powerTip.e:after,  #powerTip.e:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.nw:after, #powerTip.nw:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n}\n\n#powerTip.n:after,  #powerTip.s:after,\n#powerTip.w:after,  #powerTip.e:after,\n#powerTip.nw:after, #powerTip.ne:after,\n#powerTip.sw:after, #powerTip.se:after {\n\tborder-color: rgba(255, 255, 255, 0);\n}\n\n#powerTip.n:before,  #powerTip.s:before,\n#powerTip.w:before,  #powerTip.e:before,\n#powerTip.nw:before, #powerTip.ne:before,\n#powerTip.sw:before, #powerTip.se:before {\n\tborder-color: rgba(128, 128, 128, 0);\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.nw:after, #powerTip.nw:before {\n\ttop: 100%;\n}\n\n#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {\n\tborder-top-color: #FFFFFF;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n#powerTip.n:before {\n\tborder-top-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n#powerTip.n:after, #powerTip.n:before {\n\tleft: 50%;\n}\n\n#powerTip.nw:after, #powerTip.nw:before {\n\tright: 14px;\n}\n\n#powerTip.ne:after, #powerTip.ne:before {\n\tleft: 14px;\n}\n\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tbottom: 100%;\n}\n\n#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {\n\tborder-bottom-color: #FFFFFF;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n\n#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {\n\tborder-bottom-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n\n#powerTip.s:after, #powerTip.s:before {\n\tleft: 50%;\n}\n\n#powerTip.sw:after, #powerTip.sw:before {\n\tright: 14px;\n}\n\n#powerTip.se:after, #powerTip.se:before {\n\tleft: 14px;\n}\n\n#powerTip.e:after, #powerTip.e:before {\n\tleft: 100%;\n}\n#powerTip.e:after {\n\tborder-left-color: #FFFFFF;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.e:before {\n\tborder-left-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#powerTip.w:after, #powerTip.w:before {\n\tright: 100%;\n}\n#powerTip.w:after {\n\tborder-right-color: #FFFFFF;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.w:before {\n\tborder-right-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n@media print\n{\n  #top { display: none; }\n  #side-nav { display: none; }\n  #nav-path { display: none; }\n  body { overflow:visible; }\n  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }\n  .summary { display: none; }\n  .memitem { page-break-inside: avoid; }\n  #doc-content\n  {\n    margin-left:0 !important;\n    height:auto !important;\n    width:auto !important;\n    overflow:inherit;\n    display:inline;\n  }\n}\n\n/* @group Markdown */\n\ntable.markdownTable {\n\tborder-collapse:collapse;\n        margin-top: 4px;\n        margin-bottom: 4px;\n}\n\ntable.markdownTable td, table.markdownTable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.markdownTable tr {\n}\n\nth.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\nth.markdownTableHeadLeft, td.markdownTableBodyLeft {\n\ttext-align: left\n}\n\nth.markdownTableHeadRight, td.markdownTableBodyRight {\n\ttext-align: right\n}\n\nth.markdownTableHeadCenter, td.markdownTableBodyCenter {\n\ttext-align: center\n}\n\n.DocNodeRTL {\n  text-align: right;\n  direction: rtl;\n}\n\n.DocNodeLTR {\n  text-align: left;\n  direction: ltr;\n}\n\ntable.DocNodeRTL {\n   width: auto;\n   margin-right: 0;\n   margin-left: auto;\n}\n\ntable.DocNodeLTR {\n   width: auto;\n   margin-right: auto;\n   margin-left: 0;\n}\n\ntt, code, kbd, samp\n{\n  display: inline-block;\n  direction:ltr; \n}\n/* @end */\n\nu {\n\ttext-decoration: underline;\n}\n\n"
  },
  {
    "path": "docs/html/ds18b20Controller_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Sensor-Controller/ds18b20Controller.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_00c6ed3b0ef8b691ed3b9ecb58c6534d.html\">EnigmaIOT-Sensor-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ds18b20Controller.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;functional&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a>&quot;</code><br />\n</div>\n<p><a href=\"ds18b20Controller_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:ab946e2e7f7679350627acfded8e2658b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ds18b20Controller_8cpp.html#ab946e2e7f7679350627acfded8e2658b\">TEST</a>&#160;&#160;&#160;0</td></tr>\n<tr class=\"separator:ab946e2e7f7679350627acfded8e2658b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4260ed8874da804fb9ef9abba200b487\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ds18b20Controller_8cpp.html#a4260ed8874da804fb9ef9abba200b487\">ONE_WIRE_BUS</a>&#160;&#160;&#160;4</td></tr>\n<tr class=\"separator:a4260ed8874da804fb9ef9abba200b487\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ds18b20Controller_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = &quot;/customconf.json&quot;</td></tr>\n<tr class=\"memdesc:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Custom configuration file name.  <a href=\"ds18b20Controller_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">More...</a><br /></td></tr>\n<tr class=\"separator:a0a5b20c0a44622656e3028948ca20a47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a4260ed8874da804fb9ef9abba200b487\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4260ed8874da804fb9ef9abba200b487\">&#9670;&nbsp;</a></span>ONE_WIRE_BUS</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define ONE_WIRE_BUS&#160;&#160;&#160;4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8cpp_source.html#l00020\">20</a> of file <a class=\"el\" href=\"ds18b20Controller_8cpp_source.html\">ds18b20Controller.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ab946e2e7f7679350627acfded8e2658b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab946e2e7f7679350627acfded8e2658b\">&#9670;&nbsp;</a></span>TEST</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define TEST&#160;&#160;&#160;0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8cpp_source.html#l00011\">11</a> of file <a class=\"el\" href=\"ds18b20Controller_8cpp_source.html\">ds18b20Controller.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0a5b20c0a44622656e3028948ca20a47\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0a5b20c0a44622656e3028948ca20a47\">&#9670;&nbsp;</a></span>CONFIG_FILE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto CONFIG_FILE = &quot;/customconf.json&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Custom configuration file name. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8cpp_source.html#l00013\">13</a> of file <a class=\"el\" href=\"ds18b20Controller_8cpp_source.html\">ds18b20Controller.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/ds18b20Controller_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Sensor-Controller/ds18b20Controller.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_00c6ed3b0ef8b691ed3b9ecb58c6534d.html\">EnigmaIOT-Sensor-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ds18b20Controller.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"ds18b20Controller_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"comment\">// </span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160; </div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"ds18b20Controller_8h.html\">ds18b20Controller.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160; </div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"keyword\">using namespace </span>std;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"keyword\">using namespace </span>placeholders;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\"><a class=\"line\" href=\"ds18b20Controller_8cpp.html#ab946e2e7f7679350627acfded8e2658b\">   11</a></span>&#160;<span class=\"preprocessor\">#define TEST 0</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\"><a class=\"line\" href=\"ds18b20Controller_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">   13</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"ds18b20Controller_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a> = <span class=\"stringliteral\">&quot;/customconf.json&quot;</span>; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160; </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// You may add some global variables you need here,</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// like serial port instances, I2C, etc</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// -----------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"ds18b20Controller_8cpp.html#a4260ed8874da804fb9ef9abba200b487\">   20</a></span>&#160;<span class=\"preprocessor\">#define ONE_WIRE_BUS 4</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;    <span class=\"comment\">// Process incoming messages here</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;    <span class=\"comment\">// They are normally encoded as MsgPack so you can confert them to JSON very easily</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160; </div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result) {</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;    <span class=\"comment\">// Respond to command with a result: true if successful, false if failed </span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99\">   35</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99\">CONTROLLER_CLASS_NAME::sendTemperature</a> (<span class=\"keywordtype\">float</span> temp) {</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (2);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;    json[<span class=\"stringliteral\">&quot;temp&quot;</span>] = temp;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    <span class=\"keywordflow\">return</span> sendJson (json);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a> () {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    <span class=\"comment\">// Register every HAEntity discovery function here. As many as you need</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    addHACall (std::bind (&amp;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a>, <span class=\"keyword\">this</span>));</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>) {</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    enigmaIotNode = node;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    <span class=\"comment\">// You do node setup here. Use it as it was the normal setup() Arduino function</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#if !TEST</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    oneWire = <span class=\"keyword\">new</span> OneWire (<a class=\"code\" href=\"ds18b20Controller_8cpp.html#a4260ed8874da804fb9ef9abba200b487\">ONE_WIRE_BUS</a>);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;    sensors = <span class=\"keyword\">new</span> DallasTemperature (oneWire);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;    sensors-&gt;begin ();</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;    sensors-&gt;setWaitForConversion (<span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    sensors-&gt;requestTemperatures ();</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;    time_t start = millis ();</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    <span class=\"comment\">// Send a &#39;hello&#39; message when initalizing is finished</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    <span class=\"keywordflow\">if</span> (!enigmaIotNode-&gt;getNode ()-&gt;getSleepy ()) {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keywordflow\">if</span> (!(enigmaIotNode-&gt;getNode ()-&gt;getSleepy ())) {</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;            sendStartAnouncement ();  <span class=\"comment\">// Disable this if node is sleepy</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160; </div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#if !TEST</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    <span class=\"keywordflow\">while</span> (!sensors-&gt;isConversionComplete ()) {</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        delay (0);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    DEBUG_WARN (<span class=\"stringliteral\">&quot;Conversion completed in %d ms&quot;</span>, millis () - start);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    tempC = sensors-&gt;getTempCByIndex (0);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    tempC = 25.8;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    <span class=\"comment\">// Send a &#39;hello&#39; message when initalizing is finished</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    <span class=\"comment\">//sendStartAnouncement ();</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160; </div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Finish begin&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160; </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    <span class=\"comment\">// If your node should sleep after sending data do all remaining tasks here</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a> () {</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160; </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    <span class=\"comment\">// If your node stays allways awake do your periodic task here</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    <span class=\"comment\">// You can send your data as JSON. This is a basic example</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <span class=\"keywordflow\">if</span> (!tempSent &amp;&amp; enigmaIotNode-&gt;isRegistered()) {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"keywordflow\">if</span> (sendTemperature (tempC)) {</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;            tempSent = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"comment\">// else {</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"comment\">//}</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"comment\">//const size_t capacity = JSON_OBJECT_SIZE (4);</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"comment\">//DynamicJsonDocument json (capacity);</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"comment\">//json[&quot;sensor&quot;] = data_description;</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"comment\">//json[&quot;meas&quot;] = measurement;</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160; </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"comment\">//sendJson (json);</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a> () {</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    <span class=\"comment\">// It your class uses dynamic data free it up here</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"comment\">// This is normally not needed but it is a good practice</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160; </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a> () {</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration start ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <span class=\"comment\">// If you need to add custom configuration parameters do it here</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160; </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;==== CCost Controller Configuration result ====&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <span class=\"comment\">// You can read configuration paramenter values here</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160; </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    <span class=\"comment\">// If you need to read custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a> () {</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    <span class=\"comment\">// If you need to save custom configuration data do it here</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY   </span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;<span class=\"comment\">// Repeat this method for every entity</span></div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a> () {</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    <span class=\"comment\">// Select corresponding HAEntiny type</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    <a class=\"code\" href=\"classHASensor.html\">HASensor</a>* haEntity = <span class=\"keyword\">new</span> <a class=\"code\" href=\"classHASensor.html\">HASensor</a> ();</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160; </div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    uint8_t* msgPackBuffer;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160; </div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    <span class=\"keywordflow\">if</span> (!haEntity) {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;JSON object instance does not exist&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160; </div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;    <span class=\"comment\">// Add your characteristics here</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    <span class=\"comment\">// There is no need to futher modify this function</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160; </div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (<span class=\"stringliteral\">&quot;temp&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">setDeviceClass</a> (<a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\">sensor_temperature</a>);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">setExpireTime</a> (3600);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">setUnitOfMeasurement</a> (<span class=\"stringliteral\">&quot;ºC&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    haEntity-&gt;<a class=\"code\" href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">setValueField</a> (<span class=\"stringliteral\">&quot;temp&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    <span class=\"comment\">//haEntity-&gt;setValueTemplate (&quot;{%if value_json.dp==2-%}{{value_json.temp}}{%-else-%}{{states(&#39;sensor.***_temp&#39;)}}{%-endif%}&quot;);</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160; </div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    <span class=\"comment\">// *******************************</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160; </div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    <span class=\"keywordtype\">size_t</span> bufferLen = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> ();</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160; </div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    msgPackBuffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160; </div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    <span class=\"keywordtype\">size_t</span> len = haEntity-&gt;<a class=\"code\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (bufferLen, msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160; </div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Resulting MSG pack length: %d&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160; </div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;    <span class=\"keywordflow\">if</span> (!sendHADiscovery (msgPackBuffer, len)) {</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sending HA discovery message&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160; </div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    <span class=\"keywordflow\">if</span> (haEntity) {</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keyword\">delete</span> (haEntity);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160; </div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    <span class=\"keywordflow\">if</span> (msgPackBuffer) {</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        free (msgPackBuffer);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"ads18b20Controller_8cpp_html_a0a5b20c0a44622656e3028948ca20a47\"><div class=\"ttname\"><a href=\"ds18b20Controller_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">CONFIG_FILE</a></div><div class=\"ttdeci\">constexpr auto CONFIG_FILE</div><div class=\"ttdoc\">Custom configuration file name.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8cpp_source.html#l00013\">ds18b20Controller.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"ads18b20Controller_8h_html\"><div class=\"ttname\"><a href=\"ds18b20Controller_8h.html\">ds18b20Controller.h</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_ad299ecdb73519da56e2f5439941af544\"><div class=\"ttname\"><a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">HAEntity::measureMessage</a></div><div class=\"ttdeci\">size_t measureMessage()</div><div class=\"ttdoc\">Gets needed buffer size for discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00217\">haEntity.h:217</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a64140dc1e3e041eafbcd6eca04abb9ef\"><div class=\"ttname\"><a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">HAEntity::getAnounceMessage</a></div><div class=\"ttdeci\">size_t getAnounceMessage(int bufferlen, uint8_t *buffer)</div><div class=\"ttdoc\">Gets entity anounce message to be sent over EnigmaIOT message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00153\">haEntity.h:153</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ac9fda7397114e169164bc6ee390f0e2d\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController::connectInform</a></div><div class=\"ttdeci\">virtual void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00081\">EnigmaIOTjsonController.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae744508f79e2bdfcc7352908d537a671\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop() override</div><div class=\"ttdoc\">This should be called periodically for module handling.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00053\">ButtonController.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_a61e3c5e250794fc2c8ad2f96da1be6dc\"><div class=\"ttname\"><a href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">HASensor::setValueField</a></div><div class=\"ttdeci\">void setValueField(const char *payload)</div><div class=\"ttdoc\">Defines a json key that defines sensor value. When setting this, setValueTemplate () should not be ca...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00032\">haSensor.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"ads18b20Controller_8cpp_html_a4260ed8874da804fb9ef9abba200b487\"><div class=\"ttname\"><a href=\"ds18b20Controller_8cpp.html#a4260ed8874da804fb9ef9abba200b487\">ONE_WIRE_BUS</a></div><div class=\"ttdeci\">#define ONE_WIRE_BUS</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8cpp_source.html#l00020\">ds18b20Controller.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_acdd930c6953bd7383eac0d58b3693f71\"><div class=\"ttname\"><a href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">HASensor::setDeviceClass</a></div><div class=\"ttdeci\">void setDeviceClass(haSensorClass_t devClass)</div><div class=\"ttdoc\">Define sensor class as haSensorClass_t https://www.home-assistant.io/integrations/sensor....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00013\">haSensor.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab5ec6ad2c5cd0f6edfb7635aba862915\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a></div><div class=\"ttdeci\">void buildHADiscovery()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00124\">ButtonController.cpp:124</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a6fc95acd652b504ae0e342f7ce5450c3\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart() override</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00103\">ButtonController.cpp:103</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\">sensor_temperature</a></div><div class=\"ttdeci\">@ sensor_temperature</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00124\">haEntity.h:124</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00098\">ButtonController.cpp:98</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4a58511842391487187927dd1b87a0dc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig() override</div><div class=\"ttdoc\">Saves output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00119\">ButtonController.cpp:119</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_adad5ecbe11d2c2fcdc62be14acc8b89e\"><div class=\"ttname\"><a href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">HASensor::setUnitOfMeasurement</a></div><div class=\"ttdeci\">void setUnitOfMeasurement(const char *payload)</div><div class=\"ttdoc\">Set unit of measure https://www.home-assistant.io/integrations/sensor.mqtt/#unit_of_measurement.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00026\">haSensor.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00031\">ButtonController.cpp:31</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a68bf2951e6f5ba11894856104e062e6e\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result) override</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00026\">ButtonController.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a9fc25e3bff52d9d4a642e5a604dd7c44\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status) override</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00109\">ButtonController.cpp:109</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a1bd8a543ed665f9e48ca47b220123063\"><div class=\"ttname\"><a href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">HAEntity::setNameSufix</a></div><div class=\"ttdeci\">void setNameSufix(const char *payload)</div><div class=\"ttdoc\">Sets name suffix. Used for multi entity nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00200\">haEntity.h:200</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00040\">ButtonController.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html\"><div class=\"ttname\"><a href=\"classHASensor.html\">HASensor</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8h_source.html#l00081\">haSensor.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a195ba73498234d43ed74f44eb849ff99\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99\">CONTROLLER_CLASS_NAME::sendTemperature</a></div><div class=\"ttdeci\">bool sendTemperature(float temp)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8cpp_source.html#l00035\">ds18b20Controller.cpp:35</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a440e2979ce22f7fac243f6063469db6c\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override</div><div class=\"ttdoc\">Called to process a downlink command.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00019\">ButtonController.cpp:19</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab2dd07a8fecca7f083f2776dbc294dc9\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig() override</div><div class=\"ttdoc\">Loads output module configuration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00114\">ButtonController.cpp:114</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_afcb6f12671331f88f5bc2b940be9221f\"><div class=\"ttname\"><a href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">HASensor::setExpireTime</a></div><div class=\"ttdeci\">void setExpireTime(uint payload)</div><div class=\"ttdoc\">Defines the number of seconds after the sensor’s state expires, if it’s not updated....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00020\">haSensor.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/ds18b20Controller_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Sensor-Controller/ds18b20Controller.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_00c6ed3b0ef8b691ed3b9ecb58c6534d.html\">EnigmaIOT-Sensor-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ds18b20Controller.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTjsonController_8h_source.html\">EnigmaIOTjsonController.h</a>&gt;</code><br />\n<code>#include &lt;DallasTemperature.h&gt;</code><br />\n</div>\n<p><a href=\"ds18b20Controller_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ds18b20Controller_8h.html#a8257556540571a0fe1f5f05eb434af87\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;ds18b20Controller</td></tr>\n<tr class=\"separator:a8257556540571a0fe1f5f05eb434af87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"ds18b20Controller_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = &quot;DS18B20 <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>&quot;</td></tr>\n<tr class=\"separator:a0cf4eba0801e84be66f6198f07bfe287\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a8257556540571a0fe1f5f05eb434af87\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8257556540571a0fe1f5f05eb434af87\">&#9670;&nbsp;</a></span>CONTROLLER_CLASS_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a>&#160;&#160;&#160;ds18b20Controller</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8h_source.html#l00019\">19</a> of file <a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a0cf4eba0801e84be66f6198f07bfe287\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0cf4eba0801e84be66f6198f07bfe287\">&#9670;&nbsp;</a></span>CONTROLLER_NAME</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* CONTROLLER_NAME = &quot;DS18B20 <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">controller</a>&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"ds18b20Controller_8h_source.html#l00020\">20</a> of file <a class=\"el\" href=\"ds18b20Controller_8h_source.html\">ds18b20Controller.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/ds18b20Controller_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Sensor-Controller/ds18b20Controller.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_00c6ed3b0ef8b691ed3b9ecb58c6534d.html\">EnigmaIOT-Sensor-Controller</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ds18b20Controller.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"ds18b20Controller_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"comment\">// BasicController.h</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160; </div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#ifndef _DS18B20CONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#define _DS18B20CONTROLLER_h</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160; </div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"comment\">//#define DEBUG_SERIAL</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"ds18b20Controller_8h.html#a8257556540571a0fe1f5f05eb434af87\">   19</a></span>&#160;<span class=\"preprocessor\">#define CONTROLLER_CLASS_NAME ds18b20Controller</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"ds18b20Controller_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">   20</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"ds18b20Controller_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a> = <span class=\"stringliteral\">&quot;DS18B20 controller&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"haSensor_8h.html\">haSensor.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">// You may define data structures and constants here</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &lt;DallasTemperature.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160; </div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a> : <a class=\"code\" href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a> {</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    <span class=\"comment\">// add all parameters that your project needs here</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    <span class=\"comment\">// --------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#aa83d1a9fa08dfeb08690d132e77883db\">   37</a></span>&#160;    OneWire* <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aa83d1a9fa08dfeb08690d132e77883db\">oneWire</a>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ae875eb77d530db257752d87a010ec6c7\">   38</a></span>&#160;    DallasTemperature* <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae875eb77d530db257752d87a010ec6c7\">sensors</a>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ab6ae5865908255a9379c8c60632a3e3b\">   39</a></span>&#160;    DeviceAddress <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab6ae5865908255a9379c8c60632a3e3b\">insideThermometer</a>;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ab566b0093af7f84c645a5c35342c6a51\">   40</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab566b0093af7f84c645a5c35342c6a51\">tempSent</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a31b856de204d6bf15ed12641ff748dc3\">   41</a></span>&#160;    <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a31b856de204d6bf15ed12641ff748dc3\">tempC</a>;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">   44</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">setup</a> (<a class=\"code\" href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a>* node, <span class=\"keywordtype\">void</span>* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> = NULL);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160; </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">   46</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">processRxCommand</a> (<span class=\"keyword\">const</span> uint8_t* address, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160; </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">   48</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">loop</a> ();</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">   50</a></span>&#160;    <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">~CONTROLLER_CLASS_NAME</a> ();</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">   56</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">configManagerStart</a> ();</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">   62</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">configManagerExit</a> (<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160; </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">   68</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">loadConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160; </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">   70</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">connectInform</a> ();</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">   77</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">saveConfig</a> ();</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160; </div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">   79</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">sendCommandResp</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* command, <span class=\"keywordtype\">bool</span> result);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160; </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">   81</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">sendStartAnouncement</a> () {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"comment\">// You can send a &#39;hello&#39; message when your node starts. Useful to detect unexpected reboot</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (10);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        json[<span class=\"stringliteral\">&quot;status&quot;</span>] = <span class=\"stringliteral\">&quot;start&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        json[<span class=\"stringliteral\">&quot;device&quot;</span>] = <a class=\"code\" href=\"ds18b20Controller_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a>;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keywordtype\">char</span> version_buf[10];</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        snprintf (version_buf, 10, <span class=\"stringliteral\">&quot;%d.%d.%d&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                  <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[0], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[1], <a class=\"code\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a>[2]);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        json[<span class=\"stringliteral\">&quot;version&quot;</span>] = String (version_buf);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">sendJson</a> (json);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160; </div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY    </span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160; </div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">buildHADiscovery</a> ();</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;    <span class=\"comment\">// You may add additional method definitions that you need here</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    <span class=\"comment\">// ------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160; </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99\">sendTemperature</a> (<span class=\"keywordtype\">float</span> temp);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160; </div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160; </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aa83d1a9fa08dfeb08690d132e77883db\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aa83d1a9fa08dfeb08690d132e77883db\">CONTROLLER_CLASS_NAME::oneWire</a></div><div class=\"ttdeci\">OneWire * oneWire</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8h_source.html#l00037\">ds18b20Controller.h:37</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_aa6218f8b72b75932946bb5ca74b5bc14\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME::configManagerStart</a></div><div class=\"ttdeci\">void configManagerStart()</div><div class=\"ttdoc\">Called when wifi manager starts config portal.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a4848555c02bbbddd9af9f3f60a9117f5\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5\">CONTROLLER_CLASS_NAME::loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdoc\">This should be called periodically for module handling.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html_a9c45ffb63a64a645032b9c132f86c821\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">ENIGMAIOT_PROT_VERS</a></div><div class=\"ttdeci\">static const uint8_t ENIGMAIOT_PROT_VERS[3]</div><div class=\"ttdoc\">EnitmaIoT Version.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfig_8h_source.html#l00016\">EnigmaIoTconfig.h:16</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a584fb205957a7b3ca83fb76066af5268\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME::processRxCommand</a></div><div class=\"ttdeci\">bool processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdoc\">Called to process a downlink command.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a31b856de204d6bf15ed12641ff748dc3\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a31b856de204d6bf15ed12641ff748dc3\">CONTROLLER_CLASS_NAME::tempC</a></div><div class=\"ttdeci\">float tempC</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8h_source.html#l00041\">ds18b20Controller.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae572fe1f0d2bb7b4fb99067d815d5807\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807\">CONTROLLER_CLASS_NAME::saveConfig</a></div><div class=\"ttdeci\">bool saveConfig()</div><div class=\"ttdoc\">Saves output module configuration.</div></div>\n<div class=\"ttc\" id=\"ads18b20Controller_8h_html_a0cf4eba0801e84be66f6198f07bfe287\"><div class=\"ttname\"><a href=\"ds18b20Controller_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">CONTROLLER_NAME</a></div><div class=\"ttdeci\">static const char * CONTROLLER_NAME</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8h_source.html#l00020\">ds18b20Controller.h:20</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab5ec6ad2c5cd0f6edfb7635aba862915\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME::buildHADiscovery</a></div><div class=\"ttdeci\">void buildHADiscovery()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8cpp_source.html#l00124\">ButtonController.cpp:124</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ButtonController_8h_source.html#l00027\">ButtonController.h:27</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html_ae5ece1c030d9063e46127b8a48b7bfa9\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">EnigmaIOTjsonController::sendJson</a></div><div class=\"ttdeci\">bool sendJson(DynamicJsonDocument &amp;json)</div><div class=\"ttdoc\">Sends a JSON encoded message to lower layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00170\">EnigmaIOTjsonController.h:170</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab566b0093af7f84c645a5c35342c6a51\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab566b0093af7f84c645a5c35342c6a51\">CONTROLLER_CLASS_NAME::tempSent</a></div><div class=\"ttdeci\">bool tempSent</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8h_source.html#l00040\">ds18b20Controller.h:40</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a0965ba804f4f0d1533f888fa9011aa86\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86\">CONTROLLER_CLASS_NAME::sendCommandResp</a></div><div class=\"ttdeci\">bool sendCommandResp(const char *command, bool result)</div><div class=\"ttdoc\">Sends command processing response acknowledge.</div></div>\n<div class=\"ttc\" id=\"ahaSensor_8h_html\"><div class=\"ttname\"><a href=\"haSensor_8h.html\">haSensor.h</a></div><div class=\"ttdoc\">Home Assistant sensor integration.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_af6ef186cd6f5518739ef722213151284\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME</a></div><div class=\"ttdeci\">~CONTROLLER_CLASS_NAME()</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ab6ae5865908255a9379c8c60632a3e3b\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ab6ae5865908255a9379c8c60632a3e3b\">CONTROLLER_CLASS_NAME::insideThermometer</a></div><div class=\"ttdeci\">DeviceAddress insideThermometer</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8h_source.html#l00039\">ds18b20Controller.h:39</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ad5a5b5eb5068a97a6e41c74d264707eb\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME::connectInform</a></div><div class=\"ttdeci\">void connectInform()</div><div class=\"ttdoc\">Used to notify controller that it is registered on EnigmaIOT network.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a92a9cd1826a1a8aaca06c6e208928cdc\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME::configManagerExit</a></div><div class=\"ttdeci\">void configManagerExit(bool status)</div><div class=\"ttdoc\">Called when wifi manager exits config portal.</div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html\">EnigmaIOTNodeClass</a></div><div class=\"ttdoc\">Main node class. Manages communication with gateway and allows sending and receiving user data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00134\">EnigmaIOTNode.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a826124fa1f5c24d99cc8e4f49c555bee\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME::setup</a></div><div class=\"ttdeci\">void setup(EnigmaIOTNodeClass *node, void *data=NULL)</div><div class=\"ttdoc\">Initialize data structures.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTjsonController_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTjsonController_8h.html\">EnigmaIOTjsonController.h</a></div><div class=\"ttdoc\">Prototype for JSON/MSGPACK based controller node.</div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a2af1a99bb4a2d7b83125861f127279e8\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8\">CONTROLLER_CLASS_NAME::sendStartAnouncement</a></div><div class=\"ttdeci\">bool sendStartAnouncement()</div><div class=\"ttdoc\">Send a message to notify node has started running.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8h_source.html#l00081\">ds18b20Controller.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_a195ba73498234d43ed74f44eb849ff99\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99\">CONTROLLER_CLASS_NAME::sendTemperature</a></div><div class=\"ttdeci\">bool sendTemperature(float temp)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8cpp_source.html#l00035\">ds18b20Controller.cpp:35</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_ae875eb77d530db257752d87a010ec6c7\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#ae875eb77d530db257752d87a010ec6c7\">CONTROLLER_CLASS_NAME::sensors</a></div><div class=\"ttdeci\">DallasTemperature * sensors</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"ds18b20Controller_8h_source.html#l00038\">ds18b20Controller.h:38</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassCONTROLLER__CLASS__NAME_html_afad5a8415e36756b812a53bc889fcd4b\"><div class=\"ttname\"><a href=\"classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b\">CONTROLLER_CLASS_NAME::loadConfig</a></div><div class=\"ttdeci\">bool loadConfig()</div><div class=\"ttdoc\">Loads output module configuration.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTjsonController_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTjsonController.html\">EnigmaIOTjsonController</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTjsonController_8h_source.html#l00034\">EnigmaIOTjsonController.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dstrootca_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayMQTT/dstrootca.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\">EnigmaIOTGatewayMQTT</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">dstrootca.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a href=\"dstrootca_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:ac124c2449b0ec4b04fe4bc4e61632e33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dstrootca_8h.html#ac124c2449b0ec4b04fe4bc4e61632e33\">DSTROOTCA_H</a></td></tr>\n<tr class=\"separator:ac124c2449b0ec4b04fe4bc4e61632e33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"ac124c2449b0ec4b04fe4bc4e61632e33\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac124c2449b0ec4b04fe4bc4e61632e33\">&#9670;&nbsp;</a></span>DSTROOTCA_H</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define DSTROOTCA_H</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"dstrootca_8h_source.html#l00003\">3</a> of file <a class=\"el\" href=\"dstrootca_8h_source.html\">dstrootca.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dstrootca_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayMQTT/dstrootca.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\">EnigmaIOTGatewayMQTT</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">dstrootca.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"dstrootca_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;<span class=\"preprocessor\">#ifndef DSTROOTCA_H</span></div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\"><a class=\"line\" href=\"dstrootca_8h.html#ac124c2449b0ec4b04fe4bc4e61632e33\">    3</a></span>&#160;<span class=\"preprocessor\">#define DSTROOTCA_H</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160; </div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#if defined ESP32 &amp;&amp; !defined NOSSL</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#define SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160; </div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifdef SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"comment\">// Add here your server&#39;s Root CA certificate. It is not needed to keep it secret</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> DSTroot_CA[] PROGMEM = R<span class=\"stringliteral\">&quot;EOF(</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"stringliteral\">-----BEGIN CERTIFICATE-----</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"stringliteral\">MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"stringliteral\">MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"stringliteral\">DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"stringliteral\">PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"stringliteral\">Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"stringliteral\">AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"stringliteral\">rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"stringliteral\">OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"stringliteral\">xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"stringliteral\">7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"stringliteral\">aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"stringliteral\">HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"stringliteral\">SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"stringliteral\">ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"stringliteral\">AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"stringliteral\">R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"stringliteral\">JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"stringliteral\">Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"stringliteral\">-----END CERTIFICATE-----</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"stringliteral\">)EOF&quot;;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"stringliteral\"></span><span class=\"preprocessor\">#endif // SECURE_MQTT</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#endif // ESP32</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160; </div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/dynsections.js",
    "content": "/*\n @licstart  The following is the entire license notice for the JavaScript code in this file.\n\n The MIT License (MIT)\n\n Copyright (C) 1997-2020 by Dimitri van Heesch\n\n Permission is hereby granted, free of charge, to any person obtaining a copy of this software\n and associated documentation files (the \"Software\"), to deal in the Software without restriction,\n including without limitation the rights to use, copy, modify, merge, publish, distribute,\n sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all copies or\n substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n @licend  The above is the entire license notice for the JavaScript code in this file\n */\nfunction toggleVisibility(linkObj)\n{\n var base = $(linkObj).attr('id');\n var summary = $('#'+base+'-summary');\n var content = $('#'+base+'-content');\n var trigger = $('#'+base+'-trigger');\n var src=$(trigger).attr('src');\n if (content.is(':visible')===true) {\n   content.hide();\n   summary.show();\n   $(linkObj).addClass('closed').removeClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');\n } else {\n   content.show();\n   summary.hide();\n   $(linkObj).removeClass('closed').addClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');\n }\n return false;\n}\n\nfunction updateStripes()\n{\n  $('table.directory tr').\n       removeClass('even').filter(':visible:even').addClass('even');\n}\n\nfunction toggleLevel(level)\n{\n  $('table.directory tr').each(function() {\n    var l = this.id.split('_').length-1;\n    var i = $('#img'+this.id.substring(3));\n    var a = $('#arr'+this.id.substring(3));\n    if (l<level+1) {\n      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');\n      a.html('&#9660;');\n      $(this).show();\n    } else if (l==level+1) {\n      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');\n      a.html('&#9658;');\n      $(this).show();\n    } else {\n      $(this).hide();\n    }\n  });\n  updateStripes();\n}\n\nfunction toggleFolder(id)\n{\n  // the clicked row\n  var currentRow = $('#row_'+id);\n\n  // all rows after the clicked row\n  var rows = currentRow.nextAll(\"tr\");\n\n  var re = new RegExp('^row_'+id+'\\\\d+_$', \"i\"); //only one sub\n\n  // only match elements AFTER this one (can't hide elements before)\n  var childRows = rows.filter(function() { return this.id.match(re); });\n\n  // first row is visible we are HIDING\n  if (childRows.filter(':first').is(':visible')===true) {\n    // replace down arrow by right arrow for current row\n    var currentRowSpans = currentRow.find(\"span\");\n    currentRowSpans.filter(\".iconfopen\").removeClass(\"iconfopen\").addClass(\"iconfclosed\");\n    currentRowSpans.filter(\".arrow\").html('&#9658;');\n    rows.filter(\"[id^=row_\"+id+\"]\").hide(); // hide all children\n  } else { // we are SHOWING\n    // replace right arrow by down arrow for current row\n    var currentRowSpans = currentRow.find(\"span\");\n    currentRowSpans.filter(\".iconfclosed\").removeClass(\"iconfclosed\").addClass(\"iconfopen\");\n    currentRowSpans.filter(\".arrow\").html('&#9660;');\n    // replace down arrows by right arrows for child rows\n    var childRowsSpans = childRows.find(\"span\");\n    childRowsSpans.filter(\".iconfopen\").removeClass(\"iconfopen\").addClass(\"iconfclosed\");\n    childRowsSpans.filter(\".arrow\").html('&#9658;');\n    childRows.show(); //show all children\n  }\n  updateStripes();\n}\n\n\nfunction toggleInherit(id)\n{\n  var rows = $('tr.inherit.'+id);\n  var img = $('tr.inherit_header.'+id+' img');\n  var src = $(img).attr('src');\n  if (rows.filter(':first').is(':visible')===true) {\n    rows.css('display','none');\n    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');\n  } else {\n    rows.css('display','table-row'); // using show() causes jump in firefox\n    $(img).attr('src',src.substring(0,src.length-10)+'open.png');\n  }\n}\n/* @license-end */\n\n$(document).ready(function() {\n  $('.code,.codeRef').each(function() {\n    $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n    $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });\n  });\n});\n"
  },
  {
    "path": "docs/html/enigmaiot__led__flasher_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_led_flasher/enigmaiot_led_flasher.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d43fadc45274b5d05cae2a6678e1cfd4.html\">enigmaiot_led_flasher</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_led_flasher.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;Curve25519.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n<code>#include &lt;DNSServer.h&gt;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n</div>\n<p><a href=\"enigmaiot__led__flasher_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:af2e697ac60e05813d45ea2c9c9e79c25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a>&#160;&#160;&#160;LOW</td></tr>\n<tr class=\"separator:af2e697ac60e05813d45ea2c9c9e79c25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a80700bb63bd56ebabbb4728aa433fd29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>&#160;&#160;&#160;!<a class=\"el\" href=\"EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a></td></tr>\n<tr class=\"separator:a80700bb63bd56ebabbb4728aa433fd29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> ()</td></tr>\n<tr class=\"separator:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"separator:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:aa5a70ec3f08b72ccfe8365835fee927e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a> = -1</td></tr>\n<tr class=\"separator:aa5a70ec3f08b72ccfe8365835fee927e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html#l00046\">46</a> of file <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html\">enigmaiot_led_flasher.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html#l00043\">43</a> of file <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html\">enigmaiot_led_flasher.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a80700bb63bd56ebabbb4728aa433fd29\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a80700bb63bd56ebabbb4728aa433fd29\">&#9670;&nbsp;</a></span>LED_OFF</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_OFF&#160;&#160;&#160;!<a class=\"el\" href=\"EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html#l00040\">40</a> of file <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html\">enigmaiot_led_flasher.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af2e697ac60e05813d45ea2c9c9e79c25\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af2e697ac60e05813d45ea2c9c9e79c25\">&#9670;&nbsp;</a></span>LED_ON</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_ON&#160;&#160;&#160;LOW</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html#l00039\">39</a> of file <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html\">enigmaiot_led_flasher.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a940f8c4df553df52c9145ef2df107ad3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a940f8c4df553df52c9145ef2df107ad3\">&#9670;&nbsp;</a></span>connectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void connectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html#l00053\">53</a> of file <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html\">enigmaiot_led_flasher.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a23fc74fc5731518093d5fa0db24edae1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23fc74fc5731518093d5fa0db24edae1\">&#9670;&nbsp;</a></span>disconnectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void disconnectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html#l00057\">57</a> of file <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html\">enigmaiot_led_flasher.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html#l00137\">137</a> of file <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html\">enigmaiot_led_flasher.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81397ad933b5a8b902d6161f702838fc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81397ad933b5a8b902d6161f702838fc\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html#l00061\">61</a> of file <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html\">enigmaiot_led_flasher.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html#l00100\">100</a> of file <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html\">enigmaiot_led_flasher.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"aa5a70ec3f08b72ccfe8365835fee927e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa5a70ec3f08b72ccfe8365835fee927e\">&#9670;&nbsp;</a></span>RESET_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto RESET_PIN = -1</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html#l00047\">47</a> of file <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp_source.html\">enigmaiot_led_flasher.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/enigmaiot__led__flasher_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_led_flasher/enigmaiot_led_flasher.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d43fadc45274b5d05cae2a6678e1cfd4.html\">enigmaiot_led_flasher</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_led_flasher.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"enigmaiot__led__flasher_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160; </div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266HTTPClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266httpUpdate.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP32</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;AsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP8266</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;driver/adc.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;soc/soc.h&quot;</span>           <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;soc/rtc_cntl_reg.h&quot;</span>  <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &lt;Curve25519.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &lt;DNSServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">   39</a></span>&#160;<span class=\"preprocessor\">#define LED_ON LOW</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">   40</a></span>&#160;<span class=\"preprocessor\">#define LED_OFF !LED_ON</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160; </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__led__flasher_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   43</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO2 or GPIO5</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#endif // !LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160; </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   46</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__led__flasher_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">   47</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a> = -1;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160; </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;ADC_MODE (ADC_VCC);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__led__flasher_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">   53</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    Serial.println (<span class=\"stringliteral\">&quot;Connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160; </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__led__flasher_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">   57</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Unregistered. Reason: %d\\n&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160; </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__led__flasher_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">   61</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;    <span class=\"keywordtype\">char</span> macstr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    String commandStr;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    uint8_t tempBuffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac, macstr);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    Serial.println ();</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Data from %s --&gt; %s\\n&quot;</span>, macstr, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, length));</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    <span class=\"keywordflow\">if</span> (command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">nodeMessageType_t::DOWNSTREAM_DATA_GET</a>)</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        commandStr = <span class=\"stringliteral\">&quot;GET&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">nodeMessageType_t::DOWNSTREAM_DATA_SET</a>)</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        commandStr = <span class=\"stringliteral\">&quot;SET&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160; </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Command %s\\n&quot;</span>, commandStr.c_str ());</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Data: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, length));</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Encoding: 0x%02X\\n&quot;</span>, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160; </div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    CayenneLPP lpp (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    DynamicJsonDocument doc (1000);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    JsonArray root;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    memcpy (tempBuffer, buffer, length);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    <span class=\"keywordflow\">switch</span> (payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>:</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        root = doc.createNestedArray ();</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        lpp.decode (tempBuffer, length, root);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        serializeJsonPretty (doc, Serial);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>:</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        deserializeMsgPack (doc, tempBuffer, length);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        serializeJsonPretty (doc, Serial);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Non supported encoding; %d&quot;</span>, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160; </div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__led__flasher_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  100</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    Serial.begin (115200); Serial.println (); Serial.println ();</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    <span class=\"comment\">// Turn-off the &#39;brownout detector&#39; to avoid random restarts during wake up,</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    <span class=\"comment\">// normally due to bad quality regulator on board</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160; </div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    <span class=\"comment\">//EnigmaIOTNode.setLed (BLUE_LED);</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    pinMode (<a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>, OUTPUT);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    digitalWrite (<a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>); <span class=\"comment\">// Turn off LED</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a> ();</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">enableBroadcast</a> ();</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>, NULL, NULL, <span class=\"keyword\">true</span>, <span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160; </div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    uint8_t macAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <span class=\"keywordflow\">if</span> (wifi_get_macaddr (STATION_IF, macAddress))</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <span class=\"keywordflow\">if</span> ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (macAddress);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"comment\">//char macStr[ENIGMAIOT_ADDR_LEN * 3];</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node address set to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (macAddress));</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160; </div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__led__flasher_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  137</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> ();</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160; </div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> time_t PERIOD = 3000;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> time_t FLASH_DURATION = 50;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    <span class=\"keyword\">static</span> time_t clock;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160; </div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    clock = <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">clock</a> () % (PERIOD);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160; </div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">hasClockSync</a> () &amp;&amp; <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf\">isRegistered</a> ()) {</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"keywordflow\">if</span> (clock &gt;= 0 &amp;&amp; clock &lt; FLASH_DURATION) {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;            digitalWrite (<a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a>); <span class=\"comment\">// Turn on LED</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;            digitalWrite (<a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>, <a class=\"code\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a>); <span class=\"comment\">// Turn on LED</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    CayenneLPP msg (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160; </div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;    <span class=\"keyword\">static</span> time_t lastSensorData;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> time_t SENSOR_PERIOD = 10000;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;    <span class=\"keywordflow\">if</span> (millis () - lastSensorData &gt; SENSOR_PERIOD) {</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        lastSensorData = millis ();</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160; </div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        <span class=\"comment\">// Read sensor data</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        msg.addAnalogInput (0, (<span class=\"keywordtype\">float</span>)(ESP.getVcc ()) / 1000);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot;Vcc: %f\\n&quot;</span>, (<span class=\"keywordtype\">float</span>)(ESP.getVcc ()) / 1000);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        msg.addAnalogInput (0, (<span class=\"keywordtype\">float</span>)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot;Vcc: %f\\n&quot;</span>, (<span class=\"keywordtype\">float</span>)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        msg.addTemperature (1, 20.34);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        <span class=\"comment\">// Read sensor data</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160; </div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot;Trying to send: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (msg.getBuffer (), msg.getSize ()));</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160; </div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (msg.getBuffer (), msg.getSize ())) {</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;            Serial.println (<span class=\"stringliteral\">&quot;---- Error sending data&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;            Serial.println (<span class=\"stringliteral\">&quot;---- Data sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160; </div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_aa5a70ec3f08b72ccfe8365835fee927e\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a></div><div class=\"ttdeci\">constexpr auto RESET_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00047\">enigmaiot_led_flasher.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00053\">enigmaiot_led_flasher.cpp:53</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a1c015860a4a1650d3e2653212d13179e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">EnigmaIOTNodeClass::hasClockSync</a></div><div class=\"ttdeci\">bool hasClockSync()</div><div class=\"ttdoc\">Checks if internal clock is synchronized to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01464\">EnigmaIOTNode.cpp:1464</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afe087ce005069779bf699e39695397f4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass::enableClockSync</a></div><div class=\"ttdeci\">void enableClockSync(bool clockSync=true)</div><div class=\"ttdoc\">Controls clock synchronization function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00584\">EnigmaIOTNode.h:584</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00046\">enigmaiot_led_flasher.cpp:46</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a8df0346a1f3e282d6875b04a9fe4ec8f\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a></div><div class=\"ttdeci\">static const int MAX_DATA_PAYLOAD_SIZE</div><div class=\"ttdoc\">Maximun payload size for data packets.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00048\">EnigmaIoTconfigAdvanced.h:48</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00057\">enigmaiot_led_flasher.cpp:57</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_a80700bb63bd56ebabbb4728aa433fd29\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">LED_OFF</a></div><div class=\"ttdeci\">#define LED_OFF</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00040\">enigmaiot_led_flasher.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00044\">EnigmaIOTGateway.h:44</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00042\">EnigmaIOTGateway.h:42</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aafdd17efe90bfc2dd9af758633034f82\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">EnigmaIOTNodeClass::enableBroadcast</a></div><div class=\"ttdeci\">void enableBroadcast(bool broadcast=true)</div><div class=\"ttdoc\">Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00566\">EnigmaIOTNode.h:566</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a43abab3a73d46ff99f33c8596512dcaf\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf\">EnigmaIOTNodeClass::isRegistered</a></div><div class=\"ttdeci\">bool isRegistered()</div><div class=\"ttdoc\">Checks if node is registered.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00770\">EnigmaIOTNode.h:770</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00061\">enigmaiot_led_flasher.cpp:61</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a6830ae2f6b8dafa588f5baa1fe4e8a99\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">EnigmaIOTNodeClass::clock</a></div><div class=\"ttdeci\">int64_t clock()</div><div class=\"ttdoc\">Gets current clock counter. millis() + offset.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01455\">EnigmaIOTNode.cpp:1455</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00137\">enigmaiot_led_flasher.cpp:137</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00100\">enigmaiot_led_flasher.cpp:100</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__led__flasher_8cpp_html_af2e697ac60e05813d45ea2c9c9e79c25\"><div class=\"ttname\"><a href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">LED_ON</a></div><div class=\"ttdeci\">#define LED_ON</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__led__flasher_8cpp_source.html#l00039\">enigmaiot_led_flasher.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></div><div class=\"ttdeci\">@ CAYENNELPP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00063\">EnigmaIOTGateway.h:63</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/enigmaiot__node_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node/enigmaiot_node.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_ddb1aa94a6973c510045d1a2166b2b36.html\">enigmaiot_node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_node.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n</div>\n<p><a href=\"enigmaiot__node_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;2</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> ()</td></tr>\n<tr class=\"separator:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"separator:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:aa5a70ec3f08b72ccfe8365835fee927e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a> = -1</td></tr>\n<tr class=\"separator:aa5a70ec3f08b72ccfe8365835fee927e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html#l00032\">32</a> of file <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html\">enigmaiot_node.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html#l00029\">29</a> of file <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html\">enigmaiot_node.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a940f8c4df553df52c9145ef2df107ad3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a940f8c4df553df52c9145ef2df107ad3\">&#9670;&nbsp;</a></span>connectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void connectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html#l00039\">39</a> of file <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html\">enigmaiot_node.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a23fc74fc5731518093d5fa0db24edae1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23fc74fc5731518093d5fa0db24edae1\">&#9670;&nbsp;</a></span>disconnectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void disconnectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html#l00043\">43</a> of file <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html\">enigmaiot_node.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html#l00155\">155</a> of file <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html\">enigmaiot_node.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81397ad933b5a8b902d6161f702838fc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81397ad933b5a8b902d6161f702838fc\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html#l00047\">47</a> of file <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html\">enigmaiot_node.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html#l00086\">86</a> of file <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html\">enigmaiot_node.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"aa5a70ec3f08b72ccfe8365835fee927e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa5a70ec3f08b72ccfe8365835fee927e\">&#9670;&nbsp;</a></span>RESET_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto RESET_PIN = -1</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html#l00033\">33</a> of file <a class=\"el\" href=\"enigmaiot__node_8cpp_source.html\">enigmaiot_node.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/enigmaiot__node_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node/enigmaiot_node.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_ddb1aa94a6973c510045d1a2166b2b36.html\">enigmaiot_node</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_node.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"enigmaiot__node_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160; </div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;driver/adc.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;soc/soc.h&quot;</span>           <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;soc/rtc_cntl_reg.h&quot;</span>  <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160; </div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   29</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO2 or GPIO5</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif // !LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   32</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">   33</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"enigmaiot__node_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a> = -1;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;ADC_MODE (ADC_VCC);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">   39</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    Serial.println (<span class=\"stringliteral\">&quot;Registered&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">   43</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Unregistered. Reason: %d\\n&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">   47</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    <span class=\"keywordtype\">char</span> macstr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    String commandStr;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    uint8_t tempBuffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac, macstr);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    Serial.println ();</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Data from %s\\n&quot;</span>, macstr);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    <span class=\"keywordflow\">if</span> (command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">nodeMessageType_t::DOWNSTREAM_DATA_GET</a>)</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        commandStr = <span class=\"stringliteral\">&quot;GET&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">nodeMessageType_t::DOWNSTREAM_DATA_SET</a>)</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        commandStr = <span class=\"stringliteral\">&quot;SET&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Command %s\\n&quot;</span>, commandStr.c_str ());</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Data: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, length));</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Encoding: 0x%02X\\n&quot;</span>, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160; </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    CayenneLPP lpp (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    DynamicJsonDocument doc (1000);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    JsonArray root;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    memcpy (tempBuffer, buffer, length);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    <span class=\"keywordflow\">switch</span> (payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>:</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        root = doc.createNestedArray ();</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        lpp.decode (tempBuffer, length, root);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        serializeJsonPretty (doc, Serial);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>:</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        deserializeMsgPack (doc, tempBuffer, length);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        serializeJsonPretty (doc, Serial);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Payload encoding %d is not (yet) supported&quot;</span>, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">   86</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160; </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    Serial.begin (115200); Serial.println (); Serial.println ();</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    time_t start = millis ();</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    <span class=\"comment\">// Turn-off the &#39;brownout detector&#39; to avoid random restarts during wake up,</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    <span class=\"comment\">// normally due to bad quality regulator on board</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160; </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160; </div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a> (<a class=\"code\" href=\"enigmaiot__node_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (<a class=\"code\" href=\"enigmaiot__node_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a>);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"enigmaiot__node_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"enigmaiot__node_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"enigmaiot__node_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160; </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160; </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    uint8_t macAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    <span class=\"keywordflow\">if</span> (wifi_get_macaddr (STATION_IF, macAddress))</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    <span class=\"keywordflow\">if</span> ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (macAddress);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"comment\">//char macStr[ENIGMAIOT_ADDR_LEN * 3];</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node address set to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (macAddress));</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160; </div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <span class=\"comment\">// Put here your code to read sensor and compose buffer</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    CayenneLPP msg (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160; </div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    msg.addAnalogInput (0, (<span class=\"keywordtype\">float</span>)(ESP.getVcc ()) / 1000);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    msg.addAnalogInput (0, (<span class=\"keywordtype\">float</span>)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    msg.addTemperature (1, 20.34);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    msg.addDigitalInput (2, 123);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    msg.addBarometricPressure (3, 1007.25);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    msg.addCurrent (4, 2.43);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160; </div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Vcc: %f\\n&quot;</span>, (<span class=\"keywordtype\">float</span>)(ESP.getVcc ()) / 1000);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Vcc: %f\\n&quot;</span>, (<span class=\"keywordtype\">float</span>)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"comment\">// End of user code</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160; </div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Trying to send: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (msg.getBuffer (), msg.getSize ()));</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160; </div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    <span class=\"comment\">// Send buffer data</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (msg.getBuffer (), msg.getSize ())) {</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        Serial.println (<span class=\"stringliteral\">&quot;---- Error sending data&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        Serial.println (<span class=\"stringliteral\">&quot;---- Data sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Total time: %lu ms\\n&quot;</span>, millis () - start);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160; </div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    <span class=\"comment\">// Go to sleep</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a> ();</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160; </div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  155</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160; </div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> ();</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160; </div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a8df0346a1f3e282d6875b04a9fe4ec8f\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a></div><div class=\"ttdeci\">static const int MAX_DATA_PAYLOAD_SIZE</div><div class=\"ttdoc\">Maximun payload size for data packets.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00048\">EnigmaIoTconfigAdvanced.h:48</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"enigmaiot__node_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node_8cpp_source.html#l00043\">enigmaiot_node.cpp:43</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00044\">EnigmaIOTGateway.h:44</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00042\">EnigmaIOTGateway.h:42</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a81ab5be7b67c28948ea5de40e5d3c360\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a></div><div class=\"ttdeci\">void sleep()</div><div class=\"ttdoc\">Requests transition to sleep mode (low energy state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01564\">EnigmaIOTNode.cpp:1564</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"enigmaiot__node_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node_8cpp_source.html#l00155\">enigmaiot_node.cpp:155</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"enigmaiot__node_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node_8cpp_source.html#l00039\">enigmaiot_node.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a187f3eb82f9948d5b53bd7eb480f1dd4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a></div><div class=\"ttdeci\">void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00089\">EnigmaIOTNode.cpp:89</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"enigmaiot__node_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node_8cpp_source.html#l00032\">enigmaiot_node.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node_8cpp_html_aa5a70ec3f08b72ccfe8365835fee927e\"><div class=\"ttname\"><a href=\"enigmaiot__node_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a></div><div class=\"ttdeci\">constexpr auto RESET_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node_8cpp_source.html#l00033\">enigmaiot_node.cpp:33</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></div><div class=\"ttdeci\">@ CAYENNELPP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00063\">EnigmaIOTGateway.h:63</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"enigmaiot__node_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node_8cpp_source.html#l00047\">enigmaiot_node.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"enigmaiot__node_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node_8cpp_source.html#l00086\">enigmaiot_node.cpp:86</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/enigmaiot__node__msgpack_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node_msgpack/enigmaiot_node_msgpack.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_74730d4cfa9be35e947daeb13bf15f56.html\">enigmaiot_node_msgpack</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_node_msgpack.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;Curve25519.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n<code>#include &lt;DNSServer.h&gt;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n</div>\n<p><a href=\"enigmaiot__node__msgpack_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;5</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> ()</td></tr>\n<tr class=\"separator:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15c150763c9e39ec5e7b94a5fddcb95f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a15c150763c9e39ec5e7b94a5fddcb95f\">processRxData</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> encoding)</td></tr>\n<tr class=\"separator:a15c150763c9e39ec5e7b94a5fddcb95f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:aa5a70ec3f08b72ccfe8365835fee927e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a> = -1</td></tr>\n<tr class=\"separator:aa5a70ec3f08b72ccfe8365835fee927e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html#l00047\">47</a> of file <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html\">enigmaiot_node_msgpack.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;5</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html#l00043\">43</a> of file <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html\">enigmaiot_node_msgpack.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a940f8c4df553df52c9145ef2df107ad3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a940f8c4df553df52c9145ef2df107ad3\">&#9670;&nbsp;</a></span>connectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void connectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html#l00054\">54</a> of file <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html\">enigmaiot_node_msgpack.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a23fc74fc5731518093d5fa0db24edae1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23fc74fc5731518093d5fa0db24edae1\">&#9670;&nbsp;</a></span>disconnectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void disconnectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html#l00058\">58</a> of file <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html\">enigmaiot_node_msgpack.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html#l00176\">176</a> of file <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html\">enigmaiot_node_msgpack.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a15c150763c9e39ec5e7b94a5fddcb95f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a15c150763c9e39ec5e7b94a5fddcb95f\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>encoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html#l00062\">62</a> of file <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html\">enigmaiot_node_msgpack.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html#l00101\">101</a> of file <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html\">enigmaiot_node_msgpack.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"aa5a70ec3f08b72ccfe8365835fee927e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa5a70ec3f08b72ccfe8365835fee927e\">&#9670;&nbsp;</a></span>RESET_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto RESET_PIN = -1</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html#l00048\">48</a> of file <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp_source.html\">enigmaiot_node_msgpack.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/enigmaiot__node__msgpack_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node_msgpack/enigmaiot_node_msgpack.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_74730d4cfa9be35e947daeb13bf15f56.html\">enigmaiot_node_msgpack</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_node_msgpack.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"enigmaiot__node__msgpack_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160; </div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266HTTPClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266httpUpdate.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP32</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;AsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP8266</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;SPIFFS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;driver/adc.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;soc/soc.h&quot;</span>           <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;soc/rtc_cntl_reg.h&quot;</span>  <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &lt;Curve25519.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &lt;DNSServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 2 // ESP8266 boards normally have a LED in GPIO2</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__msgpack_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   43</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 5 // ESP32 boards normally have a LED in GPIO2 or GPIO5</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#endif // !LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__msgpack_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   47</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__msgpack_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">   48</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a> = -1;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;ADC_MODE (ADC_VCC);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__msgpack_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">   54</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    Serial.println (<span class=\"stringliteral\">&quot;Registered&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__msgpack_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">   58</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Unregistered. Reason: %d\\n&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__msgpack_8cpp.html#a15c150763c9e39ec5e7b94a5fddcb95f\">   62</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#a15c150763c9e39ec5e7b94a5fddcb95f\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> encoding) {</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    <span class=\"keywordtype\">char</span> macstr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    String commandStr;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;    uint8_t tempBuffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac, macstr);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    Serial.println ();</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Data from %s\\n&quot;</span>, macstr);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;    <span class=\"keywordflow\">if</span> (command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">nodeMessageType_t::DOWNSTREAM_DATA_GET</a>)</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        commandStr = <span class=\"stringliteral\">&quot;GET&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">nodeMessageType_t::DOWNSTREAM_DATA_SET</a>)</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        commandStr = <span class=\"stringliteral\">&quot;SET&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Command %s\\n&quot;</span>, commandStr.c_str ());</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Data: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, length));</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Encoding: 0x%02X\\n&quot;</span>, encoding);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160; </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    CayenneLPP lpp (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    DynamicJsonDocument doc (1000);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    JsonArray root;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    memcpy (tempBuffer, buffer, length);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160; </div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    <span class=\"keywordflow\">switch</span> (encoding) {</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>:</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        root = doc.createNestedArray ();</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        lpp.decode (tempBuffer, length, root);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        serializeJsonPretty (doc, Serial);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>:</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        deserializeMsgPack (doc, tempBuffer, length);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        serializeJsonPretty (doc, Serial);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Non supported encoding; %d&quot;</span>, encoding);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__msgpack_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  101</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160; </div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    Serial.begin (115200); Serial.println (); Serial.println ();</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;    time_t start = millis ();</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160; </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    <span class=\"comment\">// Turn-off the &#39;brownout detector&#39; to avoid random restarts during wake up,</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    <span class=\"comment\">// normally due to bad quality regulator on board</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160; </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a> (<a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (<a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a>);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#a15c150763c9e39ec5e7b94a5fddcb95f\">processRxData</a>);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160; </div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160; </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    uint8_t macAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <span class=\"keywordflow\">if</span> (wifi_get_macaddr (STATION_IF, macAddress))</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <span class=\"keywordflow\">if</span> ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (macAddress);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keywordtype\">char</span> macStr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Node address set to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (macAddress, macStr));</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160; </div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    <span class=\"comment\">// Put here your code to read sensor and compose buffer</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> capacity = JSON_OBJECT_SIZE (5);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160; </div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    json[<span class=\"stringliteral\">&quot;V&quot;</span>] = (float)(ESP.getVcc ()) / 1000;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    json[<span class=\"stringliteral\">&quot;V&quot;</span>] = (float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    json[<span class=\"stringliteral\">&quot;tem&quot;</span>] = 203;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    json[<span class=\"stringliteral\">&quot;din&quot;</span>] = 123;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    json[<span class=\"stringliteral\">&quot;pres&quot;</span>] = 1007;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    json[<span class=\"stringliteral\">&quot;curr&quot;</span>] = 2.43;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160; </div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    <span class=\"keywordtype\">int</span> len = measureMsgPack (json) + 1;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    uint8_t* buffer = (uint8_t*)malloc (len);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;    len = serializeMsgPack (json, (<span class=\"keywordtype\">char</span>*)buffer, len);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Vcc: %f\\n&quot;</span>, (<span class=\"keywordtype\">float</span>)(ESP.getVcc ()) / 1000);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Vcc: %f\\n&quot;</span>, (<span class=\"keywordtype\">float</span>)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Message Len %d\\n&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    <span class=\"comment\">// End of user code</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160; </div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Trying to send: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, len));</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160; </div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    <span class=\"comment\">// Send buffer data</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;    <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (buffer, len, <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>)) {</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        Serial.println (<span class=\"stringliteral\">&quot;---- Error sending data&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        Serial.println (<span class=\"stringliteral\">&quot;---- Data sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Total time: %lu ms\\n&quot;</span>, millis () - start);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160; </div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    free (buffer);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160; </div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    <span class=\"comment\">// Go to sleep</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">sleep</a> ();</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160; </div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__msgpack_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  176</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__msgpack_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160; </div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> ();</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160; </div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aenigmaiot__node__msgpack_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"enigmaiot__node__msgpack_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__msgpack_8cpp_source.html#l00101\">enigmaiot_node_msgpack.cpp:101</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a8df0346a1f3e282d6875b04a9fe4ec8f\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a></div><div class=\"ttdeci\">static const int MAX_DATA_PAYLOAD_SIZE</div><div class=\"ttdoc\">Maximun payload size for data packets.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00048\">EnigmaIoTconfigAdvanced.h:48</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__msgpack_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"enigmaiot__node__msgpack_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__msgpack_8cpp_source.html#l00047\">enigmaiot_node_msgpack.cpp:47</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__msgpack_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"enigmaiot__node__msgpack_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__msgpack_8cpp_source.html#l00176\">enigmaiot_node_msgpack.cpp:176</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__msgpack_8cpp_html_a15c150763c9e39ec5e7b94a5fddcb95f\"><div class=\"ttname\"><a href=\"enigmaiot__node__msgpack_8cpp.html#a15c150763c9e39ec5e7b94a5fddcb95f\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t encoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__msgpack_8cpp_source.html#l00062\">enigmaiot_node_msgpack.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__msgpack_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"enigmaiot__node__msgpack_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__msgpack_8cpp_source.html#l00054\">enigmaiot_node_msgpack.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00044\">EnigmaIOTGateway.h:44</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00042\">EnigmaIOTGateway.h:42</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a81ab5be7b67c28948ea5de40e5d3c360\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass::sleep</a></div><div class=\"ttdeci\">void sleep()</div><div class=\"ttdoc\">Requests transition to sleep mode (low energy state)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01564\">EnigmaIOTNode.cpp:1564</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__msgpack_8cpp_html_aa5a70ec3f08b72ccfe8365835fee927e\"><div class=\"ttname\"><a href=\"enigmaiot__node__msgpack_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a></div><div class=\"ttdeci\">constexpr auto RESET_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__msgpack_8cpp_source.html#l00048\">enigmaiot_node_msgpack.cpp:48</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a187f3eb82f9948d5b53bd7eb480f1dd4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a></div><div class=\"ttdeci\">void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00089\">EnigmaIOTNode.cpp:89</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__msgpack_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"enigmaiot__node__msgpack_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__msgpack_8cpp_source.html#l00058\">enigmaiot_node_msgpack.cpp:58</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></div><div class=\"ttdeci\">@ CAYENNELPP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00063\">EnigmaIOTGateway.h:63</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/enigmaiot__node__nonsleepy_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node_nonsleepy/enigmaiot_node_nonsleepy.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6f51a142868163a30ea6bee5ec2f0159.html\">enigmaiot_node_nonsleepy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_node_nonsleepy.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&gt;</code><br />\n<code>#include &lt;CayenneLPP.h&gt;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;Curve25519.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWebServer.h&gt;</code><br />\n<code>#include &lt;ESPAsyncWiFiManager.h&gt;</code><br />\n<code>#include &lt;DNSServer.h&gt;</code><br />\n<code>#include &lt;FS.h&gt;</code><br />\n</div>\n<p><a href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a>&#160;&#160;&#160;5</td></tr>\n<tr class=\"separator:a450a7c16ead7b3c7b882536b08f30a00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td></tr>\n<tr class=\"separator:a41c7fcbe209a1c236fd1b8e35bd8b55a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> ()</td></tr>\n<tr class=\"separator:a940f8c4df553df52c9145ef2df107ad3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason)</td></tr>\n<tr class=\"separator:a23fc74fc5731518093d5fa0db24edae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (const uint8_t *mac, const uint8_t *buffer, uint8_t length, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding)</td></tr>\n<tr class=\"separator:a81397ad933b5a8b902d6161f702838fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> ()</td></tr>\n<tr class=\"separator:a4fc01d736fe50cf5b977f755b675f11d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af0c88ea180e73ee60842341790d31b44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#af0c88ea180e73ee60842341790d31b44\">showTime</a> ()</td></tr>\n<tr class=\"separator:af0c88ea180e73ee60842341790d31b44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> ()</td></tr>\n<tr class=\"separator:afe461d27b9c48d5921c00d521181f12f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:aa5a70ec3f08b72ccfe8365835fee927e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a> = -1</td></tr>\n<tr class=\"separator:aa5a70ec3f08b72ccfe8365835fee927e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"a41c7fcbe209a1c236fd1b8e35bd8b55a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a41c7fcbe209a1c236fd1b8e35bd8b55a\">&#9670;&nbsp;</a></span>BLUE_LED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define BLUE_LED&#160;&#160;&#160;<a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">LED_BUILTIN</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00050\">50</a> of file <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">enigmaiot_node_nonsleepy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a450a7c16ead7b3c7b882536b08f30a00\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a450a7c16ead7b3c7b882536b08f30a00\">&#9670;&nbsp;</a></span>LED_BUILTIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define LED_BUILTIN&#160;&#160;&#160;5</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00046\">46</a> of file <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">enigmaiot_node_nonsleepy.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a940f8c4df553df52c9145ef2df107ad3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a940f8c4df553df52c9145ef2df107ad3\">&#9670;&nbsp;</a></span>connectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void connectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00057\">57</a> of file <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">enigmaiot_node_nonsleepy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a23fc74fc5731518093d5fa0db24edae1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a23fc74fc5731518093d5fa0db24edae1\">&#9670;&nbsp;</a></span>disconnectEventHandler()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void disconnectEventHandler </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a>&#160;</td>\n          <td class=\"paramname\"><em>reason</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00061\">61</a> of file <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">enigmaiot_node_nonsleepy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"afe461d27b9c48d5921c00d521181f12f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afe461d27b9c48d5921c00d521181f12f\">&#9670;&nbsp;</a></span>loop()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void loop </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00176\">176</a> of file <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">enigmaiot_node_nonsleepy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a81397ad933b5a8b902d6161f702838fc\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81397ad933b5a8b902d6161f702838fc\">&#9670;&nbsp;</a></span>processRxData()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void processRxData </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a>&#160;</td>\n          <td class=\"paramname\"><em>command</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a>&#160;</td>\n          <td class=\"paramname\"><em>payloadEncoding</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00065\">65</a> of file <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">enigmaiot_node_nonsleepy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4fc01d736fe50cf5b977f755b675f11d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4fc01d736fe50cf5b977f755b675f11d\">&#9670;&nbsp;</a></span>setup()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void setup </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00112\">112</a> of file <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">enigmaiot_node_nonsleepy.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"af0c88ea180e73ee60842341790d31b44\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af0c88ea180e73ee60842341790d31b44\">&#9670;&nbsp;</a></span>showTime()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void showTime </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00148\">148</a> of file <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">enigmaiot_node_nonsleepy.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"aa5a70ec3f08b72ccfe8365835fee927e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa5a70ec3f08b72ccfe8365835fee927e\">&#9670;&nbsp;</a></span>RESET_PIN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto RESET_PIN = -1</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00051\">51</a> of file <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp_source.html\">enigmaiot_node_nonsleepy.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/enigmaiot__node__nonsleepy_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node_nonsleepy/enigmaiot_node_nonsleepy.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\">examples</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6f51a142868163a30ea6bee5ec2f0159.html\">enigmaiot_node_nonsleepy</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">enigmaiot_node_nonsleepy.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"enigmaiot__node__nonsleepy_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#if !defined ESP8266 &amp;&amp; !defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#error Node only supports ESP8266 or ESP32 platform</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160; </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;CayenneLPP.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266HTTPClient.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266httpUpdate.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP32</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;Hash.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &lt;AsyncTCP.h&gt;</span> <span class=\"comment\">// Comment to compile for ESP8266</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &lt;Update.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &lt;driver/adc.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;esp_wifi.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;soc/soc.h&quot;</span>           <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &quot;soc/rtc_cntl_reg.h&quot;</span>  <span class=\"comment\">// Disable brownout problems</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &lt;Curve25519.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWebServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &lt;ESPAsyncWiFiManager.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &lt;DNSServer.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &lt;FS.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160; </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#ifndef LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 2 // ESP8266 boards normally have a LED in GPIO2</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">   46</a></span>&#160;<span class=\"preprocessor\">#define LED_BUILTIN 5 // ESP32 boards normally have a LED in GPIO2 or GPIO5</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#endif // !LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">   50</a></span>&#160;<span class=\"preprocessor\">#define BLUE_LED LED_BUILTIN</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__nonsleepy_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">   51</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a> = -1;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;ADC_MODE (ADC_VCC);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160; </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">   57</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a> () {</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    Serial.println (<span class=\"stringliteral\">&quot;Connected&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160; </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">   61</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a> (<a class=\"code\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a> reason) {</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Unregistered. Reason: %d\\n&quot;</span>, reason);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160; </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">   65</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keyword\">const</span> uint8_t* buffer, uint8_t length, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType_t</a> command, <a class=\"code\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a> payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    <span class=\"keywordtype\">char</span> macstr[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    String commandStr;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;    uint8_t tempBuffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>];</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    <span class=\"keywordtype\">bool</span> broadcast = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;    uint8_t _command = command;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    <span class=\"keywordflow\">if</span> (_command &amp; 0x80)</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        broadcast = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160; </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    _command = (_command &amp; 0x7F);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (mac, macstr);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    Serial.println ();</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Data from %s --&gt; %s\\n&quot;</span>, macstr, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, length));</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    <span class=\"keywordflow\">if</span> (_command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">nodeMessageType_t::DOWNSTREAM_DATA_GET</a>)</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        commandStr = <span class=\"stringliteral\">&quot;GET&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (_command == <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">nodeMessageType_t::DOWNSTREAM_DATA_SET</a>)</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        commandStr = <span class=\"stringliteral\">&quot;SET&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    <span class=\"keywordflow\">else</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keywordflow\">return</span>;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160; </div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;%s Command %s\\n&quot;</span>, broadcast ? <span class=\"stringliteral\">&quot;Broadcast&quot;</span> : <span class=\"stringliteral\">&quot;Unicast&quot;</span>, commandStr.c_str ());</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Data: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, length));</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    Serial.printf (<span class=\"stringliteral\">&quot;Encoding: 0x%02X\\n&quot;</span>, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    CayenneLPP lpp (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a>);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    DynamicJsonDocument doc (1000);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    JsonArray root;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    memcpy (tempBuffer, buffer, length);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    <span class=\"keywordflow\">switch</span> (payloadEncoding) {</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a>:</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        root = doc.createNestedArray ();</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        lpp.decode (tempBuffer, length, root);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        serializeJsonPretty (doc, Serial);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a>:</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        deserializeMsgPack (doc, tempBuffer, length);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        serializeJsonPretty (doc, Serial);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        Serial.println ();</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keywordflow\">break</span>;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Payload encoding %d is not (yet) supported&quot;</span>, payloadEncoding);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160; </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">  112</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a> () {</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160; </div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    Serial.begin (115200); Serial.println (); Serial.println ();</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160; </div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"comment\">// Turn-off the &#39;brownout detector&#39; to avoid random restarts during wake up,</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <span class=\"comment\">// normally due to bad quality regulator on board</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160; </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">setLed</a> (<a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a>);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <span class=\"comment\">//pinMode (BLUE_LED, OUTPUT);</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <span class=\"comment\">//digitalWrite (BLUE_LED, HIGH); // Turn on LED</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">setResetPin</a> (<a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a>);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">onConnected</a> (<a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">onDisconnected</a> (<a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a>);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">onDataRx</a> (<a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a>);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">enableClockSync</a> ();</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">enableBroadcast</a> ();</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160; </div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">begin</a> (&amp;<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>, NULL, NULL, <span class=\"keyword\">true</span>, <span class=\"keyword\">false</span>);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160; </div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    uint8_t macAddress[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    <span class=\"keywordflow\">if</span> (wifi_get_macaddr (STATION_IF, macAddress))</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    <span class=\"keywordflow\">if</span> ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    {</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">setNodeAddress</a> (macAddress);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address set to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (macAddress));</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Node address error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160; </div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__nonsleepy_8cpp.html#af0c88ea180e73ee60842341790d31b44\">  148</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#af0c88ea180e73ee60842341790d31b44\">showTime</a> () {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    <span class=\"comment\">//const int time_freq = 10000;</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160; </div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">hasClockSync</a> ()) {</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        <span class=\"comment\">//static time_t displayTime;</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        tm timeinfo;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160; </div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        <span class=\"comment\">//displayTime = millis ();</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"comment\">//time_t local_time_ms = EnigmaIOTNode.clock ();</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"comment\">//local_time_ms /= 1000;</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        time_t local_time = <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">unixtime</a> ();</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        localtime_r (&amp;local_time, &amp;timeinfo);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        <span class=\"comment\">//Serial.printf (&quot;Timestamp ms: %lld\\n&quot;, local_time_ms);</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        <span class=\"comment\">//Serial.printf (&quot;Timestamp sec: %ld\\n&quot;, local_time);</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot;%02d/%02d/%04d %02d:%02d:%02d\\n&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                       timeinfo.tm_mday,</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                       timeinfo.tm_mon + 1,</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                       timeinfo.tm_year + 1900,</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;                       timeinfo.tm_hour,</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                       timeinfo.tm_min,</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                       timeinfo.tm_sec);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot;Time not sync&#39;ed\\n&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160; </div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160; </div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\"><a class=\"line\" href=\"enigmaiot__node__nonsleepy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">  176</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a> () {</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160; </div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    <a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">handle</a> ();</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160; </div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;    CayenneLPP msg (20);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160; </div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    <span class=\"keyword\">static</span> time_t lastSensorData;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> time_t SENSOR_PERIOD = 10000;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;    <span class=\"keywordflow\">if</span> (millis () - lastSensorData &gt; SENSOR_PERIOD) {</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        lastSensorData = millis ();</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <a class=\"code\" href=\"enigmaiot__node__nonsleepy_8cpp.html#af0c88ea180e73ee60842341790d31b44\">showTime</a> ();</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"comment\">// Read sensor data</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        msg.addAnalogInput (0, (<span class=\"keywordtype\">float</span>)(ESP.getVcc ()) / 1000);</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot;Vcc: %f\\n&quot;</span>, (<span class=\"keywordtype\">float</span>)(ESP.getVcc ()) / 1000);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        msg.addAnalogInput (0, (<span class=\"keywordtype\">float</span>)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot;Vcc: %f V\\n&quot;</span>, (<span class=\"keywordtype\">float</span>)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        msg.addTemperature (1, 20.34);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        <span class=\"comment\">// Read sensor data</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160; </div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        Serial.printf (<span class=\"stringliteral\">&quot;Trying to send: %s\\n&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (msg.getBuffer (), msg.getSize ()));</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160; </div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a>.<a class=\"code\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">sendData</a> (msg.getBuffer (), msg.getSize ())) {</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;            Serial.println (<span class=\"stringliteral\">&quot;---- Error sending data&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;            Serial.println (<span class=\"stringliteral\">&quot;---- Data sent&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160; </div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_ab35d557fff42f0a565ee2cae63d86140\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">EnigmaIOTNodeClass::unixtime</a></div><div class=\"ttdeci\">time_t unixtime()</div><div class=\"ttdoc\">Gets current time in seconds from 1970, if time is synchronized.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01460\">EnigmaIOTNode.cpp:1460</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a1c015860a4a1650d3e2653212d13179e\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">EnigmaIOTNodeClass::hasClockSync</a></div><div class=\"ttdeci\">bool hasClockSync()</div><div class=\"ttdoc\">Checks if internal clock is synchronized to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01464\">EnigmaIOTNode.cpp:1464</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_afe087ce005069779bf699e39695397f4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass::enableClockSync</a></div><div class=\"ttdeci\">void enableClockSync(bool clockSync=true)</div><div class=\"ttdoc\">Controls clock synchronization function.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00584\">EnigmaIOTNode.h:584</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a040804a4fb880b7e7dfe5c489f7bdf7f\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">nodeMessageType</a></div><div class=\"ttdeci\">nodeMessageType</div><div class=\"ttdoc\">Message code definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00035\">EnigmaIOTNode.h:35</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a8df0346a1f3e282d6875b04a9fe4ec8f\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">MAX_DATA_PAYLOAD_SIZE</a></div><div class=\"ttdeci\">static const int MAX_DATA_PAYLOAD_SIZE</div><div class=\"ttdoc\">Maximun payload size for data packets.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00048\">EnigmaIoTconfigAdvanced.h:48</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a50b37ec711dc25df93a1aba827d59263\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass::setResetPin</a></div><div class=\"ttdeci\">void setResetPin(int pin)</div><div class=\"ttdoc\">Sets a pin to be used to reset configuration it it is connected to ground during startup.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00094\">EnigmaIOTNode.cpp:94</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a53bbbb07409315ada40ad53d00344252\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass::handle</a></div><div class=\"ttdeci\">void handle()</div><div class=\"ttdoc\">This method should be called periodically for instance inside loop() function. It is used for interna...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01003\">EnigmaIOTNode.cpp:1003</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">DOWNSTREAM_DATA_GET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_GET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00044\">EnigmaIOTGateway.h:44</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">DOWNSTREAM_DATA_SET</a></div><div class=\"ttdeci\">@ DOWNSTREAM_DATA_SET</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00042\">EnigmaIOTGateway.h:42</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8cpp_html_aad0a67af9b0ad60557652e3170f8a2af\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode</a></div><div class=\"ttdeci\">EnigmaIOTNodeClass EnigmaIOTNode</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l02719\">EnigmaIOTNode.cpp:2719</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_aafdd17efe90bfc2dd9af758633034f82\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">EnigmaIOTNodeClass::enableBroadcast</a></div><div class=\"ttdeci\">void enableBroadcast(bool broadcast=true)</div><div class=\"ttdoc\">Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node wil...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00566\">EnigmaIOTNode.h:566</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__nonsleepy_8cpp_html_a940f8c4df553df52c9145ef2df107ad3\"><div class=\"ttname\"><a href=\"enigmaiot__node__nonsleepy_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">connectEventHandler</a></div><div class=\"ttdeci\">void connectEventHandler()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00057\">enigmaiot_node_nonsleepy.cpp:57</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a636b6779d3c5a41e52fd6bb4b0ef31c0\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass::onDisconnected</a></div><div class=\"ttdeci\">void onDisconnected(onDisconnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is disconnected from gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00711\">EnigmaIOTNode.h:711</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_ac183d8bfcebdc9231366539a77b669eb\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">nodePayloadEncoding_t</a></div><div class=\"ttdeci\">nodePayloadEncoding_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00058\">EnigmaIOTNode.h:58</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__nonsleepy_8cpp_html_a4fc01d736fe50cf5b977f755b675f11d\"><div class=\"ttname\"><a href=\"enigmaiot__node__nonsleepy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup</a></div><div class=\"ttdeci\">void setup()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00112\">enigmaiot_node_nonsleepy.cpp:112</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__nonsleepy_8cpp_html_a81397ad933b5a8b902d6161f702838fc\"><div class=\"ttname\"><a href=\"enigmaiot__node__nonsleepy_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">processRxData</a></div><div class=\"ttdeci\">void processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00065\">enigmaiot_node_nonsleepy.cpp:65</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_af83a2fb76f23a90f98f42bdb6856213b\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass::sendData</a></div><div class=\"ttdeci\">bool sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)</div><div class=\"ttdoc\">Initiades data transmission distinguissing if it is payload or control data.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l01535\">EnigmaIOTNode.cpp:1535</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__nonsleepy_8cpp_html_aa5a70ec3f08b72ccfe8365835fee927e\"><div class=\"ttname\"><a href=\"enigmaiot__node__nonsleepy_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">RESET_PIN</a></div><div class=\"ttdeci\">constexpr auto RESET_PIN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00051\">enigmaiot_node_nonsleepy.cpp:51</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__nonsleepy_8cpp_html_a23fc74fc5731518093d5fa0db24edae1\"><div class=\"ttname\"><a href=\"enigmaiot__node__nonsleepy_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">disconnectEventHandler</a></div><div class=\"ttdeci\">void disconnectEventHandler(nodeInvalidateReason_t reason)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00061\">enigmaiot_node_nonsleepy.cpp:61</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html\">EnigmaIOTNode.h</a></div><div class=\"ttdoc\">Library to build a node for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">MSG_PACK</a></div><div class=\"ttdeci\">@ MSG_PACK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00065\">EnigmaIOTGateway.h:65</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_acce855b22bb1045a9cf4af9c4130500f\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass::onConnected</a></div><div class=\"ttdeci\">void onConnected(onConnected_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called everytime node is registered on gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00682\">EnigmaIOTNode.h:682</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__nonsleepy_8cpp_html_af0c88ea180e73ee60842341790d31b44\"><div class=\"ttname\"><a href=\"enigmaiot__node__nonsleepy_8cpp.html#af0c88ea180e73ee60842341790d31b44\">showTime</a></div><div class=\"ttdeci\">void showTime()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00148\">enigmaiot_node_nonsleepy.cpp:148</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_abff1de59af5ff0f9fd2e89b996f31f06\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass::begin</a></div><div class=\"ttdeci\">void begin(Comms_halClass *comm, uint8_t *gateway=NULL, uint8_t *networkKey=NULL, bool useCounter=true, bool sleepy=true)</div><div class=\"ttdoc\">Initalizes communication basic data and starts node registration.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00696\">EnigmaIOTNode.cpp:696</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a187f3eb82f9948d5b53bd7eb480f1dd4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass::setLed</a></div><div class=\"ttdeci\">void setLed(uint8_t led, time_t onTime=FLASH_LED_TIME)</div><div class=\"ttdoc\">Sets a LED to be flashed every time a message is transmitted.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00089\">EnigmaIOTNode.cpp:89</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__nonsleepy_8cpp_html_afe461d27b9c48d5921c00d521181f12f\"><div class=\"ttname\"><a href=\"enigmaiot__node__nonsleepy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop</a></div><div class=\"ttdeci\">void loop()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00176\">enigmaiot_node_nonsleepy.cpp:176</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a13509c40faa91f1ea6fa1bb9fa0097c6\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass::setNodeAddress</a></div><div class=\"ttdeci\">bool setNodeAddress(uint8_t address[ENIGMAIOT_ADDR_LEN])</div><div class=\"ttdoc\">Set node address to be used in EnigmaIOT communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8cpp_source.html#l00943\">EnigmaIOTNode.cpp:943</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTNode_8h_html_a1c3e9c34675da8090182cab1de105bc6\"><div class=\"ttname\"><a href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">nodeInvalidateReason_t</a></div><div class=\"ttdeci\">nodeInvalidateReason_t</div><div class=\"ttdoc\">Key invalidation reason definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00078\">EnigmaIOTNode.h:78</a></div></div>\n<div class=\"ttc\" id=\"aenigmaiot__node__nonsleepy_8cpp_html_a41c7fcbe209a1c236fd1b8e35bd8b55a\"><div class=\"ttname\"><a href=\"enigmaiot__node__nonsleepy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">BLUE_LED</a></div><div class=\"ttdeci\">#define BLUE_LED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"enigmaiot__node__nonsleepy_8cpp_source.html#l00050\">enigmaiot_node_nonsleepy.cpp:50</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTGateway_8h_html_a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\"><div class=\"ttname\"><a href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">CAYENNELPP</a></div><div class=\"ttdeci\">@ CAYENNELPP</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTGateway_8h_source.html#l00063\">EnigmaIOTGateway.h:63</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTNodeClass_html_a2c8523627fb660441dbdcbc8a796c3b4\"><div class=\"ttname\"><a href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass::onDataRx</a></div><div class=\"ttdeci\">void onDataRx(onNodeDataRx_t handler)</div><div class=\"ttdoc\">Defines a function callback that will be called on every downlink data message that is received from ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTNode_8h_source.html#l00655\">EnigmaIOTNode.h:655</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/espnow__hal_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/espnow_hal.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">espnow_hal.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>&quot;</code><br />\n</div>\n<p><a href=\"espnow__hal_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a3eef8679955ce5f4743338cbc6bf1e0e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></td></tr>\n<tr class=\"memdesc:a3eef8679955ce5f4743338cbc6bf1e0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Singleton instance of ESP-NOW class.  <a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">More...</a><br /></td></tr>\n<tr class=\"separator:a3eef8679955ce5f4743338cbc6bf1e0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a62ba3af3e98793dfe8f0e3039e325340\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"espnow__hal_8cpp.html#a62ba3af3e98793dfe8f0e3039e325340\">_peerType</a></td></tr>\n<tr class=\"separator:a62ba3af3e98793dfe8f0e3039e325340\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n</div><h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a62ba3af3e98793dfe8f0e3039e325340\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a62ba3af3e98793dfe8f0e3039e325340\">&#9670;&nbsp;</a></span>_peerType</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> _peerType</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00022\">22</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a3eef8679955ce5f4743338cbc6bf1e0e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3eef8679955ce5f4743338cbc6bf1e0e\">&#9670;&nbsp;</a></span>Espnow_hal</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a> Espnow_hal</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Singleton instance of ESP-NOW class. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00020\">20</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/espnow__hal_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/espnow_hal.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">espnow_hal.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"espnow__hal_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"espnow__hal_8h.html\">espnow_hal.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"keyword\">extern</span> <span class=\"stringliteral\">&quot;C&quot;</span> {</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;espnow.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;esp_now.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &lt;esp_wifi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160; </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"espnow__hal_8h.html#a3eef8679955ce5f4743338cbc6bf1e0e\">   20</a></span>&#160;<a class=\"code\" href=\"classEspnow__halClass.html\">Espnow_halClass</a> <a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"espnow__hal_8cpp.html#a62ba3af3e98793dfe8f0e3039e325340\">   22</a></span>&#160;<a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> <a class=\"code\" href=\"espnow__hal_8cpp.html#a62ba3af3e98793dfe8f0e3039e325340\">_peerType</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160; </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">   24</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">Espnow_halClass::initComms</a> (<a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> peerType) {</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;    <span class=\"keywordflow\">if</span> (esp_now_init ()) {</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        ESP.restart ();</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        delay (1);</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    <span class=\"keywordflow\">if</span> (peerType == <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a>) {</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        esp_now_set_self_role (ESP_NOW_ROLE_CONTROLLER);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        esp_now_add_peer (<a class=\"code\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a>, ESP_NOW_ROLE_SLAVE, <a class=\"code\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a>, NULL, 0);</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#elif defined ESP32</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"comment\">// esp_now_peer_info_t networkGw;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"comment\">// memcpy (networkGw.peer_addr, gateway, COMMS_HAL_ADDR_LEN);</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"comment\">// networkGw.channel = channel;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"comment\">// networkGw.ifidx = WIFI_IF_STA;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"comment\">// networkGw.encrypt = false;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"comment\">//esp_err_t result = esp_now_add_peer (&amp;networkGw);</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"comment\">//DEBUG_INFO (&quot;Gateway peer Added in channel %d. Result = %s&quot;, channel, esp_err_to_name (result));</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;WIFI channel is %d&quot;</span>, WiFi.channel ());</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        esp_now_set_self_role (ESP_NOW_ROLE_SLAVE);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    esp_now_register_recv_cb (<span class=\"keyword\">reinterpret_cast&lt;</span>esp_now_recv_cb_t<span class=\"keyword\">&gt;</span>(<a class=\"code\" href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">rx_cb</a>));</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;    esp_now_register_send_cb (<span class=\"keyword\">reinterpret_cast&lt;</span>esp_now_send_cb_t<span class=\"keyword\">&gt;</span>(<a class=\"code\" href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">tx_cb</a>));</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    xTaskCreateUniversal (<a class=\"code\" href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">runHandle</a>, <span class=\"stringliteral\">&quot;espnow_loop&quot;</span>, 2048, NULL, 1, &amp;<a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>, CONFIG_ARDUINO_RUNNING_CORE);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    os_timer_setfn (&amp;<a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>, <a class=\"code\" href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">runHandle</a>, NULL);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    os_timer_arm (&amp;<a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>, 20, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    <span class=\"comment\">// timer1_attachInterrupt (runHandle);</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    <span class=\"comment\">// timer1_enable (TIM_DIV16, TIM_EDGE, TIM_LOOP);</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;    <span class=\"comment\">// timer1_write (25000); //5000 us</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160; </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">   64</a></span>&#160;<span class=\"keywordtype\">void</span> ICACHE_FLASH_ATTR <a class=\"code\" href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">Espnow_halClass::rx_cb</a> (uint8_t* mac_addr, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len) {</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>.<a class=\"code\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a>) {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>.<a class=\"code\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a> (mac_addr, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160; </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">   70</a></span>&#160;<span class=\"keywordtype\">void</span> ICACHE_FLASH_ATTR <a class=\"code\" href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">Espnow_halClass::tx_cb</a> (uint8_t* mac_addr, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>) {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    <a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>.<a class=\"code\" href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">readyToSend</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Ready to send: true&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>.<a class=\"code\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">sentResult</a>) {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>.<a class=\"code\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">sentResult</a> (mac_addr, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160; </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">   78</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">Espnow_halClass::begin</a> (uint8_t* gateway, uint8_t channel, <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> peerType) {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    <a class=\"code\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">_ownPeerType</a> = peerType;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    <a class=\"code\" href=\"espnow__hal_8cpp.html#a62ba3af3e98793dfe8f0e3039e325340\">_peerType</a> = peerType;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;Starting ESP-NOW as %s&quot;</span>, <a class=\"code\" href=\"espnow__hal_8cpp.html#a62ba3af3e98793dfe8f0e3039e325340\">_peerType</a> == <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">COMM_GATEWAY</a> ? <span class=\"stringliteral\">&quot;gateway&quot;</span> : <span class=\"stringliteral\">&quot;node&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    <span class=\"keywordflow\">if</span> (peerType == <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a>) {</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Gateway address is &quot;</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a>, MAC2STR (<a class=\"code\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a>));</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        memcpy (this-&gt;gateway, <a class=\"code\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a>, <a class=\"code\" href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">COMMS_HAL_ADDR_LEN</a>);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        this-&gt;channel = <a class=\"code\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a>;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    <a class=\"code\" href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">initComms</a> (peerType);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">_ownPeerType</a> == <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a>) {</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <a class=\"code\" href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">addPeer</a> (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a>);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160; </div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">   93</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">Espnow_halClass::addPeer</a> (<span class=\"keyword\">const</span> uint8_t* da) {</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    esp_now_peer_info_t peer;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    memcpy (peer.peer_addr, da, <a class=\"code\" href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">COMMS_HAL_ADDR_LEN</a>);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;    uint8_t ch;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    wifi_second_chan_t secondCh;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    esp_wifi_get_channel (&amp;ch, &amp;secondCh);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    peer.channel = ch;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">_ownPeerType</a> == <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a>) {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        peer.ifidx = WIFI_IF_STA;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        peer.ifidx = WIFI_IF_AP;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    peer.encrypt = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    esp_err_t error = esp_now_add_peer (&amp;peer);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Peer %s added on channel %u. Result 0x%X %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (da), ch, error, esp_err_to_name (error));</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    <span class=\"keywordflow\">return</span> error == ESP_OK;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#else </span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">  115</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">Espnow_halClass::stop</a> () {</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;-------------&gt; ESP-NOW STOP&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    esp_now_unregister_recv_cb ();</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    esp_now_unregister_send_cb ();</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    esp_now_deinit ();</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160; </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">  122</a></span>&#160;int32_t <a class=\"code\" href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">Espnow_halClass::send</a> (uint8_t* da, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">int</span> len) {</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <a class=\"code\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a> message;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160; </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <span class=\"keywordflow\">if</span> (!da || !<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a> || !len) {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Parameters error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"keywordflow\">return</span> -1;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <span class=\"keywordflow\">if</span> (len &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>) {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Length error&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keywordflow\">return</span> -1;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> () &gt;= <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c\">COMMS_QUEUE_SIZE</a>) {</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">pop</a> ();</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    memcpy (message.<a class=\"code\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">dstAddress</a>, da, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    message.<a class=\"code\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">payload_len</a> = len;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    memcpy (message.<a class=\"code\" href=\"structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5\">payload</a>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, len);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">push</a> (&amp;message)) {</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;%d Comms messages queued. Type: 0x%02X Len: %d&quot;</span>, <a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> (), <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0], len);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Error queuing Comms message 0x%02X to %s&quot;</span>, <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>[0], <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (da));</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"keywordflow\">return</span> -1;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5\">  152</a></span>&#160;<a class=\"code\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a>* <a class=\"code\" href=\"classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5\">Espnow_halClass::getCommsQueue</a> () {</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> ()) {</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Comms message got from queue&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">front</a> ();</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">nullptr</span>;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160; </div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1\">  160</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1\">Espnow_halClass::popCommsQueue</a> () {</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> ()) {</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        <a class=\"code\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a>* message;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160; </div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        message = <a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">front</a> ();</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        <span class=\"keywordflow\">if</span> (message) {</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;            message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">payload_len</a> = 0;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        <a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">pop</a> ();</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Comms message pop. Queue size %d&quot;</span>, <a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">size</a> ());</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160; </div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297\">  173</a></span>&#160;int32_t <a class=\"code\" href=\"classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297\">Espnow_halClass::sendEspNowMessage</a> (<a class=\"code\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a>* message) {</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;    int32_t error;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160; </div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    <span class=\"keywordflow\">if</span> (!message) {</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        <span class=\"keywordflow\">return</span> -1;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;    <span class=\"keywordflow\">if</span> (!(message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">payload_len</a>) || (message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">payload_len</a> &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>)) {</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"keywordflow\">return</span> -1;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;ESP-NOW message to %s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a>(message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">dstAddress</a>));</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;    <span class=\"comment\">//if (_ownPeerType == COMM_GATEWAY) {</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <a class=\"code\" href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">addPeer</a> (message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">dstAddress</a>);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Peer added&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;    <span class=\"comment\">//}</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160; </div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;    error = esp_now_send (message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">dstAddress</a>, message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5\">payload</a>, message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">payload_len</a>);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Ready to send: false&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    <a class=\"code\" href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">readyToSend</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;esp now send result = %s&quot;</span>, esp_err_to_name(error));</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;    <span class=\"comment\">//if (_ownPeerType == COMM_GATEWAY) {</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        error = esp_now_del_peer (message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">dstAddress</a>); <span class=\"comment\">// TODO: test</span></div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Peer deleted. Result %s&quot;</span>, esp_err_to_name(error));</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;    <span class=\"comment\">//}</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;    <span class=\"keywordflow\">return</span> error;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160; </div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">  204</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">Espnow_halClass::onDataRcvd</a> (<a class=\"code\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a> dataRcvd) {</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;    this-&gt;dataRcvd = <a class=\"code\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a>;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160; </div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">  208</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">Espnow_halClass::onDataSent</a> (<a class=\"code\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a> sentResult) {</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;    this-&gt;sentResult = <a class=\"code\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">sentResult</a>;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160; </div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">  212</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">Espnow_halClass::handle</a> () {</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;    <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">readyToSend</a>) {</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        <span class=\"comment\">//DEBUG_WARN (&quot;Process queue: Elements: %d&quot;, out_queue.size ());</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>.<a class=\"code\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">empty</a> ()) {</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;            <a class=\"code\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a>* message;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;            message = <a class=\"code\" href=\"classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5\">getCommsQueue</a> ();</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;            <span class=\"keywordflow\">if</span> (message) {</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;                <span class=\"keywordflow\">if</span> (!<a class=\"code\" href=\"classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297\">sendEspNowMessage</a> (message)) {</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;                    DEBUG_DBG (<span class=\"stringliteral\">&quot;Message to %s sent. Type: 0x%02X. Len: %u&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">dstAddress</a>), (message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5\">payload</a>)[0], message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">payload_len</a>);</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;                } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;                    DEBUG_WARN (<span class=\"stringliteral\">&quot;Error sendign message to %s. Type: 0x%02X. Len: %u&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">dstAddress</a>), (message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5\">payload</a>)[0], message-&gt;<a class=\"code\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">payload_len</a>);</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;                <a class=\"code\" href=\"classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1\">popCommsQueue</a> ();</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160; </div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">  230</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">Espnow_halClass::runHandle</a> (<span class=\"keywordtype\">void</span>* param) {</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;    <span class=\"keywordflow\">for</span> (;;) {</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        <a class=\"code\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>.<a class=\"code\" href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">handle</a> ();</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;        vTaskDelay (1 / portTICK_PERIOD_MS);</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;}</div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a4fdb484427e4128d2776a0b9eb2efe92\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">Espnow_halClass::out_queue</a></div><div class=\"ttdeci\">EnigmaIOTRingBuffer&lt; comms_queue_item_t &gt; out_queue</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00038\">espnow_hal.h:38</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_ae3f1dec7ee0f3731002fa17598e6e7b4\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a></div><div class=\"ttdeci\">peerType_t</div><div class=\"ttdoc\">Peer role on communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00023\">Comms_hal.h:23</a></div></div>\n<div class=\"ttc\" id=\"astructcomms__queue__item__t_html\"><div class=\"ttname\"><a href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00028\">Comms_hal.h:28</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_aa7c4c848bc0fc5b4f93f9b02dd10d986\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">Espnow_halClass::addPeer</a></div><div class=\"ttdeci\">bool addPeer(const uint8_t *da)</div><div class=\"ttdoc\">Adds a peer to esp-now peer list.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00093\">espnow_hal.cpp:93</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a9dbccd523bb0ed9a3266bc8c448f4432\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum payload size on ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00021\">EnigmaIoTconfigAdvanced.h:21</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_aacd555a37dc6ff614813f365e0d85419\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">EnigmaIOTRingBuffer::size</a></div><div class=\"ttdeci\">int size()</div><div class=\"ttdoc\">Returns actual number of elements that buffer holds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00054\">EnigmaIOTRingBuffer.h:54</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html\">Espnow_halClass</a></div><div class=\"ttdoc\">Definition for ESP-NOW hardware abstraction layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00031\">espnow_hal.h:31</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_aa9e4fa0f5c87ca341c3aad233582d960\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">Espnow_halClass::readyToSend</a></div><div class=\"ttdeci\">bool readyToSend</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00039\">espnow_hal.h:39</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a0356f7e08a203093ad1c03e27ac18d0a\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">EnigmaIOTRingBuffer::push</a></div><div class=\"ttdeci\">bool push(Telement *item)</div><div class=\"ttdoc\">Adds a new item to buffer, deleting older element if it is full.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00073\">EnigmaIOTRingBuffer.h:73</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_aa332cba65f82a6e14af3ca5ef59732e9\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">Espnow_halClass::handle</a></div><div class=\"ttdeci\">void handle() override</div><div class=\"ttdoc\">Sends next message in the queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00212\">espnow_hal.cpp:212</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_aa1c3a507c1615699d4f730c77dc52b50\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">Espnow_halClass::begin</a></div><div class=\"ttdeci\">void begin(uint8_t *gateway, uint8_t channel=0, peerType_t peerType=COMM_NODE) override</div><div class=\"ttdoc\">Setup communication environment and establish the connection from node to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00078\">espnow_hal.cpp:78</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a5d5442d3095c57dee6ba5bc05691f587\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">Espnow_halClass::tx_cb</a></div><div class=\"ttdeci\">static void ICACHE_FLASH_ATTR tx_cb(uint8_t *mac_addr, uint8_t status)</div><div class=\"ttdoc\">Function that gets sending status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00070\">espnow_hal.cpp:70</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a4000e36c678d2ae166b3689e5703c7e5\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">EnigmaIOTRingBuffer::empty</a></div><div class=\"ttdeci\">bool empty()</div><div class=\"ttdoc\">Checks if buffer is empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00066\">EnigmaIOTRingBuffer.h:66</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_ab8124d524ffeb47ab53c5435ac2fe4c8\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">EnigmaIOTRingBuffer::pop</a></div><div class=\"ttdeci\">bool pop()</div><div class=\"ttdoc\">Deletes older item from buffer, if buffer is not empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00106\">EnigmaIOTRingBuffer.h:106</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a76ccfc10740955584c2fab3bc6182c47\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">Espnow_halClass::rx_cb</a></div><div class=\"ttdeci\">static void ICACHE_FLASH_ATTR rx_cb(uint8_t *mac_addr, uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Function that processes incoming messages and passes them to upper layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00064\">espnow_hal.cpp:64</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a627f205073fdf1c3fa3fbb2fae73c5e5\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5\">Espnow_halClass::getCommsQueue</a></div><div class=\"ttdeci\">comms_queue_item_t * getCommsQueue()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00152\">espnow_hal.cpp:152</a></div></div>\n<div class=\"ttc\" id=\"astructcomms__queue__item__t_html_a29ee334b0872cfdc2f6a2e992a3c727f\"><div class=\"ttname\"><a href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">comms_queue_item_t::dstAddress</a></div><div class=\"ttdeci\">uint8_t dstAddress[ENIGMAIOT_ADDR_LEN]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00029\">Comms_hal.h:29</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a1e0d23a1dedf362fc1f451c7272bff2b\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">Espnow_halClass::send</a></div><div class=\"ttdeci\">int32_t send(uint8_t *da, uint8_t *data, int len) override</div><div class=\"ttdoc\">Sends data to the other peer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00122\">espnow_hal.cpp:122</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a3fb9182d9e9b0729d8798c43f133a130\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">Comms_halClass::sentResult</a></div><div class=\"ttdeci\">comms_hal_sent_data sentResult</div><div class=\"ttdoc\">Pointer to a function to be called to notify last sending status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00051\">Comms_hal.h:51</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html_a3dd72b32f71d5bf46c0c083c3bb9b942\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">EnigmaIOTRingBuffer::front</a></div><div class=\"ttdeci\">Telement * front()</div><div class=\"ttdoc\">Gets a pointer to older item in buffer, if buffer is not empty.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIOTRingBuffer_8h_source.html#l00125\">EnigmaIOTRingBuffer.h:125</a></div></div>\n<div class=\"ttc\" id=\"astructcomms__queue__item__t_html_a736106aeedc634be01424aaa5ed55860\"><div class=\"ttname\"><a href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">comms_queue_item_t::payload_len</a></div><div class=\"ttdeci\">size_t payload_len</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00031\">Comms_hal.h:31</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a645c4710e2422b8b263438e518dc5da8\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">Espnow_halClass::espnowLoopTask</a></div><div class=\"ttdeci\">ETSTimer espnowLoopTask</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00043\">espnow_hal.h:43</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a></div><div class=\"ttdeci\">@ COMM_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00024\">Comms_hal.h:24</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a986a0e97c281fc18f135d159caba672c\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c\">COMMS_QUEUE_SIZE</a></div><div class=\"ttdeci\">static const uint8_t COMMS_QUEUE_SIZE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00028\">EnigmaIoTconfigAdvanced.h:28</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a47f4ee9859b73356a27f6baaa2f009c9\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">Espnow_halClass::initComms</a></div><div class=\"ttdeci\">void initComms(peerType_t peerType) override</div><div class=\"ttdoc\">Communication subsistem initialization.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00024\">espnow_hal.cpp:24</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a6104d185737252c0e86476d6eca6a62b\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">Espnow_halClass::onDataSent</a></div><div class=\"ttdeci\">void onDataSent(comms_hal_sent_data dataRcvd) override</div><div class=\"ttdoc\">Attach a callback function to be run after sending a message to receive its status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00208\">espnow_hal.cpp:208</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a4e22033bdc1560ca309e9a14073c2282\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">BROADCAST_ADDRESS</a></div><div class=\"ttdeci\">static const uint8_t BROADCAST_ADDRESS[]</div><div class=\"ttdoc\">Broadcast address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00026\">EnigmaIoTconfigAdvanced.h:26</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_a43bcbe8a0a3d8d61dd64f1f004864af0\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a></div><div class=\"ttdeci\">void(* comms_hal_rcvd_data)(uint8_t *address, uint8_t *data, uint8_t len)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00035\">Comms_hal.h:35</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_ad6e69a2870c8f219cc679677af110849\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a></div><div class=\"ttdeci\">#define MACSTR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00083\">helperFunctions.cpp:83</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a6b28bd22a237920c95ee9cf3f9a5ca77\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">Espnow_halClass::onDataRcvd</a></div><div class=\"ttdeci\">void onDataRcvd(comms_hal_rcvd_data dataRcvd) override</div><div class=\"ttdoc\">Attach a callback function to be run on every received message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00204\">espnow_hal.cpp:204</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">COMM_GATEWAY</a></div><div class=\"ttdeci\">@ COMM_GATEWAY</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00026\">Comms_hal.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a5bbed119e5e361b9be85a33404cf2e83\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">Comms_halClass::dataRcvd</a></div><div class=\"ttdeci\">comms_hal_rcvd_data dataRcvd</div><div class=\"ttdoc\">Pointer to a function to be called on every received message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00050\">Comms_hal.h:50</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a6472373c178c2e77f4fc50eafaedc0ab\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">Comms_halClass::_ownPeerType</a></div><div class=\"ttdeci\">peerType_t _ownPeerType</div><div class=\"ttdoc\">Stores peer type, node or gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00052\">Comms_hal.h:52</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_aaae5f86d25fa7b47a4e5799a79ab1297\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297\">Espnow_halClass::sendEspNowMessage</a></div><div class=\"ttdeci\">int32_t sendEspNowMessage(comms_queue_item_t *message)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00173\">espnow_hal.cpp:173</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a26ff39763f910380506fef4238eb2d52\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">Espnow_halClass::runHandle</a></div><div class=\"ttdeci\">static void runHandle(void *param)</div><div class=\"ttdoc\">Static function that calls handle inside task.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00230\">espnow_hal.cpp:230</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8cpp_html_a62ba3af3e98793dfe8f0e3039e325340\"><div class=\"ttname\"><a href=\"espnow__hal_8cpp.html#a62ba3af3e98793dfe8f0e3039e325340\">_peerType</a></div><div class=\"ttdeci\">peerType_t _peerType</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00022\">espnow_hal.cpp:22</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_afd743715a11ed44e16dbb8d28bf3bd8b\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a></div><div class=\"ttdeci\">void(* comms_hal_sent_data)(uint8_t *address, uint8_t status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00036\">Comms_hal.h:36</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html\">espnow_hal.h</a></div><div class=\"ttdoc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.</div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_ad1b11d3ca5e85c95d13000acab74bff3\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">Espnow_halClass::stop</a></div><div class=\"ttdeci\">void stop() override</div><div class=\"ttdoc\">Terminates communication and closes all connectrions.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00115\">espnow_hal.cpp:115</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_ace124e6371edc5af949f74726566b5e1\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1\">Espnow_halClass::popCommsQueue</a></div><div class=\"ttdeci\">void popCommsQueue()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00160\">espnow_hal.cpp:160</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ac35585ecbc8e936d9f35d32b56164b8e\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">Comms_halClass::gateway</a></div><div class=\"ttdeci\">uint8_t gateway[COMMS_HAL_ADDR_LEN]</div><div class=\"ttdoc\">Gateway address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00047\">Comms_hal.h:47</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ac495fb3d9e576bb2717c1f43197b458e\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">Comms_halClass::channel</a></div><div class=\"ttdeci\">uint8_t channel</div><div class=\"ttdoc\">Comms channel to be used.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00048\">Comms_hal.h:48</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a024a232658955ce9d3cc2b41106ffd72\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">Espnow_halClass::COMMS_HAL_ADDR_LEN</a></div><div class=\"ttdeci\">static const uint8_t COMMS_HAL_ADDR_LEN</div><div class=\"ttdoc\">Address length for ESP-NOW. Correspond to mac address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00034\">espnow_hal.h:34</a></div></div>\n<div class=\"ttc\" id=\"astructcomms__queue__item__t_html_a26b511d49735443cca07450d4b7e66d5\"><div class=\"ttname\"><a href=\"structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5\">comms_queue_item_t::payload</a></div><div class=\"ttdeci\">uint8_t payload[MAX_MESSAGE_LENGTH]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00030\">Comms_hal.h:30</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/espnow__hal_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/espnow_hal.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">espnow_hal.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIOTRingBuffer_8h_source.html\">EnigmaIOTRingBuffer.h</a>&quot;</code><br />\n</div>\n<p><a href=\"espnow__hal_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a></td></tr>\n<tr class=\"memdesc:\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Definition for ESP-NOW hardware abstraction layer.  <a href=\"classEspnow__halClass.html#details\">More...</a><br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a3eef8679955ce5f4743338cbc6bf1e0e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"espnow__hal_8h.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></td></tr>\n<tr class=\"memdesc:a3eef8679955ce5f4743338cbc6bf1e0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Singleton instance of ESP-NOW class.  <a href=\"espnow__hal_8h.html#a3eef8679955ce5f4743338cbc6bf1e0e\">More...</a><br /></td></tr>\n<tr class=\"separator:a3eef8679955ce5f4743338cbc6bf1e0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"espnow__hal_8h_source.html\">espnow_hal.h</a>.</p>\n</div><h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a3eef8679955ce5f4743338cbc6bf1e0e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3eef8679955ce5f4743338cbc6bf1e0e\">&#9670;&nbsp;</a></span>Espnow_hal</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classEspnow__halClass.html\">Espnow_halClass</a> Espnow_hal</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">extern</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p>Singleton instance of ESP-NOW class. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"espnow__hal_8cpp_source.html#l00020\">20</a> of file <a class=\"el\" href=\"espnow__hal_8cpp_source.html\">espnow_hal.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/espnow__hal_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/espnow_hal.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">espnow_hal.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"espnow__hal_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _ESPNOW_HAL_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _ESPNOW_HAL_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#elif defined(ESP32)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;esp_now.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"Comms__hal_8h.html\">Comms_hal.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIOTRingBuffer_8h.html\">EnigmaIOTRingBuffer.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160; </div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html\">   31</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classEspnow__halClass.html\">Espnow_halClass</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classComms__halClass.html\">Comms_halClass</a> {</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635\">   33</a></span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635\">COMMS_HAL_MAX_MESSAGE_LENGTH</a> = 250; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">   34</a></span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> uint8_t <a class=\"code\" href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">COMMS_HAL_ADDR_LEN</a> = 6; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160; </div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160; </div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">   38</a></span>&#160;    <a class=\"code\" href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt;comms_queue_item_t&gt;</a> <a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">   39</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">readyToSend</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    TaskHandle_t <a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#else // ESP8266</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">   43</a></span>&#160;    ETSTimer <a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">initComms</a> (<a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> peerType) <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">addPeer</a> (<span class=\"keyword\">const</span> uint8_t* da);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> ICACHE_FLASH_ATTR <a class=\"code\" href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">rx_cb</a> (uint8_t* mac_addr, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, uint8_t len);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> ICACHE_FLASH_ATTR <a class=\"code\" href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">tx_cb</a> (uint8_t* mac_addr, uint8_t <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a>);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160; </div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;    int32_t <a class=\"code\" href=\"classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297\">sendEspNowMessage</a> (<a class=\"code\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a>* message);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    <a class=\"code\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a>* <a class=\"code\" href=\"classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5\">getCommsQueue</a> ();</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1\">popCommsQueue</a> ();</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#ae9def9fb9d9e8370e70e77367900669f\">   81</a></span>&#160;    <a class=\"code\" href=\"classEspnow__halClass.html#ae9def9fb9d9e8370e70e77367900669f\">Espnow_halClass</a> () :</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <a class=\"code\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">out_queue</a> (<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c\">COMMS_QUEUE_SIZE</a>) {}</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160; </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">begin</a> (uint8_t* <a class=\"code\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">gateway</a>, uint8_t <a class=\"code\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">channel</a> = 0, <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a> peerType = <a class=\"code\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a>) <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">stop</a> () <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160; </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    int32_t <a class=\"code\" href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">send</a> (uint8_t* da, uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">int</span> len) <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160; </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">onDataRcvd</a> (<a class=\"code\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a> <a class=\"code\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a>) <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160; </div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">onDataSent</a> (<a class=\"code\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a> <a class=\"code\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">dataRcvd</a>) <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160; </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d\">  123</a></span>&#160;    uint8_t <a class=\"code\" href=\"classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d\">getAddressLength</a> ()<span class=\"keyword\"> override </span>{</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">COMMS_HAL_ADDR_LEN</a>;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160; </div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a3a037c0d31f906bc24a8475b376072fd\">  131</a></span>&#160;    <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classEspnow__halClass.html#a3a037c0d31f906bc24a8475b376072fd\">getMaxMessageLength</a> () {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635\">COMMS_HAL_MAX_MESSAGE_LENGTH</a>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\"><a class=\"line\" href=\"classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f\">  139</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f\">enableTransmit</a> (<span class=\"keywordtype\">bool</span> enable)<span class=\"keyword\"> override </span>{</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Send esp-now task %s&quot;</span>, enable ? <span class=\"stringliteral\">&quot;enabled&quot;</span> : <span class=\"stringliteral\">&quot;disabled&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <span class=\"keywordflow\">if</span> (enable) {</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;            os_timer_arm (&amp;<a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>, 20, <span class=\"keyword\">true</span>);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;            <span class=\"comment\">//timer1_enable (TIM_DIV16, TIM_EDGE, TIM_LOOP);</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>) {</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                vTaskResume (<a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;            os_timer_disarm (&amp;<a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;            <span class=\"comment\">//timer1_disable ();</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;            <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>) {</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                vTaskSuspend (<a class=\"code\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">espnowLoopTask</a>);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    } </div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160; </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">handle</a> () <span class=\"keyword\">override</span>;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160; </div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">runHandle</a> (<span class=\"keywordtype\">void</span>* param);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160; </div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160; </div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"keyword\">extern</span> <a class=\"code\" href=\"classEspnow__halClass.html\">Espnow_halClass</a> <a class=\"code\" href=\"espnow__hal_8h.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a>; </div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160; </div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a4fdb484427e4128d2776a0b9eb2efe92\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">Espnow_halClass::out_queue</a></div><div class=\"ttdeci\">EnigmaIOTRingBuffer&lt; comms_queue_item_t &gt; out_queue</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00038\">espnow_hal.h:38</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_ae3f1dec7ee0f3731002fa17598e6e7b4\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">peerType_t</a></div><div class=\"ttdeci\">peerType_t</div><div class=\"ttdoc\">Peer role on communication.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00023\">Comms_hal.h:23</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTRingBuffer_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTRingBuffer_8h.html\">EnigmaIOTRingBuffer.h</a></div><div class=\"ttdoc\">Library to build a gateway for EnigmaIoT system.</div></div>\n<div class=\"ttc\" id=\"astructcomms__queue__item__t_html\"><div class=\"ttname\"><a href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00028\">Comms_hal.h:28</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_ab67eb381c0a4278b5af0235cb1aec635\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635\">Espnow_halClass::COMMS_HAL_MAX_MESSAGE_LENGTH</a></div><div class=\"ttdeci\">static const size_t COMMS_HAL_MAX_MESSAGE_LENGTH</div><div class=\"ttdoc\">Maximum message length for ESP-NOW.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00033\">espnow_hal.h:33</a></div></div>\n<div class=\"ttc\" id=\"aclassEnigmaIOTRingBuffer_html\"><div class=\"ttname\"><a href=\"classEnigmaIOTRingBuffer.html\">EnigmaIOTRingBuffer&lt; comms_queue_item_t &gt;</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_aa7c4c848bc0fc5b4f93f9b02dd10d986\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">Espnow_halClass::addPeer</a></div><div class=\"ttdeci\">bool addPeer(const uint8_t *da)</div><div class=\"ttdoc\">Adds a peer to esp-now peer list.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00093\">espnow_hal.cpp:93</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html\">Espnow_halClass</a></div><div class=\"ttdoc\">Definition for ESP-NOW hardware abstraction layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00031\">espnow_hal.h:31</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_aa9e4fa0f5c87ca341c3aad233582d960\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">Espnow_halClass::readyToSend</a></div><div class=\"ttdeci\">bool readyToSend</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00039\">espnow_hal.h:39</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_aa332cba65f82a6e14af3ca5ef59732e9\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">Espnow_halClass::handle</a></div><div class=\"ttdeci\">void handle() override</div><div class=\"ttdoc\">Sends next message in the queue.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00212\">espnow_hal.cpp:212</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_aa1c3a507c1615699d4f730c77dc52b50\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">Espnow_halClass::begin</a></div><div class=\"ttdeci\">void begin(uint8_t *gateway, uint8_t channel=0, peerType_t peerType=COMM_NODE) override</div><div class=\"ttdoc\">Setup communication environment and establish the connection from node to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00078\">espnow_hal.cpp:78</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a91c6aaf2781c9e141641fe4a4b92115f\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f\">Espnow_halClass::enableTransmit</a></div><div class=\"ttdeci\">void enableTransmit(bool enable) override</div><div class=\"ttdoc\">Enables or disables transmission of queued messages. Used to disable communication during wifi scan.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00139\">espnow_hal.h:139</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a5d5442d3095c57dee6ba5bc05691f587\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">Espnow_halClass::tx_cb</a></div><div class=\"ttdeci\">static void ICACHE_FLASH_ATTR tx_cb(uint8_t *mac_addr, uint8_t status)</div><div class=\"ttdoc\">Function that gets sending status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00070\">espnow_hal.cpp:70</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a76ccfc10740955584c2fab3bc6182c47\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">Espnow_halClass::rx_cb</a></div><div class=\"ttdeci\">static void ICACHE_FLASH_ATTR rx_cb(uint8_t *mac_addr, uint8_t *data, uint8_t len)</div><div class=\"ttdoc\">Function that processes incoming messages and passes them to upper layer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00064\">espnow_hal.cpp:64</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a627f205073fdf1c3fa3fbb2fae73c5e5\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5\">Espnow_halClass::getCommsQueue</a></div><div class=\"ttdeci\">comms_queue_item_t * getCommsQueue()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00152\">espnow_hal.cpp:152</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a1e0d23a1dedf362fc1f451c7272bff2b\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">Espnow_halClass::send</a></div><div class=\"ttdeci\">int32_t send(uint8_t *da, uint8_t *data, int len) override</div><div class=\"ttdoc\">Sends data to the other peer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00122\">espnow_hal.cpp:122</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a645c4710e2422b8b263438e518dc5da8\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">Espnow_halClass::espnowLoopTask</a></div><div class=\"ttdeci\">ETSTimer espnowLoopTask</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00043\">espnow_hal.h:43</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">COMM_NODE</a></div><div class=\"ttdeci\">@ COMM_NODE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00024\">Comms_hal.h:24</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a986a0e97c281fc18f135d159caba672c\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c\">COMMS_QUEUE_SIZE</a></div><div class=\"ttdeci\">static const uint8_t COMMS_QUEUE_SIZE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00028\">EnigmaIoTconfigAdvanced.h:28</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a47f4ee9859b73356a27f6baaa2f009c9\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">Espnow_halClass::initComms</a></div><div class=\"ttdeci\">void initComms(peerType_t peerType) override</div><div class=\"ttdoc\">Communication subsistem initialization.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00024\">espnow_hal.cpp:24</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a6104d185737252c0e86476d6eca6a62b\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">Espnow_halClass::onDataSent</a></div><div class=\"ttdeci\">void onDataSent(comms_hal_sent_data dataRcvd) override</div><div class=\"ttdoc\">Attach a callback function to be run after sending a message to receive its status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00208\">espnow_hal.cpp:208</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_a43bcbe8a0a3d8d61dd64f1f004864af0\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">comms_hal_rcvd_data</a></div><div class=\"ttdeci\">void(* comms_hal_rcvd_data)(uint8_t *address, uint8_t *data, uint8_t len)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00035\">Comms_hal.h:35</a></div></div>\n<div class=\"ttc\" id=\"aespnow__hal_8h_html_a3eef8679955ce5f4743338cbc6bf1e0e\"><div class=\"ttname\"><a href=\"espnow__hal_8h.html#a3eef8679955ce5f4743338cbc6bf1e0e\">Espnow_hal</a></div><div class=\"ttdeci\">Espnow_halClass Espnow_hal</div><div class=\"ttdoc\">Singleton instance of ESP-NOW class.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00020\">espnow_hal.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a6b28bd22a237920c95ee9cf3f9a5ca77\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">Espnow_halClass::onDataRcvd</a></div><div class=\"ttdeci\">void onDataRcvd(comms_hal_rcvd_data dataRcvd) override</div><div class=\"ttdoc\">Attach a callback function to be run on every received message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00204\">espnow_hal.cpp:204</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_a5bbed119e5e361b9be85a33404cf2e83\"><div class=\"ttname\"><a href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">Comms_halClass::dataRcvd</a></div><div class=\"ttdeci\">comms_hal_rcvd_data dataRcvd</div><div class=\"ttdoc\">Pointer to a function to be called on every received message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00050\">Comms_hal.h:50</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_ae9def9fb9d9e8370e70e77367900669f\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#ae9def9fb9d9e8370e70e77367900669f\">Espnow_halClass::Espnow_halClass</a></div><div class=\"ttdeci\">Espnow_halClass()</div><div class=\"ttdoc\">Class constructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00081\">espnow_hal.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_aaae5f86d25fa7b47a4e5799a79ab1297\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297\">Espnow_halClass::sendEspNowMessage</a></div><div class=\"ttdeci\">int32_t sendEspNowMessage(comms_queue_item_t *message)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00173\">espnow_hal.cpp:173</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_ac04ab12d0b5e52948d123f226ab1101d\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d\">Espnow_halClass::getAddressLength</a></div><div class=\"ttdeci\">uint8_t getAddressLength() override</div><div class=\"ttdoc\">Get address length used on ESP-NOW subsystem.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00123\">espnow_hal.h:123</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a26ff39763f910380506fef4238eb2d52\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">Espnow_halClass::runHandle</a></div><div class=\"ttdeci\">static void runHandle(void *param)</div><div class=\"ttdoc\">Static function that calls handle inside task.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00230\">espnow_hal.cpp:230</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a3a037c0d31f906bc24a8475b376072fd\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a3a037c0d31f906bc24a8475b376072fd\">Espnow_halClass::getMaxMessageLength</a></div><div class=\"ttdeci\">size_t getMaxMessageLength()</div><div class=\"ttdoc\">Get maximum message length on ESP-NOW subsystem.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00131\">espnow_hal.h:131</a></div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html\">Comms_hal.h</a></div><div class=\"ttdoc\">Generic communication system abstraction layer.</div></div>\n<div class=\"ttc\" id=\"aComms__hal_8h_html_afd743715a11ed44e16dbb8d28bf3bd8b\"><div class=\"ttname\"><a href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">comms_hal_sent_data</a></div><div class=\"ttdeci\">void(* comms_hal_sent_data)(uint8_t *address, uint8_t status)</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00036\">Comms_hal.h:36</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_ad1b11d3ca5e85c95d13000acab74bff3\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">Espnow_halClass::stop</a></div><div class=\"ttdeci\">void stop() override</div><div class=\"ttdoc\">Terminates communication and closes all connectrions.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00115\">espnow_hal.cpp:115</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_ace124e6371edc5af949f74726566b5e1\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1\">Espnow_halClass::popCommsQueue</a></div><div class=\"ttdeci\">void popCommsQueue()</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8cpp_source.html#l00160\">espnow_hal.cpp:160</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ac35585ecbc8e936d9f35d32b56164b8e\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">Comms_halClass::gateway</a></div><div class=\"ttdeci\">uint8_t gateway[COMMS_HAL_ADDR_LEN]</div><div class=\"ttdoc\">Gateway address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00047\">Comms_hal.h:47</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html_ac495fb3d9e576bb2717c1f43197b458e\"><div class=\"ttname\"><a href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">Comms_halClass::channel</a></div><div class=\"ttdeci\">uint8_t channel</div><div class=\"ttdoc\">Comms channel to be used.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00048\">Comms_hal.h:48</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">status</a></div><div class=\"ttdeci\">@ status</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00026\">GwOutput_generic.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassComms__halClass_html\"><div class=\"ttname\"><a href=\"classComms__halClass.html\">Comms_halClass</a></div><div class=\"ttdoc\">Interface for communication subsystem abstraction layer definition.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"Comms__hal_8h_source.html#l00041\">Comms_hal.h:41</a></div></div>\n<div class=\"ttc\" id=\"aclassEspnow__halClass_html_a024a232658955ce9d3cc2b41106ffd72\"><div class=\"ttname\"><a href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">Espnow_halClass::COMMS_HAL_ADDR_LEN</a></div><div class=\"ttdeci\">static const uint8_t COMMS_HAL_ADDR_LEN</div><div class=\"ttdoc\">Address length for ESP-NOW. Correspond to mac address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"espnow__hal_8h_source.html#l00034\">espnow_hal.h:34</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2EnigmaIOT-Button-Controller_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Button-Controller/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/EnigmaIOT-Button-Controller/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2EnigmaIOT-DashButton-Controller_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-DashButton-Controller/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/EnigmaIOT-DashButton-Controller/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2EnigmaIOT-Json-Controller-Template_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Json-Controller-Template/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/EnigmaIOT-Json-Controller-Template/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2EnigmaIOT-Led-Controller_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Led-Controller/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/EnigmaIOT-Led-Controller/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2EnigmaIOT-Sensor-Controller_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-Sensor-Controller/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/EnigmaIOT-Sensor-Controller/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2EnigmaIOT-SmartSwitch-Controller_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOT-SmartSwitch-Controller/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/EnigmaIOT-SmartSwitch-Controller/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2EnigmaIOTGatewayDummy_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayDummy/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/EnigmaIOTGatewayDummy/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2EnigmaIOTGatewayMQTT_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/EnigmaIOTGatewayMQTT/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/EnigmaIOTGatewayMQTT/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2enigmaiot__led__flasher_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_led_flasher/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/enigmaiot_led_flasher/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2enigmaiot__node_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/enigmaiot_node/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2enigmaiot__node__msgpack_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node_msgpack/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/enigmaiot_node_msgpack/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/examples_2enigmaiot__node__nonsleepy_2readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: examples/enigmaiot_node_nonsleepy/readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">examples/enigmaiot_node_nonsleepy/readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/files.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">File List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all files with brief descriptions:</div><div class=\"directory\">\n<div class=\"levels\">[detail level <span onclick=\"javascript:toggleLevel(1);\">1</span><span onclick=\"javascript:toggleLevel(2);\">2</span><span onclick=\"javascript:toggleLevel(3);\">3</span>]</div><table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"iconfclosed\"></span><a class=\"el\" href=\"dir_49e56c817e5e54854c35e136979f97ca.html\" target=\"_self\">docs</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_1_\" class=\"arrow\" onclick=\"toggleFolder('1_')\">&#9660;</span><span id=\"img_1_\" class=\"iconfopen\" onclick=\"toggleFolder('1_')\">&#160;</span><a class=\"el\" href=\"dir_bbee7a02677141865fa116b3c1345c33.html\" target=\"_self\">EnigmaIoTUpdate</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"EnigmaIoTUpdate_8py_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIoTUpdate_8py.html\" target=\"_self\">EnigmaIoTUpdate.py</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_2_\" class=\"arrow\" onclick=\"toggleFolder('2_')\">&#9660;</span><span id=\"img_2_\" class=\"iconfopen\" onclick=\"toggleFolder('2_')\">&#160;</span><a class=\"el\" href=\"dir_d28a4824dc47e487b107a5db32ef43c4.html\" target=\"_self\">examples</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_0_\" class=\"arrow\" onclick=\"toggleFolder('2_0_')\">&#9660;</span><span id=\"img_2_0_\" class=\"iconfopen\" onclick=\"toggleFolder('2_0_')\">&#160;</span><a class=\"el\" href=\"dir_7b1e976c444ae84a02a576fc7d2ecc0c.html\" target=\"_self\">EnigmaIOT-Button-Controller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_0_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"ButtonController_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"ButtonController_8cpp.html\" target=\"_self\">ButtonController.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_0_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"ButtonController_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"ButtonController_8h.html\" target=\"_self\">ButtonController.h</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_0_2_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOT-Button-Controller_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html\" target=\"_self\">EnigmaIOT-Button-Controller.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_1_\" class=\"arrow\" onclick=\"toggleFolder('2_1_')\">&#9660;</span><span id=\"img_2_1_\" class=\"iconfopen\" onclick=\"toggleFolder('2_1_')\">&#160;</span><a class=\"el\" href=\"dir_b65b262e0a2e64b925763a7d4046e738.html\" target=\"_self\">EnigmaIOT-DashButton-Controller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_1_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"DashButtonController_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"DashButtonController_8cpp.html\" target=\"_self\">DashButtonController.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_1_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"DashButtonController_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"DashButtonController_8h.html\" target=\"_self\">DashButtonController.h</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_1_2_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOT-DashButton-Controller_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html\" target=\"_self\">EnigmaIOT-DashButton-Controller.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_2_\" class=\"arrow\" onclick=\"toggleFolder('2_2_')\">&#9660;</span><span id=\"img_2_2_\" class=\"iconfopen\" onclick=\"toggleFolder('2_2_')\">&#160;</span><a class=\"el\" href=\"dir_d330a1fb834c3b104c380ea4a26b63bb.html\" target=\"_self\">EnigmaIOT-Json-Controller-Template</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_2_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"BasicController_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"BasicController_8cpp.html\" target=\"_self\">BasicController.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_2_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"BasicController_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"BasicController_8h.html\" target=\"_self\">BasicController.h</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_2_2_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOT-Json-Controller-Template_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html\" target=\"_self\">EnigmaIOT-Json-Controller-Template.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_3_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_3_\" class=\"arrow\" onclick=\"toggleFolder('2_3_')\">&#9660;</span><span id=\"img_2_3_\" class=\"iconfopen\" onclick=\"toggleFolder('2_3_')\">&#160;</span><a class=\"el\" href=\"dir_56fe63de1287a706a7081958f8373778.html\" target=\"_self\">EnigmaIOT-Led-Controller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_3_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOT-Led-Controller_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html\" target=\"_self\">EnigmaIOT-Led-Controller.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_3_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"LedController_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"LedController_8cpp.html\" target=\"_self\">LedController.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_3_2_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"LedController_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"LedController_8h.html\" target=\"_self\">LedController.h</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_4_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_4_\" class=\"arrow\" onclick=\"toggleFolder('2_4_')\">&#9660;</span><span id=\"img_2_4_\" class=\"iconfopen\" onclick=\"toggleFolder('2_4_')\">&#160;</span><a class=\"el\" href=\"dir_00c6ed3b0ef8b691ed3b9ecb58c6534d.html\" target=\"_self\">EnigmaIOT-Sensor-Controller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_4_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"ds18b20Controller_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"ds18b20Controller_8cpp.html\" target=\"_self\">ds18b20Controller.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_4_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"ds18b20Controller_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"ds18b20Controller_8h.html\" target=\"_self\">ds18b20Controller.h</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_4_2_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOT-Sensor-Controller_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html\" target=\"_self\">EnigmaIOT-Sensor-Controller.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_5_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_5_\" class=\"arrow\" onclick=\"toggleFolder('2_5_')\">&#9660;</span><span id=\"img_2_5_\" class=\"iconfopen\" onclick=\"toggleFolder('2_5_')\">&#160;</span><a class=\"el\" href=\"dir_85c13f167532cd35b89eb457361e1e18.html\" target=\"_self\">EnigmaIOT-SmartSwitch-Controller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_5_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOT-SmartSwitch-Controller_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html\" target=\"_self\">EnigmaIOT-SmartSwitch-Controller.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_5_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"SmartSwitchController_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"SmartSwitchController_8cpp.html\" target=\"_self\">SmartSwitchController.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_5_2_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"SmartSwitchController_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"SmartSwitchController_8h.html\" target=\"_self\">SmartSwitchController.h</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_6_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_6_\" class=\"arrow\" onclick=\"toggleFolder('2_6_')\">&#9660;</span><span id=\"img_2_6_\" class=\"iconfopen\" onclick=\"toggleFolder('2_6_')\">&#160;</span><a class=\"el\" href=\"dir_d43fadc45274b5d05cae2a6678e1cfd4.html\" target=\"_self\">enigmaiot_led_flasher</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_6_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"enigmaiot__led__flasher_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html\" target=\"_self\">enigmaiot_led_flasher.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_7_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_7_\" class=\"arrow\" onclick=\"toggleFolder('2_7_')\">&#9660;</span><span id=\"img_2_7_\" class=\"iconfopen\" onclick=\"toggleFolder('2_7_')\">&#160;</span><a class=\"el\" href=\"dir_ddb1aa94a6973c510045d1a2166b2b36.html\" target=\"_self\">enigmaiot_node</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_7_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"enigmaiot__node_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"enigmaiot__node_8cpp.html\" target=\"_self\">enigmaiot_node.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_8_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_8_\" class=\"arrow\" onclick=\"toggleFolder('2_8_')\">&#9660;</span><span id=\"img_2_8_\" class=\"iconfopen\" onclick=\"toggleFolder('2_8_')\">&#160;</span><a class=\"el\" href=\"dir_74730d4cfa9be35e947daeb13bf15f56.html\" target=\"_self\">enigmaiot_node_msgpack</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_8_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"enigmaiot__node__msgpack_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html\" target=\"_self\">enigmaiot_node_msgpack.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_9_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_9_\" class=\"arrow\" onclick=\"toggleFolder('2_9_')\">&#9660;</span><span id=\"img_2_9_\" class=\"iconfopen\" onclick=\"toggleFolder('2_9_')\">&#160;</span><a class=\"el\" href=\"dir_6f51a142868163a30ea6bee5ec2f0159.html\" target=\"_self\">enigmaiot_node_nonsleepy</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_9_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"enigmaiot__node__nonsleepy_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html\" target=\"_self\">enigmaiot_node_nonsleepy.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_10_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_10_\" class=\"arrow\" onclick=\"toggleFolder('2_10_')\">&#9660;</span><span id=\"img_2_10_\" class=\"iconfopen\" onclick=\"toggleFolder('2_10_')\">&#160;</span><a class=\"el\" href=\"dir_8b0ea9d4c22a99833616492a9ee0642b.html\" target=\"_self\">EnigmaIOTGatewayDummy</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_10_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOTGatewayDummy_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html\" target=\"_self\">EnigmaIOTGatewayDummy.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_10_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"GwOutput__dummy_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"GwOutput__dummy_8cpp.html\" target=\"_self\">GwOutput_dummy.cpp</a></td><td class=\"desc\">Dummy Gateway output module </td></tr>\n<tr id=\"row_2_10_2_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"GwOutput__dummy_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"GwOutput__dummy_8h.html\" target=\"_self\">GwOutput_dummy.h</a></td><td class=\"desc\">Dummy Gateway output module </td></tr>\n<tr id=\"row_2_11_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span id=\"arr_2_11_\" class=\"arrow\" onclick=\"toggleFolder('2_11_')\">&#9660;</span><span id=\"img_2_11_\" class=\"iconfopen\" onclick=\"toggleFolder('2_11_')\">&#160;</span><a class=\"el\" href=\"dir_51f3e27dad008037e4264b749ea8e663.html\" target=\"_self\">EnigmaIOTGatewayMQTT</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_11_0_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"dstrootca_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"dstrootca_8h.html\" target=\"_self\">dstrootca.h</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_11_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOTGatewayMQTT_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html\" target=\"_self\">EnigmaIOTGatewayMQTT.cpp</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_11_2_\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"GwOutput__mqtt_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"GwOutput__mqtt_8cpp.html\" target=\"_self\">GwOutput_mqtt.cpp</a></td><td class=\"desc\">MQTT Gateway output module </td></tr>\n<tr id=\"row_2_11_3_\" class=\"even\"><td class=\"entry\"><span style=\"width:48px;display:inline-block;\">&#160;</span><a href=\"GwOutput__mqtt_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"GwOutput__mqtt_8h.html\" target=\"_self\">GwOutput_mqtt.h</a></td><td class=\"desc\">MQTT Gateway output module </td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_3_\" class=\"arrow\" onclick=\"toggleFolder('3_')\">&#9660;</span><span id=\"img_3_\" class=\"iconfopen\" onclick=\"toggleFolder('3_')\">&#160;</span><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\" target=\"_self\">src</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_3_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"Comms__hal_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"Comms__hal_8h.html\" target=\"_self\">Comms_hal.h</a></td><td class=\"desc\">Generic communication system abstraction layer </td></tr>\n<tr id=\"row_3_1_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"cryptModule_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"cryptModule_8cpp.html\" target=\"_self\">cryptModule.cpp</a></td><td class=\"desc\">Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions </td></tr>\n<tr id=\"row_3_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"cryptModule_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"cryptModule_8h.html\" target=\"_self\">cryptModule.h</a></td><td class=\"desc\">Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions </td></tr>\n<tr id=\"row_3_3_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"EnigmaIoTconfig_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIoTconfig_8h.html\" target=\"_self\">EnigmaIoTconfig.h</a></td><td class=\"desc\">Parameter configuration </td></tr>\n<tr id=\"row_3_4_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"EnigmaIoTconfigAdvanced_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html\" target=\"_self\">EnigmaIoTconfigAdvanced.h</a></td><td class=\"desc\">Parameter configuration </td></tr>\n<tr id=\"row_3_5_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOTdebug_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOTdebug_8h.html\" target=\"_self\">EnigmaIOTdebug.h</a></td><td class=\"desc\">Auxiliary functions for debugging over Serial </td></tr>\n<tr id=\"row_3_6_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOTGateway_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html\" target=\"_self\">EnigmaIOTGateway.cpp</a></td><td class=\"desc\">Library to build a gateway for EnigmaIoT system </td></tr>\n<tr id=\"row_3_7_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOTGateway_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOTGateway_8h.html\" target=\"_self\">EnigmaIOTGateway.h</a></td><td class=\"desc\">Library to build a gateway for EnigmaIoT system </td></tr>\n<tr id=\"row_3_8_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOTjsonController_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOTjsonController_8h.html\" target=\"_self\">EnigmaIOTjsonController.h</a></td><td class=\"desc\">Prototype for JSON/MSGPACK based controller node </td></tr>\n<tr id=\"row_3_9_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOTNode_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOTNode_8cpp.html\" target=\"_self\">EnigmaIOTNode.cpp</a></td><td class=\"desc\">Library to build a node for EnigmaIoT system </td></tr>\n<tr id=\"row_3_10_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOTNode_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOTNode_8h.html\" target=\"_self\">EnigmaIOTNode.h</a></td><td class=\"desc\">Library to build a node for EnigmaIoT system </td></tr>\n<tr id=\"row_3_11_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"EnigmaIOTRingBuffer_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"EnigmaIOTRingBuffer_8h.html\" target=\"_self\">EnigmaIOTRingBuffer.h</a></td><td class=\"desc\">Library to build a gateway for EnigmaIoT system </td></tr>\n<tr id=\"row_3_12_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"espnow__hal_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"espnow__hal_8cpp.html\" target=\"_self\">espnow_hal.cpp</a></td><td class=\"desc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms </td></tr>\n<tr id=\"row_3_13_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"espnow__hal_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"espnow__hal_8h.html\" target=\"_self\">espnow_hal.h</a></td><td class=\"desc\">ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms </td></tr>\n<tr id=\"row_3_14_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"Filter_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"Filter_8cpp.html\" target=\"_self\">Filter.cpp</a></td><td class=\"desc\">Filter to process message rate or other values </td></tr>\n<tr id=\"row_3_15_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"Filter_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"Filter_8h.html\" target=\"_self\">Filter.h</a></td><td class=\"desc\">Filter to process message rate or other values </td></tr>\n<tr id=\"row_3_16_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"GatewayAPI_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"GatewayAPI_8cpp.html\" target=\"_self\">GatewayAPI.cpp</a></td><td class=\"desc\">API web server to control EnigmaIOT Gateway </td></tr>\n<tr id=\"row_3_17_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"GatewayAPI_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"GatewayAPI_8h.html\" target=\"_self\">GatewayAPI.h</a></td><td class=\"desc\">API web server to control EnigmaIOT Gateway </td></tr>\n<tr id=\"row_3_18_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"GwOutput__generic_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"GwOutput__generic_8h.html\" target=\"_self\">GwOutput_generic.h</a></td><td class=\"desc\">Generic Gateway output module template </td></tr>\n<tr id=\"row_3_19_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haBinarySensor_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haBinarySensor_8cpp.html\" target=\"_self\">haBinarySensor.cpp</a></td><td class=\"desc\">Home Assistant binary sensor integration </td></tr>\n<tr id=\"row_3_20_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haBinarySensor_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haBinarySensor_8h.html\" target=\"_self\">haBinarySensor.h</a></td><td class=\"desc\">Home Assistant binary sensor integration </td></tr>\n<tr id=\"row_3_21_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haCover_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haCover_8cpp.html\" target=\"_self\">haCover.cpp</a></td><td class=\"desc\">Home Assistant cover and shade integration </td></tr>\n<tr id=\"row_3_22_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haCover_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haCover_8h.html\" target=\"_self\">haCover.h</a></td><td class=\"desc\">Home Assistant cover and shade integration </td></tr>\n<tr id=\"row_3_23_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haEntity_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haEntity_8h.html\" target=\"_self\">haEntity.h</a></td><td class=\"desc\">Defines an entity for Home Assistant autodiscovery </td></tr>\n<tr id=\"row_3_24_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haSensor_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haSensor_8cpp.html\" target=\"_self\">haSensor.cpp</a></td><td class=\"desc\">Home Assistant sensor integration </td></tr>\n<tr id=\"row_3_25_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haSensor_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haSensor_8h.html\" target=\"_self\">haSensor.h</a></td><td class=\"desc\">Home Assistant sensor integration </td></tr>\n<tr id=\"row_3_26_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haSwitch_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haSwitch_8cpp.html\" target=\"_self\">haSwitch.cpp</a></td><td class=\"desc\">Home Assistant switch integration </td></tr>\n<tr id=\"row_3_27_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haSwitch_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haSwitch_8h.html\" target=\"_self\">haSwitch.h</a></td><td class=\"desc\">Home Assistant switch integration </td></tr>\n<tr id=\"row_3_28_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haTrigger_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haTrigger_8cpp.html\" target=\"_self\">haTrigger.cpp</a></td><td class=\"desc\">Home Assistant trigger integration </td></tr>\n<tr id=\"row_3_29_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"haTrigger_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"haTrigger_8h.html\" target=\"_self\">haTrigger.h</a></td><td class=\"desc\">Home Assistant trigger integration </td></tr>\n<tr id=\"row_3_30_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"helperFunctions_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"helperFunctions_8cpp.html\" target=\"_self\">helperFunctions.cpp</a></td><td class=\"desc\">Auxiliary function definition </td></tr>\n<tr id=\"row_3_31_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"helperFunctions_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"helperFunctions_8h.html\" target=\"_self\">helperFunctions.h</a></td><td class=\"desc\">Auxiliary function definition </td></tr>\n<tr id=\"row_3_32_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"NodeList_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"NodeList_8cpp.html\" target=\"_self\">NodeList.cpp</a></td><td class=\"desc\">EnigmaIoT sensor node management structures </td></tr>\n<tr id=\"row_3_33_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"NodeList_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"NodeList_8h.html\" target=\"_self\">NodeList.h</a></td><td class=\"desc\">EnigmaIoT sensor node management structures </td></tr>\n<tr id=\"row_3_34_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"timeManager_8cpp_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"timeManager_8cpp.html\" target=\"_self\">timeManager.cpp</a></td><td class=\"desc\">Clock synchronisation calculations </td></tr>\n<tr id=\"row_3_35_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a href=\"timeManager_8h_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"timeManager_8h.html\" target=\"_self\">timeManager.h</a></td><td class=\"desc\">Clock synchronisation calculations </td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index__5F\"></a>- _ -</h3><ul>\n<li>_filterType\n: <a class=\"el\" href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">FilterClass</a>\n</li>\n<li>_index\n: <a class=\"el\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">FilterClass</a>\n</li>\n<li>_order\n: <a class=\"el\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">FilterClass</a>\n</li>\n<li>_orderedValues\n: <a class=\"el\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">FilterClass</a>\n</li>\n<li>_ownPeerType\n: <a class=\"el\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">Comms_halClass</a>\n</li>\n<li>_rawValues\n: <a class=\"el\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">FilterClass</a>\n</li>\n<li>_weightValues\n: <a class=\"el\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">FilterClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_a\"></a>- a -</h3><ul>\n<li>addExpiration()\n: <a class=\"el\" href=\"classHABinarySensor.html#a857bc07743e8564db8476907f925c48e\">HABinarySensor</a>\n</li>\n<li>addInputMsgQueue()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">EnigmaIOTGatewayClass</a>\n</li>\n<li>addMQTTqueue()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">GwOutput_MQTT</a>\n</li>\n<li>addPeer()\n: <a class=\"el\" href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">Espnow_halClass</a>\n</li>\n<li>addr\n: <a class=\"el\" href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">msg_queue_item_t</a>\n</li>\n<li>addValue()\n: <a class=\"el\" href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">FilterClass</a>\n</li>\n<li>addWeigth()\n: <a class=\"el\" href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">FilterClass</a>\n</li>\n<li>addWiFiManagerParameter()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">EnigmaIOTNodeClass</a>\n</li>\n<li>adjustTime()\n: <a class=\"el\" href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">TimeManagerClass</a>\n</li>\n<li>allowSendAttributes()\n: <a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">HAEntity</a>\n</li>\n<li>askedTimeSync\n: <a class=\"el\" href=\"classNode.html#a918b7ad8582d1b2d569dbd66a262ee50\">Node</a>\n</li>\n<li>aveFilter()\n: <a class=\"el\" href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">FilterClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_b\"></a>- b -</h3><ul>\n<li>begin()\n: <a class=\"el\" href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">Espnow_halClass</a>\n, <a class=\"el\" href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">GatewayAPI</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">GwOutput_MQTT</a>\n</li>\n<li>bootStatus\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a460a8b71cd14d353299b85f46a9cf9f6\">smartSwitchControllerHw_t</a>\n</li>\n<li>bootStatusListParam\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a652db9c565625d205fa589b5b7922431\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>bootStatusParam\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab2947853c9c4746ab59e067f00359bff\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>broadcastEnabled\n: <a class=\"el\" href=\"classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed\">Node</a>\n</li>\n<li>broadcastIsEnabled()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a742b9e627fee356913b069c64499cd5f\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">Node</a>\n</li>\n<li>broadcastKey\n: <a class=\"el\" href=\"structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e\">rtcmem_data_t</a>\n</li>\n<li>broadcastKeyRequested\n: <a class=\"el\" href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">Node</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">rtcmem_data_t</a>\n</li>\n<li>broadcastKeyValid\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67\">rtcmem_data_t</a>\n</li>\n<li>broadcastNode\n: <a class=\"el\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">NodeList</a>\n</li>\n<li>buffer\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>buildGwInfo()\n: <a class=\"el\" href=\"classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f\">GatewayAPI</a>\n</li>\n<li>buildHADiscovery()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>buildHALinkDiscovery()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>buildHASwitchDiscovery()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>buildHATriggerDiscovery()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>buttonPin\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a52575acecb3433d8a42b5eae1d036484\">smartSwitchControllerHw_t</a>\n</li>\n<li>buttonPinParam\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af137736da8e1cb6c92aba6972807704a\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>buttonPressSent\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab9f55dca7e50e7bbccd5b01d77fc0f05\">CONTROLLER_CLASS_NAME</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_c\"></a>- c -</h3><ul>\n<li>capacity\n: <a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">HAEntity</a>\n</li>\n<li>channel\n: <a class=\"el\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">Comms_halClass</a>\n, <a class=\"el\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">gateway_config_t</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">rtcmem_data_t</a>\n</li>\n<li>checkCRC()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">EnigmaIOTNodeClass</a>\n</li>\n<li>checkNodeName()\n: <a class=\"el\" href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">NodeList</a>\n</li>\n<li>checkResetButton()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">EnigmaIOTNodeClass</a>\n</li>\n<li>clear()\n: <a class=\"el\" href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">FilterClass</a>\n</li>\n<li>clearFlash()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">EnigmaIOTNodeClass</a>\n</li>\n<li>clearRTC()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">EnigmaIOTNodeClass</a>\n</li>\n<li>clientHello()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\">EnigmaIOTNodeClass</a>\n</li>\n<li>clientId\n: <a class=\"el\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">GatewayOutput_generic</a>\n</li>\n<li>clock()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">TimeManagerClass</a>\n</li>\n<li>clock_us()\n: <a class=\"el\" href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">TimeManagerClass</a>\n</li>\n<li>clockRequest()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\">EnigmaIOTNodeClass</a>\n</li>\n<li>clockResponse()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\">EnigmaIOTGatewayClass</a>\n</li>\n<li>clockSyncEnabled\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">EnigmaIOTNodeClass</a>\n</li>\n<li>comm\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">EnigmaIOTNodeClass</a>\n</li>\n<li>commErrors\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">rtcmem_data_t</a>\n</li>\n<li>COMMS_HAL_ADDR_LEN\n: <a class=\"el\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">Espnow_halClass</a>\n</li>\n<li>COMMS_HAL_MAX_MESSAGE_LENGTH\n: <a class=\"el\" href=\"classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635\">Espnow_halClass</a>\n</li>\n<li>Comms_halClass()\n: <a class=\"el\" href=\"classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac\">Comms_halClass</a>\n</li>\n<li>config\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a1ff33c36324249c1791357337ed932c6\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>configCleared\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">EnigmaIOTNodeClass</a>\n</li>\n<li>configManagerExit()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">GwOutput_MQTT</a>\n</li>\n<li>configManagerStart()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">GwOutput_MQTT</a>\n</li>\n<li>configWiFiManager()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">EnigmaIOTNodeClass</a>\n</li>\n<li>connectInform()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController</a>\n</li>\n<li>countActiveNodes()\n: <a class=\"el\" href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">NodeList</a>\n</li>\n<li>crc32\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">rtcmem_data_t</a>\n</li>\n<li>cycleStartedTime\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">EnigmaIOTNodeClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_d\"></a>- d -</h3><ul>\n<li>data\n: <a class=\"el\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">msg_queue_item_t</a>\n</li>\n<li>dataMessage()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataMessageEncrypt\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataMessageSendEncoding\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataMessageSendPending\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataMessageSent\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataMessageSentLength\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataRcvd\n: <a class=\"el\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">Comms_halClass</a>\n</li>\n<li>decryptBuffer()\n: <a class=\"el\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule</a>\n</li>\n<li>defaultConfig()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>deleteNode()\n: <a class=\"el\" href=\"classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9\">GatewayAPI</a>\n</li>\n<li>deviceClassStr()\n: <a class=\"el\" href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">HACover</a>\n, <a class=\"el\" href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">HASensor</a>\n</li>\n<li>deviceType\n: <a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">HAEntity</a>\n</li>\n<li>deviceTypeStr()\n: <a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">HAEntity</a>\n</li>\n<li>disconnectInform()\n: <a class=\"el\" href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">EnigmaIOTjsonController</a>\n</li>\n<li>divide()\n: <a class=\"el\" href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">FilterClass</a>\n</li>\n<li>dns\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">EnigmaIOTGatewayClass</a>\n</li>\n<li>doResetConfig()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">EnigmaIOTGatewayClass</a>\n</li>\n<li>doSave()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">EnigmaIOTGatewayClass</a>\n</li>\n<li>downlinkCb\n: <a class=\"el\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">GatewayOutput_generic</a>\n</li>\n<li>downstreamDataMessage()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">EnigmaIOTGatewayClass</a>\n</li>\n<li>dstAddress\n: <a class=\"el\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">comms_queue_item_t</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_e\"></a>- e -</h3><ul>\n<li>empty()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>enableBroadcast()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNode.html#a2c6ecfa165b71155d3d25331ca56d98e\">Node</a>\n</li>\n<li>enableClockSync()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass</a>\n</li>\n<li>enableTransmit()\n: <a class=\"el\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f\">Espnow_halClass</a>\n</li>\n<li>encryptBuffer()\n: <a class=\"el\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule</a>\n</li>\n<li>enigmaIotGateway\n: <a class=\"el\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">GatewayOutput_generic</a>\n</li>\n<li>enigmaIotNode\n: <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">EnigmaIOTjsonController</a>\n</li>\n<li>EnigmaIOTRingBuffer()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a1c18bc66f575fffc206be22f96fc6a16\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>enigmaIOTVersion\n: <a class=\"el\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">Node</a>\n</li>\n<li>entityConfig\n: <a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">HAEntity</a>\n</li>\n<li>espClient\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">GwOutput_MQTT</a>\n</li>\n<li>Espnow_halClass()\n: <a class=\"el\" href=\"classEspnow__halClass.html#ae9def9fb9d9e8370e70e77367900669f\">Espnow_halClass</a>\n</li>\n<li>espnowLoopTask\n: <a class=\"el\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">Espnow_halClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_f\"></a>- f -</h3><ul>\n<li>FilterClass()\n: <a class=\"el\" href=\"classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd\">FilterClass</a>\n</li>\n<li>findEmptyNode()\n: <a class=\"el\" href=\"classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711\">NodeList</a>\n</li>\n<li>flashBlue\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">EnigmaIOTNodeClass</a>\n</li>\n<li>flashRx\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">EnigmaIOTGatewayClass</a>\n</li>\n<li>flashTx\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">EnigmaIOTGatewayClass</a>\n</li>\n<li>front()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_a\"></a>- a -</h3><ul>\n<li>addExpiration()\n: <a class=\"el\" href=\"classHABinarySensor.html#a857bc07743e8564db8476907f925c48e\">HABinarySensor</a>\n</li>\n<li>addInputMsgQueue()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43\">EnigmaIOTGatewayClass</a>\n</li>\n<li>addMQTTqueue()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f\">GwOutput_MQTT</a>\n</li>\n<li>addPeer()\n: <a class=\"el\" href=\"classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986\">Espnow_halClass</a>\n</li>\n<li>addValue()\n: <a class=\"el\" href=\"classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337\">FilterClass</a>\n</li>\n<li>addWeigth()\n: <a class=\"el\" href=\"classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f\">FilterClass</a>\n</li>\n<li>addWiFiManagerParameter()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742\">EnigmaIOTNodeClass</a>\n</li>\n<li>adjustTime()\n: <a class=\"el\" href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">TimeManagerClass</a>\n</li>\n<li>allowSendAttributes()\n: <a class=\"el\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">HAEntity</a>\n</li>\n<li>aveFilter()\n: <a class=\"el\" href=\"classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78\">FilterClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_b\"></a>- b -</h3><ul>\n<li>begin()\n: <a class=\"el\" href=\"classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50\">Espnow_halClass</a>\n, <a class=\"el\" href=\"classGatewayAPI.html#af7c82da248870648a385a112d298ed78\">GatewayAPI</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3\">GwOutput_MQTT</a>\n</li>\n<li>broadcastIsEnabled()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a742b9e627fee356913b069c64499cd5f\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNode.html#ae6768d968b8f72fb12001fa3895a4670\">Node</a>\n</li>\n<li>buildGwInfo()\n: <a class=\"el\" href=\"classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f\">GatewayAPI</a>\n</li>\n<li>buildHADiscovery()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>buildHALinkDiscovery()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>buildHASwitchDiscovery()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>buildHATriggerDiscovery()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071\">CONTROLLER_CLASS_NAME</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_c\"></a>- c -</h3><ul>\n<li>checkCRC()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8\">EnigmaIOTNodeClass</a>\n</li>\n<li>checkNodeName()\n: <a class=\"el\" href=\"classNodeList.html#a6702f6b65634da0500f5e99ccf017178\">NodeList</a>\n</li>\n<li>checkResetButton()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53\">EnigmaIOTNodeClass</a>\n</li>\n<li>clear()\n: <a class=\"el\" href=\"classFilterClass.html#a29933bc3e2094170afd380cee3763d95\">FilterClass</a>\n</li>\n<li>clearFlash()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09\">EnigmaIOTNodeClass</a>\n</li>\n<li>clearRTC()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f\">EnigmaIOTNodeClass</a>\n</li>\n<li>clientHello()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c\">EnigmaIOTNodeClass</a>\n</li>\n<li>clock()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">TimeManagerClass</a>\n</li>\n<li>clock_us()\n: <a class=\"el\" href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">TimeManagerClass</a>\n</li>\n<li>clockRequest()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b\">EnigmaIOTNodeClass</a>\n</li>\n<li>clockResponse()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9\">EnigmaIOTGatewayClass</a>\n</li>\n<li>Comms_halClass()\n: <a class=\"el\" href=\"classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac\">Comms_halClass</a>\n</li>\n<li>configManagerExit()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559\">GwOutput_MQTT</a>\n</li>\n<li>configManagerStart()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e\">GwOutput_MQTT</a>\n</li>\n<li>configWiFiManager()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42\">EnigmaIOTNodeClass</a>\n</li>\n<li>connectInform()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d\">EnigmaIOTjsonController</a>\n</li>\n<li>countActiveNodes()\n: <a class=\"el\" href=\"classNodeList.html#abb4895c5b9ae6b041c9102178de837c4\">NodeList</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_d\"></a>- d -</h3><ul>\n<li>dataMessage()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206\">EnigmaIOTNodeClass</a>\n</li>\n<li>decryptBuffer()\n: <a class=\"el\" href=\"classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6\">CryptModule</a>\n</li>\n<li>defaultConfig()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>deleteNode()\n: <a class=\"el\" href=\"classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9\">GatewayAPI</a>\n</li>\n<li>deviceClassStr()\n: <a class=\"el\" href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">HACover</a>\n, <a class=\"el\" href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">HASensor</a>\n</li>\n<li>deviceTypeStr()\n: <a class=\"el\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">HAEntity</a>\n</li>\n<li>disconnectInform()\n: <a class=\"el\" href=\"classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0\">EnigmaIOTjsonController</a>\n</li>\n<li>divide()\n: <a class=\"el\" href=\"classFilterClass.html#a99497784c6f8a22e89c19200132797b9\">FilterClass</a>\n</li>\n<li>doResetConfig()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda\">EnigmaIOTGatewayClass</a>\n</li>\n<li>doSave()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508\">EnigmaIOTGatewayClass</a>\n</li>\n<li>downstreamDataMessage()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165\">EnigmaIOTGatewayClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_e\"></a>- e -</h3><ul>\n<li>empty()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>enableBroadcast()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNode.html#a2c6ecfa165b71155d3d25331ca56d98e\">Node</a>\n</li>\n<li>enableClockSync()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4\">EnigmaIOTNodeClass</a>\n</li>\n<li>enableTransmit()\n: <a class=\"el\" href=\"classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f\">Espnow_halClass</a>\n</li>\n<li>encryptBuffer()\n: <a class=\"el\" href=\"classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc\">CryptModule</a>\n</li>\n<li>EnigmaIOTRingBuffer()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a1c18bc66f575fffc206be22f96fc6a16\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>Espnow_halClass()\n: <a class=\"el\" href=\"classEspnow__halClass.html#ae9def9fb9d9e8370e70e77367900669f\">Espnow_halClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_f\"></a>- f -</h3><ul>\n<li>FilterClass()\n: <a class=\"el\" href=\"classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd\">FilterClass</a>\n</li>\n<li>findEmptyNode()\n: <a class=\"el\" href=\"classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711\">NodeList</a>\n</li>\n<li>front()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_g.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_g\"></a>- g -</h3><ul>\n<li>getActiveNodesNumber()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getAddressLength()\n: <a class=\"el\" href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d\">Espnow_halClass</a>\n</li>\n<li>getAnounceMessage()\n: <a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">HAEntity</a>\n</li>\n<li>getBroadcastNode()\n: <a class=\"el\" href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">NodeList</a>\n</li>\n<li>getCommsQueue()\n: <a class=\"el\" href=\"classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5\">Espnow_halClass</a>\n</li>\n<li>getDelay()\n: <a class=\"el\" href=\"classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a\">TimeManagerClass</a>\n</li>\n<li>getDH1()\n: <a class=\"el\" href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">CryptModule</a>\n</li>\n<li>getDH2()\n: <a class=\"el\" href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">CryptModule</a>\n</li>\n<li>getDiscoveryJson()\n: <a class=\"el\" href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">HACover</a>\n, <a class=\"el\" href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">HASensor</a>\n, <a class=\"el\" href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">HASwitch</a>\n, <a class=\"el\" href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">HATrigger</a>\n</li>\n<li>getDiscoveryTopic()\n: <a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">HAEntity</a>\n</li>\n<li>getEncriptionKey()\n: <a class=\"el\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">Node</a>\n</li>\n<li>getErrorPackets()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getGwInfo()\n: <a class=\"el\" href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">GatewayAPI</a>\n</li>\n<li>getInitAsSleepy()\n: <a class=\"el\" href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">Node</a>\n</li>\n<li>getInputMsgQueue()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getKeyValidFrom()\n: <a class=\"el\" href=\"classNode.html#a30a8e0aaad582a1baa269c6641150586\">Node</a>\n</li>\n<li>getLastBroadcastMsgCounter()\n: <a class=\"el\" href=\"classNodeList.html#acfff6ed812a219b7b7514989da7fc34e\">NodeList</a>\n</li>\n<li>getLastControlCounter()\n: <a class=\"el\" href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">Node</a>\n</li>\n<li>getLastDownlinkMsgCounter()\n: <a class=\"el\" href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">Node</a>\n</li>\n<li>getLastMessageCounter()\n: <a class=\"el\" href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">Node</a>\n</li>\n<li>getLastMessageTime()\n: <a class=\"el\" href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">Node</a>\n</li>\n<li>getMacAddress()\n: <a class=\"el\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">Node</a>\n</li>\n<li>getMaxMessageLength()\n: <a class=\"el\" href=\"classEspnow__halClass.html#a3a037c0d31f906bc24a8475b376072fd\">Espnow_halClass</a>\n</li>\n<li>getMaxNodes()\n: <a class=\"el\" href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">GatewayAPI</a>\n</li>\n<li>getMQTTqueue()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">GwOutput_MQTT</a>\n</li>\n<li>getNetworkKey()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getNetworkName()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getNewNode()\n: <a class=\"el\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">NodeList</a>\n</li>\n<li>getNextActiveNode()\n: <a class=\"el\" href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">NodeList</a>\n</li>\n<li>getNode()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">EnigmaIOTNodeClass</a>\n</li>\n<li>getNodeData()\n: <a class=\"el\" href=\"classNode.html#a129745eaa2b8e08ac8201809a6e2cb17\">Node</a>\n</li>\n<li>getNodeFromID()\n: <a class=\"el\" href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">NodeList</a>\n</li>\n<li>getNodeFromMAC()\n: <a class=\"el\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">NodeList</a>\n</li>\n<li>getNodeFromName()\n: <a class=\"el\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">NodeList</a>\n</li>\n<li>getNodeFromParam()\n: <a class=\"el\" href=\"classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2\">GatewayAPI</a>\n</li>\n<li>getNodeId()\n: <a class=\"el\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">Node</a>\n</li>\n<li>getNodeInfo()\n: <a class=\"el\" href=\"classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f\">GatewayAPI</a>\n</li>\n<li>getNodeName()\n: <a class=\"el\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">Node</a>\n</li>\n<li>getNodeNumber()\n: <a class=\"el\" href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">GatewayAPI</a>\n</li>\n<li>getNodes()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">GatewayAPI</a>\n</li>\n<li>getOffset()\n: <a class=\"el\" href=\"classTimeManagerClass.html#ae188f14a7cf5c38c5ab09b0dc5460490\">TimeManagerClass</a>\n</li>\n<li>getOTArunning()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3398ebecf52e1d7b5493d34ed011c38f\">EnigmaIOTNodeClass</a>\n</li>\n<li>getPacketsHour()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getPER()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getPrivDHKey()\n: <a class=\"el\" href=\"classCryptModule.html#a9d106f893f329d8648aba205b3717806\">CryptModule</a>\n</li>\n<li>getPubDHKey()\n: <a class=\"el\" href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">CryptModule</a>\n</li>\n<li>getRSSI()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNode.html#ac9cb809cbf8a76bda02e2c92731b213b\">Node</a>\n</li>\n<li>getSHA256()\n: <a class=\"el\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule</a>\n</li>\n<li>getShouldSave()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getSleepTime()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">EnigmaIOTNodeClass</a>\n</li>\n<li>getSleepy()\n: <a class=\"el\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">Node</a>\n</li>\n<li>getStatus()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">Node</a>\n</li>\n<li>getTotalPackets()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getTriggerSubtypeStr()\n: <a class=\"el\" href=\"classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b\">HATrigger</a>\n</li>\n<li>getTriggerTypeStr()\n: <a class=\"el\" href=\"classHATrigger.html#a25585b365d726848d22ad5c4f299d803\">HATrigger</a>\n</li>\n<li>getVersion()\n: <a class=\"el\" href=\"classNode.html#a628b04339453635be34148c9fbe66506\">Node</a>\n</li>\n<li>GwOutput_MQTT()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a50976e1efb3c1570e3596672ffd83c56\">GwOutput_MQTT</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_h\"></a>- h -</h3><ul>\n<li>HABinarySensor()\n: <a class=\"el\" href=\"classHABinarySensor.html#a24cc503973f65dadac7575a2bba823b6\">HABinarySensor</a>\n</li>\n<li>HACover()\n: <a class=\"el\" href=\"classHACover.html#acc7fe4e246ebd9af4ff958447ec78d86\">HACover</a>\n</li>\n<li>HAEntity()\n: <a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a>\n</li>\n<li>handle()\n: <a class=\"el\" href=\"classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">Espnow_halClass</a>\n</li>\n<li>hasClockSync()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">EnigmaIOTNodeClass</a>\n</li>\n<li>HASensor()\n: <a class=\"el\" href=\"classHASensor.html#a07979a82942d08d6f24db5b76e6fe269\">HASensor</a>\n</li>\n<li>HASwitch()\n: <a class=\"el\" href=\"classHASwitch.html#a282ac7ec44e7fc43d0d6493808e68ba3\">HASwitch</a>\n</li>\n<li>HATrigger()\n: <a class=\"el\" href=\"classHATrigger.html#a91af9e612da244483b5704c4ed835d0f\">HATrigger</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_i.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_i\"></a>- i -</h3><ul>\n<li>incLastBroadcastMsgCounter()\n: <a class=\"el\" href=\"classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042\">NodeList</a>\n</li>\n<li>initBroadcastNode()\n: <a class=\"el\" href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">NodeList</a>\n</li>\n<li>initComms()\n: <a class=\"el\" href=\"classComms__halClass.html#a67d74c717b8f3919307738be9d963312\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">Espnow_halClass</a>\n</li>\n<li>initRateFilter()\n: <a class=\"el\" href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">Node</a>\n</li>\n<li>invalidateKey()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">EnigmaIOTGatewayClass</a>\n</li>\n<li>isBroadcastKeyRequested()\n: <a class=\"el\" href=\"classNode.html#a30aa0104f6df938075c7ff4ac64b3f41\">Node</a>\n</li>\n<li>isFull()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>isKeyValid()\n: <a class=\"el\" href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">Node</a>\n</li>\n<li>isRegistered()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">Node</a>\n</li>\n<li>isTimeAdjusted()\n: <a class=\"el\" href=\"classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615\">TimeManagerClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_l.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_l\"></a>- l -</h3><ul>\n<li>loadConfig()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">GwOutput_MQTT</a>\n</li>\n<li>loadFlashData()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">EnigmaIOTNodeClass</a>\n</li>\n<li>loadRTCData()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">EnigmaIOTNodeClass</a>\n</li>\n<li>loop()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">GwOutput_MQTT</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_m.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_m\"></a>- m -</h3><ul>\n<li>manageMessage()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\">EnigmaIOTNodeClass</a>\n</li>\n<li>measureMessage()\n: <a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">HAEntity</a>\n</li>\n<li>medianFilter()\n: <a class=\"el\" href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">FilterClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_n.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_n\"></a>- n -</h3><ul>\n<li>newNodeSend()\n: <a class=\"el\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">GwOutput_MQTT</a>\n</li>\n<li>Node()\n: <a class=\"el\" href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">Node</a>\n</li>\n<li>nodeDisconnectedSend()\n: <a class=\"el\" href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">GwOutput_MQTT</a>\n</li>\n<li>NodeList()\n: <a class=\"el\" href=\"classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f\">NodeList</a>\n</li>\n<li>nodeNameSetRespose()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381\">EnigmaIOTGatewayClass</a>\n</li>\n<li>nodeOp()\n: <a class=\"el\" href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">GatewayAPI</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_o.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_o\"></a>- o -</h3><ul>\n<li>onConnected()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass</a>\n</li>\n<li>onDataRcvd()\n: <a class=\"el\" href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">Espnow_halClass</a>\n</li>\n<li>onDataRx()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass</a>\n</li>\n<li>onDataSent()\n: <a class=\"el\" href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">Espnow_halClass</a>\n</li>\n<li>onDisconnected()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass</a>\n</li>\n<li>onDlData()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">GwOutput_MQTT</a>\n</li>\n<li>onGatewayRestartRequested()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db\">EnigmaIOTGatewayClass</a>\n</li>\n<li>onHADiscovery()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83\">EnigmaIOTGatewayClass</a>\n</li>\n<li>onNewNode()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">EnigmaIOTGatewayClass</a>\n</li>\n<li>onNodeDisconnected()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">EnigmaIOTGatewayClass</a>\n</li>\n<li>onNotFound()\n: <a class=\"el\" href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">GatewayAPI</a>\n</li>\n<li>onWiFiManagerExit()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">EnigmaIOTNodeClass</a>\n</li>\n<li>onWiFiManagerStarted()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">EnigmaIOTNodeClass</a>\n</li>\n<li>outputControlSend()\n: <a class=\"el\" href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">GwOutput_MQTT</a>\n</li>\n<li>outputDataSend()\n: <a class=\"el\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">GwOutput_MQTT</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_p.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_p\"></a>- p -</h3><ul>\n<li>pop()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>popCommsQueue()\n: <a class=\"el\" href=\"classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1\">Espnow_halClass</a>\n</li>\n<li>popInputMsgQueue()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">EnigmaIOTGatewayClass</a>\n</li>\n<li>popMQTTqueue()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">GwOutput_MQTT</a>\n</li>\n<li>printToSerial()\n: <a class=\"el\" href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">Node</a>\n, <a class=\"el\" href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">NodeList</a>\n</li>\n<li>processBroadcastKeyMessage()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">EnigmaIOTNodeClass</a>\n</li>\n<li>processClientHello()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processClockRequest()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processClockResponse()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\">EnigmaIOTNodeClass</a>\n</li>\n<li>processControlCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\">EnigmaIOTNodeClass</a>\n</li>\n<li>processControlMessage()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processDataMessage()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processDownstreamData()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">EnigmaIOTNodeClass</a>\n</li>\n<li>processGetNameCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\">EnigmaIOTNodeClass</a>\n</li>\n<li>processGetRSSICommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\">EnigmaIOTNodeClass</a>\n</li>\n<li>processGetSleepTimeCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\">EnigmaIOTNodeClass</a>\n</li>\n<li>processInvalidateKey()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\">EnigmaIOTNodeClass</a>\n</li>\n<li>processNodeNameSet()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processOTACommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\">EnigmaIOTNodeClass</a>\n</li>\n<li>processRxCommand()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController</a>\n</li>\n<li>processServerHello()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetIdentifyCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetNameCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetNameResponse()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetResetConfigCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetRestartCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetSleepTimeCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\">EnigmaIOTNodeClass</a>\n</li>\n<li>processUnencryptedDataMessage()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processVersionCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\">EnigmaIOTNodeClass</a>\n</li>\n<li>publishMQTT()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">GwOutput_MQTT</a>\n</li>\n<li>push()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_q.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_q\"></a>- q -</h3><ul>\n<li>quicksort()\n: <a class=\"el\" href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">FilterClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_r.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_r\"></a>- r -</h3><ul>\n<li>random()\n: <a class=\"el\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule</a>\n</li>\n<li>reconnect()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">GwOutput_MQTT</a>\n</li>\n<li>reportRSSI()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">EnigmaIOTNodeClass</a>\n</li>\n<li>reset()\n: <a class=\"el\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">Node</a>\n, <a class=\"el\" href=\"classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8\">TimeManagerClass</a>\n</li>\n<li>resetConfig()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325\">EnigmaIOTNodeClass</a>\n</li>\n<li>resetGw()\n: <a class=\"el\" href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">GatewayAPI</a>\n</li>\n<li>restart()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">EnigmaIOTNodeClass</a>\n</li>\n<li>restartGw()\n: <a class=\"el\" href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">GatewayAPI</a>\n</li>\n<li>restartNode()\n: <a class=\"el\" href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">GatewayAPI</a>\n</li>\n<li>restartNodeRequest()\n: <a class=\"el\" href=\"classGatewayAPI.html#ac4244196077eddbed077df9d163198ea\">GatewayAPI</a>\n</li>\n<li>runHandle()\n: <a class=\"el\" href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">Espnow_halClass</a>\n</li>\n<li>rx_cb()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">Espnow_halClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_s\"></a>- s -</h3><ul>\n<li>saveConfig()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">GwOutput_MQTT</a>\n</li>\n<li>saveFlashData()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">EnigmaIOTNodeClass</a>\n</li>\n<li>saveRTCData()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">EnigmaIOTNodeClass</a>\n</li>\n<li>searchForGateway()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">EnigmaIOTNodeClass</a>\n</li>\n<li>send()\n: <a class=\"el\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">Espnow_halClass</a>\n</li>\n<li>sendBootStatus()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sendBroadcastKey()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\">EnigmaIOTGatewayClass</a>\n</li>\n<li>sendCommandResp()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">EnigmaIOTjsonController</a>\n</li>\n<li>sendData()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass</a>\n</li>\n<li>sendDataCallback()\n: <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">EnigmaIOTjsonController</a>\n</li>\n<li>sendDownstream()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">EnigmaIOTGatewayClass</a>\n</li>\n<li>sendEspNowMessage()\n: <a class=\"el\" href=\"classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297\">Espnow_halClass</a>\n</li>\n<li>sendHADiscoveryJSON()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\">EnigmaIOTGatewayClass</a>\n</li>\n<li>sendHADiscoveryMessage()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass</a>\n</li>\n<li>sendJson()\n: <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">EnigmaIOTjsonController</a>\n</li>\n<li>sendLedStatus()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sendLinkStatus()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sendNodeNameSet()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">EnigmaIOTNodeClass</a>\n</li>\n<li>sendRelayStatus()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sendRestart()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">EnigmaIOTNodeClass</a>\n</li>\n<li>sendStartAnouncement()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">EnigmaIOTjsonController</a>\n</li>\n<li>sendTemperature()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sendUnencryptedData()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2e6973be4195ba354607c631c587297e\">EnigmaIOTNodeClass</a>\n</li>\n<li>serverHello()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\">EnigmaIOTGatewayClass</a>\n</li>\n<li>setBoot()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>setBroadcastKeyRequested()\n: <a class=\"el\" href=\"classNode.html#a0e298bac431d8ac9e98fb12b71292de1\">Node</a>\n</li>\n<li>setClock()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">GwOutput_MQTT</a>\n</li>\n<li>setDeviceClass()\n: <a class=\"el\" href=\"classHABinarySensor.html#af305236afbd0405010d1611eac965530\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHACover.html#add81f3124d1f1f66745798d27b467098\">HACover</a>\n, <a class=\"el\" href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">HASensor</a>\n</li>\n<li>setDlCallback()\n: <a class=\"el\" href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">GatewayOutput_generic</a>\n</li>\n<li>setEncryptionKey()\n: <a class=\"el\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">Node</a>\n</li>\n<li>setExpireTime()\n: <a class=\"el\" href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">HASensor</a>\n</li>\n<li>setInitAsSleepy()\n: <a class=\"el\" href=\"classNode.html#a3621fd27cee1a28145a7daa167ad0b3d\">Node</a>\n</li>\n<li>setKeyValid()\n: <a class=\"el\" href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">Node</a>\n</li>\n<li>setKeyValidFrom()\n: <a class=\"el\" href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">Node</a>\n</li>\n<li>setLastControlCounter()\n: <a class=\"el\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">Node</a>\n</li>\n<li>setLastDownlinkMsgCounter()\n: <a class=\"el\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">Node</a>\n</li>\n<li>setLastMessageCounter()\n: <a class=\"el\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">Node</a>\n</li>\n<li>setLastMessageTime()\n: <a class=\"el\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">Node</a>\n</li>\n<li>setLed()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass</a>\n</li>\n<li>setLinked()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>setMacAddress()\n: <a class=\"el\" href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">Node</a>\n</li>\n<li>setNameSufix()\n: <a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">HAEntity</a>\n</li>\n<li>setNodeAddress()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass</a>\n</li>\n<li>setNodeId()\n: <a class=\"el\" href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">Node</a>\n</li>\n<li>setNodeName()\n: <a class=\"el\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">Node</a>\n</li>\n<li>setOffDelay()\n: <a class=\"el\" href=\"classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7\">HABinarySensor</a>\n</li>\n<li>setPayload()\n: <a class=\"el\" href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">HATrigger</a>\n</li>\n<li>setPayloadClose()\n: <a class=\"el\" href=\"classHACover.html#a372d3fac011d58154daca97311fb5a94\">HACover</a>\n</li>\n<li>setPayloadGoto()\n: <a class=\"el\" href=\"classHACover.html#ac2f06095a52cd09cf77fb881754bffd4\">HACover</a>\n</li>\n<li>setPayloadOff()\n: <a class=\"el\" href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHASwitch.html#ad87f7ed8d117684176195abb75de10fd\">HASwitch</a>\n</li>\n<li>setPayloadOn()\n: <a class=\"el\" href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">HASwitch</a>\n</li>\n<li>setPayloadOpen()\n: <a class=\"el\" href=\"classHACover.html#a20860a2f4181be32c69a583104cf9181\">HACover</a>\n</li>\n<li>setPayloadStop()\n: <a class=\"el\" href=\"classHACover.html#a727afd76b2e852a0e177c5d64fff5894\">HACover</a>\n</li>\n<li>setRelay()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>setResetPin()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass</a>\n</li>\n<li>setRSSI()\n: <a class=\"el\" href=\"classNode.html#aa14110f23c8cfe73c44e1a87382a1081\">Node</a>\n</li>\n<li>setRxLed()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">EnigmaIOTGatewayClass</a>\n</li>\n<li>setSleepTime()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">EnigmaIOTNodeClass</a>\n</li>\n<li>setSleepy()\n: <a class=\"el\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">Node</a>\n</li>\n<li>setStateClosed()\n: <a class=\"el\" href=\"classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0\">HACover</a>\n</li>\n<li>setStateClosing()\n: <a class=\"el\" href=\"classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69\">HACover</a>\n</li>\n<li>setStateOff()\n: <a class=\"el\" href=\"classHASwitch.html#a92d97f25fd24278191e3ded747f1eac9\">HASwitch</a>\n</li>\n<li>setStateOn()\n: <a class=\"el\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">HASwitch</a>\n</li>\n<li>setStateOpen()\n: <a class=\"el\" href=\"classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42\">HACover</a>\n</li>\n<li>setStateOpening()\n: <a class=\"el\" href=\"classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2\">HACover</a>\n</li>\n<li>setStateStopped()\n: <a class=\"el\" href=\"classHACover.html#a2341ee037b2dae238703f15bf95e6ccf\">HACover</a>\n</li>\n<li>setStatus()\n: <a class=\"el\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">Node</a>\n</li>\n<li>setSubtype()\n: <a class=\"el\" href=\"classHATrigger.html#ab16d63fc344bac17dd99834be15585aa\">HATrigger</a>\n</li>\n<li>setTimeSyncEnabled()\n: <a class=\"el\" href=\"classNode.html#a121f5ac6ef71317bd8900b97a8abc65a\">Node</a>\n</li>\n<li>setTxLed()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">EnigmaIOTGatewayClass</a>\n</li>\n<li>setType()\n: <a class=\"el\" href=\"classHATrigger.html#af86406b876cfddbe13ef433582600658\">HATrigger</a>\n</li>\n<li>setUnitOfMeasurement()\n: <a class=\"el\" href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">HASensor</a>\n</li>\n<li>setup()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController</a>\n</li>\n<li>setValueField()\n: <a class=\"el\" href=\"classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">HASensor</a>\n, <a class=\"el\" href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">HASwitch</a>\n</li>\n<li>setValueTemplate()\n: <a class=\"el\" href=\"classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHASensor.html#a41e55b745b034127a7d7a98cb50d4559\">HASensor</a>\n</li>\n<li>setVersion()\n: <a class=\"el\" href=\"classNode.html#accf5025ffbf53e48db9ab7f429c68b1e\">Node</a>\n</li>\n<li>size()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>sleep()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass</a>\n</li>\n<li>startIdentifying()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">EnigmaIOTNodeClass</a>\n</li>\n<li>stop()\n: <a class=\"el\" href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">Espnow_halClass</a>\n</li>\n<li>stopIdentifying()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">EnigmaIOTNodeClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_t\"></a>- t -</h3><ul>\n<li>toggleRelay()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>tx_cb()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">Espnow_halClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_u.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_u\"></a>- u -</h3><ul>\n<li>unencryptedDataMessage()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\">EnigmaIOTNodeClass</a>\n</li>\n<li>unixtime()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5\">TimeManagerClass</a>\n</li>\n<li>unregisterNode()\n: <a class=\"el\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">NodeList</a>\n</li>\n<li>updatePacketsRate()\n: <a class=\"el\" href=\"classNode.html#a71c1077723465057bd8cbc90f33c2ead\">Node</a>\n</li>\n<li>useTimeSync()\n: <a class=\"el\" href=\"classNode.html#a4bb77cd04f77b857935836284c5e41af\">Node</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_func_~.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index__7E\"></a>- ~ -</h3><ul>\n<li>~CONTROLLER_CLASS_NAME()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>~EnigmaIOTRingBuffer()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aba3855eadedeaa091aff67f49bdc2255\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>~FilterClass()\n: <a class=\"el\" href=\"classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619\">FilterClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_g.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_g\"></a>- g -</h3><ul>\n<li>gateway\n: <a class=\"el\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">Comms_halClass</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">rtcmem_data_t</a>\n</li>\n<li>GatewayAPI\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0b1bb7ec1dc2b4a244c77ffd04786a0c\">EnigmaIOTGatewayClass</a>\n</li>\n<li>gatewaySearchStarted\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">EnigmaIOTNodeClass</a>\n</li>\n<li>getActiveNodesNumber()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getAddressLength()\n: <a class=\"el\" href=\"classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d\">Espnow_halClass</a>\n</li>\n<li>getAnounceMessage()\n: <a class=\"el\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">HAEntity</a>\n</li>\n<li>getBroadcastNode()\n: <a class=\"el\" href=\"classNodeList.html#a0020539e3b49df3706fe66a44bbf3700\">NodeList</a>\n</li>\n<li>getCommsQueue()\n: <a class=\"el\" href=\"classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5\">Espnow_halClass</a>\n</li>\n<li>getDelay()\n: <a class=\"el\" href=\"classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a\">TimeManagerClass</a>\n</li>\n<li>getDH1()\n: <a class=\"el\" href=\"classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1\">CryptModule</a>\n</li>\n<li>getDH2()\n: <a class=\"el\" href=\"classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee\">CryptModule</a>\n</li>\n<li>getDiscoveryJson()\n: <a class=\"el\" href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">HACover</a>\n, <a class=\"el\" href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">HASensor</a>\n, <a class=\"el\" href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">HASwitch</a>\n, <a class=\"el\" href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">HATrigger</a>\n</li>\n<li>getDiscoveryTopic()\n: <a class=\"el\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">HAEntity</a>\n</li>\n<li>getEncriptionKey()\n: <a class=\"el\" href=\"classNode.html#a61ac445d996a9304b34fc78a2514364f\">Node</a>\n</li>\n<li>getErrorPackets()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getGwInfo()\n: <a class=\"el\" href=\"classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a\">GatewayAPI</a>\n</li>\n<li>getInitAsSleepy()\n: <a class=\"el\" href=\"classNode.html#a89ccd5b416ac31593da426c48ec8562a\">Node</a>\n</li>\n<li>getInputMsgQueue()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getKeyValidFrom()\n: <a class=\"el\" href=\"classNode.html#a30a8e0aaad582a1baa269c6641150586\">Node</a>\n</li>\n<li>getLastBroadcastMsgCounter()\n: <a class=\"el\" href=\"classNodeList.html#acfff6ed812a219b7b7514989da7fc34e\">NodeList</a>\n</li>\n<li>getLastControlCounter()\n: <a class=\"el\" href=\"classNode.html#ae4b169a75d7c1fa535eb883c28683001\">Node</a>\n</li>\n<li>getLastDownlinkMsgCounter()\n: <a class=\"el\" href=\"classNode.html#aecf8d05afddcd5d460472963ee88bd2b\">Node</a>\n</li>\n<li>getLastMessageCounter()\n: <a class=\"el\" href=\"classNode.html#ab5c31a536cb60a6c86dec8524117f50e\">Node</a>\n</li>\n<li>getLastMessageTime()\n: <a class=\"el\" href=\"classNode.html#a15877a320c33f77402c5700774d936cc\">Node</a>\n</li>\n<li>getMacAddress()\n: <a class=\"el\" href=\"classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac\">Node</a>\n</li>\n<li>getMaxMessageLength()\n: <a class=\"el\" href=\"classEspnow__halClass.html#a3a037c0d31f906bc24a8475b376072fd\">Espnow_halClass</a>\n</li>\n<li>getMaxNodes()\n: <a class=\"el\" href=\"classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c\">GatewayAPI</a>\n</li>\n<li>getMQTTqueue()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742\">GwOutput_MQTT</a>\n</li>\n<li>getNetworkKey()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getNetworkName()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getNewNode()\n: <a class=\"el\" href=\"classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2\">NodeList</a>\n</li>\n<li>getNextActiveNode()\n: <a class=\"el\" href=\"classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2\">NodeList</a>\n</li>\n<li>getNode()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed\">EnigmaIOTNodeClass</a>\n</li>\n<li>getNodeData()\n: <a class=\"el\" href=\"classNode.html#a129745eaa2b8e08ac8201809a6e2cb17\">Node</a>\n</li>\n<li>getNodeFromID()\n: <a class=\"el\" href=\"classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79\">NodeList</a>\n</li>\n<li>getNodeFromMAC()\n: <a class=\"el\" href=\"classNodeList.html#a08530d06e81c160b346047e37839ee7d\">NodeList</a>\n</li>\n<li>getNodeFromName()\n: <a class=\"el\" href=\"classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe\">NodeList</a>\n</li>\n<li>getNodeFromParam()\n: <a class=\"el\" href=\"classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2\">GatewayAPI</a>\n</li>\n<li>getNodeId()\n: <a class=\"el\" href=\"classNode.html#a2563f7f556d09035dbbf042656d4fa3a\">Node</a>\n</li>\n<li>getNodeInfo()\n: <a class=\"el\" href=\"classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f\">GatewayAPI</a>\n</li>\n<li>getNodeName()\n: <a class=\"el\" href=\"classNode.html#a5c665e844c5f7f121a72baae270a2ba7\">Node</a>\n</li>\n<li>getNodeNumber()\n: <a class=\"el\" href=\"classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c\">GatewayAPI</a>\n</li>\n<li>getNodes()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68\">GatewayAPI</a>\n</li>\n<li>getOffset()\n: <a class=\"el\" href=\"classTimeManagerClass.html#ae188f14a7cf5c38c5ab09b0dc5460490\">TimeManagerClass</a>\n</li>\n<li>getOTArunning()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3398ebecf52e1d7b5493d34ed011c38f\">EnigmaIOTNodeClass</a>\n</li>\n<li>getPacketsHour()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getPER()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getPrivDHKey()\n: <a class=\"el\" href=\"classCryptModule.html#a9d106f893f329d8648aba205b3717806\">CryptModule</a>\n</li>\n<li>getPubDHKey()\n: <a class=\"el\" href=\"classCryptModule.html#aefc84d57eee3eceeadc3611866925804\">CryptModule</a>\n</li>\n<li>getRSSI()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNode.html#ac9cb809cbf8a76bda02e2c92731b213b\">Node</a>\n</li>\n<li>getSHA256()\n: <a class=\"el\" href=\"classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16\">CryptModule</a>\n</li>\n<li>getShouldSave()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getSleepTime()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c\">EnigmaIOTNodeClass</a>\n</li>\n<li>getSleepy()\n: <a class=\"el\" href=\"classNode.html#a5bf02d202c9cb76831de89e4d1ef8893\">Node</a>\n</li>\n<li>getStatus()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNode.html#a6172f9eb39a02f01b692a53b9ee09c56\">Node</a>\n</li>\n<li>getTotalPackets()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4\">EnigmaIOTGatewayClass</a>\n</li>\n<li>getTriggerSubtypeStr()\n: <a class=\"el\" href=\"classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b\">HATrigger</a>\n</li>\n<li>getTriggerTypeStr()\n: <a class=\"el\" href=\"classHATrigger.html#a25585b365d726848d22ad5c4f299d803\">HATrigger</a>\n</li>\n<li>getVersion()\n: <a class=\"el\" href=\"classNode.html#a628b04339453635be34148c9fbe66506\">Node</a>\n</li>\n<li>gwConfig\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">EnigmaIOTGatewayClass</a>\n</li>\n<li>GwOutput_MQTT()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a50976e1efb3c1570e3596672ffd83c56\">GwOutput_MQTT</a>\n</li>\n<li>gwTopic\n: <a class=\"el\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">GatewayOutput_generic</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_h\"></a>- h -</h3><ul>\n<li>HABinarySensor()\n: <a class=\"el\" href=\"classHABinarySensor.html#a24cc503973f65dadac7575a2bba823b6\">HABinarySensor</a>\n</li>\n<li>HACover()\n: <a class=\"el\" href=\"classHACover.html#acc7fe4e246ebd9af4ff958447ec78d86\">HACover</a>\n</li>\n<li>HAEntity()\n: <a class=\"el\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a>\n</li>\n<li>handle()\n: <a class=\"el\" href=\"classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9\">Espnow_halClass</a>\n</li>\n<li>hasClockSync()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e\">EnigmaIOTNodeClass</a>\n</li>\n<li>HASensor()\n: <a class=\"el\" href=\"classHASensor.html#a07979a82942d08d6f24db5b76e6fe269\">HASensor</a>\n</li>\n<li>HASwitch()\n: <a class=\"el\" href=\"classHASwitch.html#a282ac7ec44e7fc43d0d6493808e68ba3\">HASwitch</a>\n</li>\n<li>HATrigger()\n: <a class=\"el\" href=\"classHATrigger.html#a91af9e612da244483b5704c4ed835d0f\">HATrigger</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_i.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_i\"></a>- i -</h3><ul>\n<li>identifyStart\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">EnigmaIOTNodeClass</a>\n</li>\n<li>incLastBroadcastMsgCounter()\n: <a class=\"el\" href=\"classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042\">NodeList</a>\n</li>\n<li>indentifying\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">EnigmaIOTNodeClass</a>\n</li>\n<li>initAsSleepy\n: <a class=\"el\" href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">Node</a>\n</li>\n<li>initBroadcastNode()\n: <a class=\"el\" href=\"classNodeList.html#a956635fa60412a9a026ea64245dd4443\">NodeList</a>\n</li>\n<li>initComms()\n: <a class=\"el\" href=\"classComms__halClass.html#a67d74c717b8f3919307738be9d963312\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9\">Espnow_halClass</a>\n</li>\n<li>initRateFilter()\n: <a class=\"el\" href=\"classNode.html#a90d944dd41d445ec73a5b9534483329f\">Node</a>\n</li>\n<li>input_queue\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">EnigmaIOTGatewayClass</a>\n</li>\n<li>insideThermometer\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab6ae5865908255a9379c8c60632a3e3b\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>invalidateKey()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33\">EnigmaIOTGatewayClass</a>\n</li>\n<li>invalidateReason\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">EnigmaIOTNodeClass</a>\n</li>\n<li>isBroadcastKeyRequested()\n: <a class=\"el\" href=\"classNode.html#a30aa0104f6df938075c7ff4ac64b3f41\">Node</a>\n</li>\n<li>isFull()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>isKeyValid()\n: <a class=\"el\" href=\"classNode.html#aa382c421546fc99b22b4698acb36c3d8\">Node</a>\n</li>\n<li>isRegistered()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8\">Node</a>\n</li>\n<li>isTimeAdjusted()\n: <a class=\"el\" href=\"classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615\">TimeManagerClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_k.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_k\"></a>- k -</h3><ul>\n<li>key\n: <a class=\"el\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">node_instance</a>\n</li>\n<li>keyValid\n: <a class=\"el\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f\">node_instance</a>\n</li>\n<li>keyValidFrom\n: <a class=\"el\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96\">node_instance</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_l.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_l\"></a>- l -</h3><ul>\n<li>lastBroadcastMsgCounter\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7\">NodeList</a>\n</li>\n<li>lastControlCounter\n: <a class=\"el\" href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#aee6b3fdf81d44af5053d138136d0f7f5\">node_instance</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">rtcmem_data_t</a>\n</li>\n<li>lastDownlinkMsgCounter\n: <a class=\"el\" href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a6ac60e31e921d2e101c86584eb5a5489\">node_instance</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">rtcmem_data_t</a>\n</li>\n<li>lastMessageCounter\n: <a class=\"el\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91\">node_instance</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">rtcmem_data_t</a>\n</li>\n<li>lastMessageTime\n: <a class=\"el\" href=\"classNode.html#a2d56bbba3211927eff545e385ef5d162\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a7eadabd847f82e2383dd440fd3cddc37\">node_instance</a>\n</li>\n<li>lastOTAmsg\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">EnigmaIOTNodeClass</a>\n</li>\n<li>led\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa202545b98827df6cdfeea82898cba6c\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">EnigmaIOTNodeClass</a>\n</li>\n<li>ledOnTime\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">EnigmaIOTNodeClass</a>\n</li>\n<li>len\n: <a class=\"el\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">msg_queue_item_t</a>\n</li>\n<li>linked\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a311c8e216f6f9b9f492a4bf6758edf80\">smartSwitchControllerHw_t</a>\n</li>\n<li>loadConfig()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f\">GwOutput_MQTT</a>\n</li>\n<li>loadFlashData()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2\">EnigmaIOTNodeClass</a>\n</li>\n<li>loadRTCData()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893\">EnigmaIOTNodeClass</a>\n</li>\n<li>loop()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0\">GwOutput_MQTT</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_m.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_m\"></a>- m -</h3><ul>\n<li>mac\n: <a class=\"el\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">node_instance</a>\n</li>\n<li>manageMessage()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93\">EnigmaIOTNodeClass</a>\n</li>\n<li>maxSize\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>measureMessage()\n: <a class=\"el\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">HAEntity</a>\n</li>\n<li>medianFilter()\n: <a class=\"el\" href=\"classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d\">FilterClass</a>\n</li>\n<li>mqtt_client\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">GwOutput_MQTT</a>\n</li>\n<li>mqtt_pass\n: <a class=\"el\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqttgw_config_t</a>\n</li>\n<li>mqtt_port\n: <a class=\"el\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqttgw_config_t</a>\n</li>\n<li>mqtt_queue\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">GwOutput_MQTT</a>\n</li>\n<li>mqtt_server\n: <a class=\"el\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqttgw_config_t</a>\n</li>\n<li>mqtt_user\n: <a class=\"el\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqttgw_config_t</a>\n</li>\n<li>mqttgw_config\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">GwOutput_MQTT</a>\n</li>\n<li>mqttPassParam\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">GwOutput_MQTT</a>\n</li>\n<li>mqttPortParam\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">GwOutput_MQTT</a>\n</li>\n<li>mqttServerParam\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">GwOutput_MQTT</a>\n</li>\n<li>mqttUserParam\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">GwOutput_MQTT</a>\n</li>\n<li>myPublicKey\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">EnigmaIOTGatewayClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_n.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_n\"></a>- n -</h3><ul>\n<li>netName\n: <a class=\"el\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">GatewayOutput_generic</a>\n</li>\n<li>networkKey\n: <a class=\"el\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">gateway_config_t</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">rtcmem_data_t</a>\n</li>\n<li>networkName\n: <a class=\"el\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">gateway_config_t</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">rtcmem_data_t</a>\n</li>\n<li>newNodeSend()\n: <a class=\"el\" href=\"classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c\">GwOutput_MQTT</a>\n</li>\n<li>node\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">EnigmaIOTNodeClass</a>\n</li>\n<li>Node()\n: <a class=\"el\" href=\"classNode.html#ad7a34779cad45d997bfd6d3d8043c75f\">Node</a>\n</li>\n<li>nodeDisconnectedSend()\n: <a class=\"el\" href=\"classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a\">GwOutput_MQTT</a>\n</li>\n<li>nodeId\n: <a class=\"el\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f\">node_instance</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">rtcmem_data_t</a>\n</li>\n<li>nodeKey\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">rtcmem_data_t</a>\n</li>\n<li>nodeKeyValid\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">rtcmem_data_t</a>\n</li>\n<li>nodelist\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">EnigmaIOTGatewayClass</a>\n</li>\n<li>NodeList\n: <a class=\"el\" href=\"classNode.html#a796dbbcdb4e627658df143380ddb88fa\">Node</a>\n, <a class=\"el\" href=\"classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f\">NodeList</a>\n</li>\n<li>nodeName\n: <a class=\"el\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#ad979924ffe46421c554052889ee590fb\">node_instance</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">rtcmem_data_t</a>\n</li>\n<li>nodeNameSetRespose()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381\">EnigmaIOTGatewayClass</a>\n</li>\n<li>nodeOp()\n: <a class=\"el\" href=\"classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec\">GatewayAPI</a>\n</li>\n<li>nodeRegisterStatus\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">rtcmem_data_t</a>\n</li>\n<li>nodes\n: <a class=\"el\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">NodeList</a>\n</li>\n<li>notifyConnection\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">EnigmaIOTNodeClass</a>\n</li>\n<li>notifyData\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">EnigmaIOTNodeClass</a>\n</li>\n<li>notifyDisconnection\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">EnigmaIOTNodeClass</a>\n</li>\n<li>notifyHADiscovery\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">EnigmaIOTGatewayClass</a>\n</li>\n<li>notifyNewNode\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">EnigmaIOTGatewayClass</a>\n</li>\n<li>notifyNodeDisconnection\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">EnigmaIOTGatewayClass</a>\n</li>\n<li>notifyRestartRequested\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">EnigmaIOTGatewayClass</a>\n</li>\n<li>notifyWiFiManagerExit\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">EnigmaIOTNodeClass</a>\n</li>\n<li>notifyWiFiManagerStarted\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">EnigmaIOTNodeClass</a>\n</li>\n<li>numElements\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_o.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_o\"></a>- o -</h3><ul>\n<li>offset\n: <a class=\"el\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">TimeManagerClass</a>\n</li>\n<li>ON_STATE\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a4655115d731c63e4f4e98f3b2cf0f743\">smartSwitchControllerHw_t</a>\n</li>\n<li>onConnected()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f\">EnigmaIOTNodeClass</a>\n</li>\n<li>onDataRcvd()\n: <a class=\"el\" href=\"classComms__halClass.html#a0db88323996d12342a9c60143d90c51f\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77\">Espnow_halClass</a>\n</li>\n<li>onDataRx()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4\">EnigmaIOTNodeClass</a>\n</li>\n<li>onDataSent()\n: <a class=\"el\" href=\"classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b\">Espnow_halClass</a>\n</li>\n<li>onDisconnected()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0\">EnigmaIOTNodeClass</a>\n</li>\n<li>onDlData()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9\">GwOutput_MQTT</a>\n</li>\n<li>oneWire\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa83d1a9fa08dfeb08690d132e77883db\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>onGatewayRestartRequested()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db\">EnigmaIOTGatewayClass</a>\n</li>\n<li>onHADiscovery()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83\">EnigmaIOTGatewayClass</a>\n</li>\n<li>onNewNode()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526\">EnigmaIOTGatewayClass</a>\n</li>\n<li>onNodeDisconnected()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2\">EnigmaIOTGatewayClass</a>\n</li>\n<li>onNotFound()\n: <a class=\"el\" href=\"classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef\">GatewayAPI</a>\n</li>\n<li>onWiFiManagerExit()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae\">EnigmaIOTNodeClass</a>\n</li>\n<li>onWiFiManagerStarted()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799\">EnigmaIOTNodeClass</a>\n</li>\n<li>otaError\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">EnigmaIOTNodeClass</a>\n</li>\n<li>otaRunning\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">EnigmaIOTNodeClass</a>\n</li>\n<li>out_queue\n: <a class=\"el\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">Espnow_halClass</a>\n</li>\n<li>outputControlSend()\n: <a class=\"el\" href=\"classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84\">GwOutput_MQTT</a>\n</li>\n<li>outputDataSend()\n: <a class=\"el\" href=\"classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778\">GwOutput_MQTT</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_p.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_p\"></a>- p -</h3><ul>\n<li>packetErrors\n: <a class=\"el\" href=\"classNode.html#a4e2e4c6afb4bf93ca10e60d239fd87c5\">Node</a>\n</li>\n<li>packetNumber\n: <a class=\"el\" href=\"classNode.html#aedfde4376c7c84dd8c88c2c530b3b102\">Node</a>\n</li>\n<li>packetsHour\n: <a class=\"el\" href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">Node</a>\n</li>\n<li>payload\n: <a class=\"el\" href=\"structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5\">comms_queue_item_t</a>\n, <a class=\"el\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">mqtt_queue_item_t</a>\n</li>\n<li>payload_len\n: <a class=\"el\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">comms_queue_item_t</a>\n, <a class=\"el\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">mqtt_queue_item_t</a>\n</li>\n<li>per\n: <a class=\"el\" href=\"classNode.html#a2f8f6419cc10c972285178991b2cec78\">Node</a>\n</li>\n<li>plainNetKey\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">EnigmaIOTGatewayClass</a>\n</li>\n<li>pop()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>popCommsQueue()\n: <a class=\"el\" href=\"classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1\">Espnow_halClass</a>\n</li>\n<li>popInputMsgQueue()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b\">EnigmaIOTGatewayClass</a>\n</li>\n<li>popMQTTqueue()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a\">GwOutput_MQTT</a>\n</li>\n<li>printToSerial()\n: <a class=\"el\" href=\"classNode.html#a36b675e4186420fb1f8e324fc0987cbd\">Node</a>\n, <a class=\"el\" href=\"classNodeList.html#a239930df15810784dab9a3284730a35f\">NodeList</a>\n</li>\n<li>privateDHKey\n: <a class=\"el\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">CryptModule</a>\n</li>\n<li>processBroadcastKeyMessage()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b\">EnigmaIOTNodeClass</a>\n</li>\n<li>processClientHello()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processClockRequest()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processClockResponse()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67\">EnigmaIOTNodeClass</a>\n</li>\n<li>processControlCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696\">EnigmaIOTNodeClass</a>\n</li>\n<li>processControlMessage()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processDataMessage()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processDownstreamData()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63\">EnigmaIOTNodeClass</a>\n</li>\n<li>processGetNameCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c\">EnigmaIOTNodeClass</a>\n</li>\n<li>processGetRSSICommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd\">EnigmaIOTNodeClass</a>\n</li>\n<li>processGetSleepTimeCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274\">EnigmaIOTNodeClass</a>\n</li>\n<li>processInvalidateKey()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768\">EnigmaIOTNodeClass</a>\n</li>\n<li>processNodeNameSet()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processOTACommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2\">EnigmaIOTNodeClass</a>\n</li>\n<li>processRxCommand()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca\">EnigmaIOTjsonController</a>\n</li>\n<li>processServerHello()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetIdentifyCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetNameCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetNameResponse()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetResetConfigCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetRestartCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56\">EnigmaIOTNodeClass</a>\n</li>\n<li>processSetSleepTimeCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241\">EnigmaIOTNodeClass</a>\n</li>\n<li>processUnencryptedDataMessage()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc\">EnigmaIOTGatewayClass</a>\n</li>\n<li>processVersionCommand()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615\">EnigmaIOTNodeClass</a>\n</li>\n<li>protectOTA\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">EnigmaIOTNodeClass</a>\n</li>\n<li>publicDHKey\n: <a class=\"el\" href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">CryptModule</a>\n</li>\n<li>publishMQTT()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162\">GwOutput_MQTT</a>\n</li>\n<li>push()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>pushReleased\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>pushTriggered\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a\">CONTROLLER_CLASS_NAME</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_q.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_q\"></a>- q -</h3><ul>\n<li>qMessageLength\n: <a class=\"el\" href=\"classNode.html#a41f17a6abd376d602bef3925c751a181\">Node</a>\n</li>\n<li>qMessagePending\n: <a class=\"el\" href=\"classNode.html#a0db2a4dfda51cfc5afe8c846a622ba54\">Node</a>\n</li>\n<li>queuedMessage\n: <a class=\"el\" href=\"classNode.html#a712ec21cec6ac19ee68c8beb202fbf92\">Node</a>\n</li>\n<li>quicksort()\n: <a class=\"el\" href=\"classFilterClass.html#af7fa09578d556d8289807f25faf148f7\">FilterClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_r.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_r\"></a>- r -</h3><ul>\n<li>random()\n: <a class=\"el\" href=\"classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0\">CryptModule</a>\n</li>\n<li>rateFilter\n: <a class=\"el\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">Node</a>\n</li>\n<li>readIndex\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>readyToSend\n: <a class=\"el\" href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">Espnow_halClass</a>\n</li>\n<li>reconnect()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7\">GwOutput_MQTT</a>\n</li>\n<li>relayPin\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a383953b4e6d9f3a294ed0cc56da0064a\">smartSwitchControllerHw_t</a>\n</li>\n<li>relayPinParam\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4c81e6c8ec96a457e0e8f3e1bad4525f\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>relayStatus\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#aebd780051c191b829135d424b0b504a3\">smartSwitchControllerHw_t</a>\n</li>\n<li>reportRSSI()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08\">EnigmaIOTNodeClass</a>\n</li>\n<li>requestReportRSSI\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">EnigmaIOTNodeClass</a>\n</li>\n<li>requestSearchGateway\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">EnigmaIOTNodeClass</a>\n</li>\n<li>reset()\n: <a class=\"el\" href=\"classNode.html#a7c565caad2fea0439f28d24887ac2498\">Node</a>\n, <a class=\"el\" href=\"classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8\">TimeManagerClass</a>\n</li>\n<li>resetConfig()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325\">EnigmaIOTNodeClass</a>\n</li>\n<li>resetGw()\n: <a class=\"el\" href=\"classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9\">GatewayAPI</a>\n</li>\n<li>resetPin\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">EnigmaIOTNodeClass</a>\n</li>\n<li>restart()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc\">EnigmaIOTNodeClass</a>\n</li>\n<li>restartGw()\n: <a class=\"el\" href=\"classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314\">GatewayAPI</a>\n</li>\n<li>restartNode()\n: <a class=\"el\" href=\"classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b\">GatewayAPI</a>\n</li>\n<li>restartNodeRequest()\n: <a class=\"el\" href=\"classGatewayAPI.html#ac4244196077eddbed077df9d163198ea\">GatewayAPI</a>\n</li>\n<li>restartReason\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">EnigmaIOTNodeClass</a>\n</li>\n<li>retain\n: <a class=\"el\" href=\"structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570\">mqtt_queue_item_t</a>\n</li>\n<li>roundTripDelay\n: <a class=\"el\" href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">TimeManagerClass</a>\n</li>\n<li>rssi\n: <a class=\"el\" href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">Node</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b\">rtcmem_data_t</a>\n</li>\n<li>rtcmem_data\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">EnigmaIOTNodeClass</a>\n</li>\n<li>runHandle()\n: <a class=\"el\" href=\"classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52\">Espnow_halClass</a>\n</li>\n<li>rx_cb()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47\">Espnow_halClass</a>\n</li>\n<li>rxled\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">EnigmaIOTGatewayClass</a>\n</li>\n<li>rxLedOnTime\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">EnigmaIOTGatewayClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_rela.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Related Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;<ul>\n<li>GatewayAPI\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0b1bb7ec1dc2b4a244c77ffd04786a0c\">EnigmaIOTGatewayClass</a>\n</li>\n<li>NodeList\n: <a class=\"el\" href=\"classNode.html#a796dbbcdb4e627658df143380ddb88fa\">Node</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_s\"></a>- s -</h3><ul>\n<li>saveConfig()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd\">GatewayOutput_generic</a>\n, <a class=\"el\" href=\"classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1\">GwOutput_MQTT</a>\n</li>\n<li>saveFlashData()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2\">EnigmaIOTNodeClass</a>\n</li>\n<li>saveRTCData()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a\">EnigmaIOTNodeClass</a>\n</li>\n<li>searchForGateway()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45\">EnigmaIOTNodeClass</a>\n</li>\n<li>send()\n: <a class=\"el\" href=\"classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b\">Espnow_halClass</a>\n</li>\n<li>sendBootStatus()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sendBroadcastKey()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3\">EnigmaIOTGatewayClass</a>\n</li>\n<li>sendCommandResp()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb\">EnigmaIOTjsonController</a>\n</li>\n<li>sendData\n: <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">EnigmaIOTjsonController</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b\">EnigmaIOTNodeClass</a>\n</li>\n<li>sendDataCallback()\n: <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170\">EnigmaIOTjsonController</a>\n</li>\n<li>sendDownstream()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4\">EnigmaIOTGatewayClass</a>\n</li>\n<li>sendEspNowMessage()\n: <a class=\"el\" href=\"classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297\">Espnow_halClass</a>\n</li>\n<li>sendHADiscoveryJSON()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7\">EnigmaIOTGatewayClass</a>\n</li>\n<li>sendHADiscoveryMessage()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f\">EnigmaIOTNodeClass</a>\n</li>\n<li>sendJson()\n: <a class=\"el\" href=\"classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9\">EnigmaIOTjsonController</a>\n</li>\n<li>sendLedStatus()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sendLinkStatus()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sendNodeNameSet()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249\">EnigmaIOTNodeClass</a>\n</li>\n<li>sendRelayStatus()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sendRestart()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5\">EnigmaIOTNodeClass</a>\n</li>\n<li>sendStartAnouncement()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58\">EnigmaIOTjsonController</a>\n</li>\n<li>sendTemperature()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sendUnencryptedData()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2e6973be4195ba354607c631c587297e\">EnigmaIOTNodeClass</a>\n</li>\n<li>sensors\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae875eb77d530db257752d87a010ec6c7\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sentResult\n: <a class=\"el\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">Comms_halClass</a>\n</li>\n<li>server\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classGatewayAPI.html#a7327209d50f6c17e3cd1ad67f2941e9a\">GatewayAPI</a>\n</li>\n<li>serverHello()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0\">EnigmaIOTGatewayClass</a>\n</li>\n<li>setBoot()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>setBroadcastKeyRequested()\n: <a class=\"el\" href=\"classNode.html#a0e298bac431d8ac9e98fb12b71292de1\">Node</a>\n</li>\n<li>setClock()\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7\">GwOutput_MQTT</a>\n</li>\n<li>setDeviceClass()\n: <a class=\"el\" href=\"classHABinarySensor.html#af305236afbd0405010d1611eac965530\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHACover.html#add81f3124d1f1f66745798d27b467098\">HACover</a>\n, <a class=\"el\" href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">HASensor</a>\n</li>\n<li>setDlCallback()\n: <a class=\"el\" href=\"classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd\">GatewayOutput_dummy</a>\n, <a class=\"el\" href=\"classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86\">GatewayOutput_generic</a>\n</li>\n<li>setEncryptionKey()\n: <a class=\"el\" href=\"classNode.html#ae7b7337fdc178fe350ac4ce2f4675040\">Node</a>\n</li>\n<li>setExpireTime()\n: <a class=\"el\" href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">HASensor</a>\n</li>\n<li>setInitAsSleepy()\n: <a class=\"el\" href=\"classNode.html#a3621fd27cee1a28145a7daa167ad0b3d\">Node</a>\n</li>\n<li>setKeyValid()\n: <a class=\"el\" href=\"classNode.html#a81ded601038e157ecb03daa7fb85242d\">Node</a>\n</li>\n<li>setKeyValidFrom()\n: <a class=\"el\" href=\"classNode.html#a65284f939ba9d70cff90e7e508ac1a13\">Node</a>\n</li>\n<li>setLastControlCounter()\n: <a class=\"el\" href=\"classNode.html#a2d876405390237c8cbbd4689fb2f960b\">Node</a>\n</li>\n<li>setLastDownlinkMsgCounter()\n: <a class=\"el\" href=\"classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9\">Node</a>\n</li>\n<li>setLastMessageCounter()\n: <a class=\"el\" href=\"classNode.html#aaa07721114c6b57152caf9a7b8cd4c23\">Node</a>\n</li>\n<li>setLastMessageTime()\n: <a class=\"el\" href=\"classNode.html#ae7d5f900dd1290910a30692175dc8e23\">Node</a>\n</li>\n<li>setLed()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4\">EnigmaIOTNodeClass</a>\n</li>\n<li>setLinked()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>setMacAddress()\n: <a class=\"el\" href=\"classNode.html#aea12cab858f40940a1ab5c61596b6355\">Node</a>\n</li>\n<li>setNameSufix()\n: <a class=\"el\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">HAEntity</a>\n</li>\n<li>setNodeAddress()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6\">EnigmaIOTNodeClass</a>\n</li>\n<li>setNodeId()\n: <a class=\"el\" href=\"classNode.html#a3615b98da7f0ea0d8615a8f45519a715\">Node</a>\n</li>\n<li>setNodeName()\n: <a class=\"el\" href=\"classNode.html#a31c7b1dce5c26d81ead2cabf5395d935\">Node</a>\n</li>\n<li>setOffDelay()\n: <a class=\"el\" href=\"classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7\">HABinarySensor</a>\n</li>\n<li>setPayload()\n: <a class=\"el\" href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">HATrigger</a>\n</li>\n<li>setPayloadClose()\n: <a class=\"el\" href=\"classHACover.html#a372d3fac011d58154daca97311fb5a94\">HACover</a>\n</li>\n<li>setPayloadGoto()\n: <a class=\"el\" href=\"classHACover.html#ac2f06095a52cd09cf77fb881754bffd4\">HACover</a>\n</li>\n<li>setPayloadOff()\n: <a class=\"el\" href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">HASwitch</a>\n</li>\n<li>setPayloadOn()\n: <a class=\"el\" href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">HASwitch</a>\n</li>\n<li>setPayloadOpen()\n: <a class=\"el\" href=\"classHACover.html#a20860a2f4181be32c69a583104cf9181\">HACover</a>\n</li>\n<li>setPayloadStop()\n: <a class=\"el\" href=\"classHACover.html#a727afd76b2e852a0e177c5d64fff5894\">HACover</a>\n</li>\n<li>setRelay()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>setResetPin()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263\">EnigmaIOTNodeClass</a>\n</li>\n<li>setRSSI()\n: <a class=\"el\" href=\"classNode.html#aa14110f23c8cfe73c44e1a87382a1081\">Node</a>\n</li>\n<li>setRxLed()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187\">EnigmaIOTGatewayClass</a>\n</li>\n<li>setSleepTime()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e\">EnigmaIOTNodeClass</a>\n</li>\n<li>setSleepy()\n: <a class=\"el\" href=\"classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7\">Node</a>\n</li>\n<li>setStateClosed()\n: <a class=\"el\" href=\"classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0\">HACover</a>\n</li>\n<li>setStateClosing()\n: <a class=\"el\" href=\"classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69\">HACover</a>\n</li>\n<li>setStateOff()\n: <a class=\"el\" href=\"classHASwitch.html#a92d97f25fd24278191e3ded747f1eac9\">HASwitch</a>\n</li>\n<li>setStateOn()\n: <a class=\"el\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">HASwitch</a>\n</li>\n<li>setStateOpen()\n: <a class=\"el\" href=\"classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42\">HACover</a>\n</li>\n<li>setStateOpening()\n: <a class=\"el\" href=\"classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2\">HACover</a>\n</li>\n<li>setStateStopped()\n: <a class=\"el\" href=\"classHACover.html#a2341ee037b2dae238703f15bf95e6ccf\">HACover</a>\n</li>\n<li>setStatus()\n: <a class=\"el\" href=\"classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27\">Node</a>\n</li>\n<li>setSubtype()\n: <a class=\"el\" href=\"classHATrigger.html#ab16d63fc344bac17dd99834be15585aa\">HATrigger</a>\n</li>\n<li>setTimeSyncEnabled()\n: <a class=\"el\" href=\"classNode.html#a121f5ac6ef71317bd8900b97a8abc65a\">Node</a>\n</li>\n<li>setTxLed()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0\">EnigmaIOTGatewayClass</a>\n</li>\n<li>setType()\n: <a class=\"el\" href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">HATrigger</a>\n</li>\n<li>setUnitOfMeasurement()\n: <a class=\"el\" href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">HASensor</a>\n</li>\n<li>setup()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea\">EnigmaIOTjsonController</a>\n</li>\n<li>setValueField()\n: <a class=\"el\" href=\"classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">HASensor</a>\n, <a class=\"el\" href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">HASwitch</a>\n</li>\n<li>setValueTemplate()\n: <a class=\"el\" href=\"classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552\">HABinarySensor</a>\n, <a class=\"el\" href=\"classHASensor.html#a41e55b745b034127a7d7a98cb50d4559\">HASensor</a>\n</li>\n<li>setVersion()\n: <a class=\"el\" href=\"classNode.html#accf5025ffbf53e48db9ab7f429c68b1e\">Node</a>\n</li>\n<li>shouldRestart\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">EnigmaIOTNodeClass</a>\n</li>\n<li>shouldSaveConfig\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#aa8a75a12858e138be2e92c69f2111038\">GwOutput_MQTT</a>\n</li>\n<li>size()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>sleep()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360\">EnigmaIOTNodeClass</a>\n</li>\n<li>sleepRequested\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">EnigmaIOTNodeClass</a>\n</li>\n<li>sleepTime\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">rtcmem_data_t</a>\n</li>\n<li>sleepy\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">rtcmem_data_t</a>\n</li>\n<li>sleepyNode\n: <a class=\"el\" href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#adc14b97d211609ff286c2edc4bcbe061\">node_instance</a>\n</li>\n<li>startIdentifying()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471\">EnigmaIOTNodeClass</a>\n</li>\n<li>status\n: <a class=\"el\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a784768cbda2285978d85c6dd17c01158\">node_instance</a>\n</li>\n<li>stop()\n: <a class=\"el\" href=\"classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3\">Espnow_halClass</a>\n</li>\n<li>stopIdentifying()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3\">EnigmaIOTNodeClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_t\"></a>- t -</h3><ul>\n<li>tempBuffer\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74\">EnigmaIOTGatewayClass</a>\n</li>\n<li>tempC\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a31b856de204d6bf15ed12641ff748dc3\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>tempSent\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab566b0093af7f84c645a5c35342c6a51\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>timeIsAdjusted\n: <a class=\"el\" href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">TimeManagerClass</a>\n</li>\n<li>timeSyncPeriod\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">EnigmaIOTNodeClass</a>\n</li>\n<li>toggleRelay()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>topic\n: <a class=\"el\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">mqtt_queue_item_t</a>\n</li>\n<li>tx_cb()\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587\">Espnow_halClass</a>\n</li>\n<li>txled\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">EnigmaIOTGatewayClass</a>\n</li>\n<li>txLedOnTime\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">EnigmaIOTGatewayClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_u.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_u\"></a>- u -</h3><ul>\n<li>unencryptedDataMessage()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc\">EnigmaIOTNodeClass</a>\n</li>\n<li>unixtime()\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5\">TimeManagerClass</a>\n</li>\n<li>unregisterNode()\n: <a class=\"el\" href=\"classNodeList.html#a2892fb1e6830073f3419da35ddad8725\">NodeList</a>\n</li>\n<li>updatePacketsRate()\n: <a class=\"el\" href=\"classNode.html#a71c1077723465057bd8cbc90f33c2ead\">Node</a>\n</li>\n<li>useCounter\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">EnigmaIOTNodeClass</a>\n</li>\n<li>useTimeSync()\n: <a class=\"el\" href=\"classNode.html#a4bb77cd04f77b857935836284c5e41af\">Node</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index__5F\"></a>- _ -</h3><ul>\n<li>_filterType\n: <a class=\"el\" href=\"classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b\">FilterClass</a>\n</li>\n<li>_index\n: <a class=\"el\" href=\"classFilterClass.html#a5c265b773551343bcc7659e0253b525c\">FilterClass</a>\n</li>\n<li>_order\n: <a class=\"el\" href=\"classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1\">FilterClass</a>\n</li>\n<li>_orderedValues\n: <a class=\"el\" href=\"classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180\">FilterClass</a>\n</li>\n<li>_ownPeerType\n: <a class=\"el\" href=\"classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab\">Comms_halClass</a>\n</li>\n<li>_rawValues\n: <a class=\"el\" href=\"classFilterClass.html#a50254c631b3e05583890f63c6f0149bc\">FilterClass</a>\n</li>\n<li>_weightValues\n: <a class=\"el\" href=\"classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7\">FilterClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_a\"></a>- a -</h3><ul>\n<li>addr\n: <a class=\"el\" href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">msg_queue_item_t</a>\n</li>\n<li>askedTimeSync\n: <a class=\"el\" href=\"classNode.html#a918b7ad8582d1b2d569dbd66a262ee50\">Node</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_b\"></a>- b -</h3><ul>\n<li>bootStatus\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a460a8b71cd14d353299b85f46a9cf9f6\">smartSwitchControllerHw_t</a>\n</li>\n<li>bootStatusListParam\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a652db9c565625d205fa589b5b7922431\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>bootStatusParam\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab2947853c9c4746ab59e067f00359bff\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>broadcastEnabled\n: <a class=\"el\" href=\"classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed\">Node</a>\n</li>\n<li>broadcastKey\n: <a class=\"el\" href=\"structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e\">rtcmem_data_t</a>\n</li>\n<li>broadcastKeyRequested\n: <a class=\"el\" href=\"classNode.html#aebc89c4269923800190e3c340f45d550\">Node</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">rtcmem_data_t</a>\n</li>\n<li>broadcastKeyValid\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67\">rtcmem_data_t</a>\n</li>\n<li>broadcastNode\n: <a class=\"el\" href=\"classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3\">NodeList</a>\n</li>\n<li>buffer\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>buttonPin\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a52575acecb3433d8a42b5eae1d036484\">smartSwitchControllerHw_t</a>\n</li>\n<li>buttonPinParam\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af137736da8e1cb6c92aba6972807704a\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>buttonPressSent\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab9f55dca7e50e7bbccd5b01d77fc0f05\">CONTROLLER_CLASS_NAME</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_c\"></a>- c -</h3><ul>\n<li>capacity\n: <a class=\"el\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">HAEntity</a>\n</li>\n<li>channel\n: <a class=\"el\" href=\"classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e\">Comms_halClass</a>\n, <a class=\"el\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">gateway_config_t</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">rtcmem_data_t</a>\n</li>\n<li>clientId\n: <a class=\"el\" href=\"classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132\">GatewayOutput_generic</a>\n</li>\n<li>clockSyncEnabled\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795\">EnigmaIOTNodeClass</a>\n</li>\n<li>comm\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d\">EnigmaIOTNodeClass</a>\n</li>\n<li>commErrors\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">rtcmem_data_t</a>\n</li>\n<li>COMMS_HAL_ADDR_LEN\n: <a class=\"el\" href=\"classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72\">Espnow_halClass</a>\n</li>\n<li>COMMS_HAL_MAX_MESSAGE_LENGTH\n: <a class=\"el\" href=\"classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316\">Comms_halClass</a>\n, <a class=\"el\" href=\"classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635\">Espnow_halClass</a>\n</li>\n<li>config\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a1ff33c36324249c1791357337ed932c6\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>configCleared\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6\">EnigmaIOTNodeClass</a>\n</li>\n<li>crc32\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">rtcmem_data_t</a>\n</li>\n<li>cycleStartedTime\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9\">EnigmaIOTNodeClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_d\"></a>- d -</h3><ul>\n<li>data\n: <a class=\"el\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">msg_queue_item_t</a>\n</li>\n<li>dataMessageEncrypt\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataMessageSendEncoding\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataMessageSendPending\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataMessageSent\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataMessageSentLength\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775\">EnigmaIOTNodeClass</a>\n</li>\n<li>dataRcvd\n: <a class=\"el\" href=\"classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83\">Comms_halClass</a>\n</li>\n<li>deviceType\n: <a class=\"el\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">HAEntity</a>\n</li>\n<li>dns\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c\">EnigmaIOTGatewayClass</a>\n</li>\n<li>downlinkCb\n: <a class=\"el\" href=\"classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de\">GatewayOutput_generic</a>\n</li>\n<li>dstAddress\n: <a class=\"el\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">comms_queue_item_t</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_e\"></a>- e -</h3><ul>\n<li>enigmaIotGateway\n: <a class=\"el\" href=\"classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889\">GatewayOutput_generic</a>\n</li>\n<li>enigmaIotNode\n: <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde\">EnigmaIOTjsonController</a>\n</li>\n<li>enigmaIOTVersion\n: <a class=\"el\" href=\"classNode.html#a9af4beb0e8a8cf8405116b92077d9027\">Node</a>\n</li>\n<li>entityConfig\n: <a class=\"el\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">HAEntity</a>\n</li>\n<li>espClient\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a\">GwOutput_MQTT</a>\n</li>\n<li>espnowLoopTask\n: <a class=\"el\" href=\"classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8\">Espnow_halClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_f\"></a>- f -</h3><ul>\n<li>flashBlue\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438\">EnigmaIOTNodeClass</a>\n</li>\n<li>flashRx\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197\">EnigmaIOTGatewayClass</a>\n</li>\n<li>flashTx\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae\">EnigmaIOTGatewayClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_g.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_g\"></a>- g -</h3><ul>\n<li>gateway\n: <a class=\"el\" href=\"classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e\">Comms_halClass</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">rtcmem_data_t</a>\n</li>\n<li>gatewaySearchStarted\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75\">EnigmaIOTNodeClass</a>\n</li>\n<li>gwConfig\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc\">EnigmaIOTGatewayClass</a>\n</li>\n<li>gwTopic\n: <a class=\"el\" href=\"classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3\">GatewayOutput_generic</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_i.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_i\"></a>- i -</h3><ul>\n<li>identifyStart\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad\">EnigmaIOTNodeClass</a>\n</li>\n<li>indentifying\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a\">EnigmaIOTNodeClass</a>\n</li>\n<li>initAsSleepy\n: <a class=\"el\" href=\"classNode.html#ac492ae71e392fe59002e9900fb0d8c03\">Node</a>\n</li>\n<li>input_queue\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40\">EnigmaIOTGatewayClass</a>\n</li>\n<li>insideThermometer\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab6ae5865908255a9379c8c60632a3e3b\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>invalidateReason\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8\">EnigmaIOTNodeClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_k.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_k\"></a>- k -</h3><ul>\n<li>key\n: <a class=\"el\" href=\"classNode.html#aad088b52de3eb46a8c89e6cb87bdf887\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">node_instance</a>\n</li>\n<li>keyValid\n: <a class=\"el\" href=\"classNode.html#a03e424c2251b5b96fb68444f008f6f17\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f\">node_instance</a>\n</li>\n<li>keyValidFrom\n: <a class=\"el\" href=\"classNode.html#afad1c640f8fc2623996d3d2a174ad763\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96\">node_instance</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_l.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_l\"></a>- l -</h3><ul>\n<li>lastBroadcastMsgCounter\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7\">NodeList</a>\n</li>\n<li>lastControlCounter\n: <a class=\"el\" href=\"classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#aee6b3fdf81d44af5053d138136d0f7f5\">node_instance</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">rtcmem_data_t</a>\n</li>\n<li>lastDownlinkMsgCounter\n: <a class=\"el\" href=\"classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a6ac60e31e921d2e101c86584eb5a5489\">node_instance</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">rtcmem_data_t</a>\n</li>\n<li>lastMessageCounter\n: <a class=\"el\" href=\"classNode.html#af2378f7b085ccdc06314b12263fd2d34\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91\">node_instance</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">rtcmem_data_t</a>\n</li>\n<li>lastMessageTime\n: <a class=\"el\" href=\"classNode.html#a2d56bbba3211927eff545e385ef5d162\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a7eadabd847f82e2383dd440fd3cddc37\">node_instance</a>\n</li>\n<li>lastOTAmsg\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd\">EnigmaIOTNodeClass</a>\n</li>\n<li>led\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa202545b98827df6cdfeea82898cba6c\">CONTROLLER_CLASS_NAME</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781\">EnigmaIOTNodeClass</a>\n</li>\n<li>ledOnTime\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1\">EnigmaIOTNodeClass</a>\n</li>\n<li>len\n: <a class=\"el\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">msg_queue_item_t</a>\n</li>\n<li>linked\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a311c8e216f6f9b9f492a4bf6758edf80\">smartSwitchControllerHw_t</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_m.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_m\"></a>- m -</h3><ul>\n<li>mac\n: <a class=\"el\" href=\"classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">node_instance</a>\n</li>\n<li>maxSize\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>mqtt_client\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327\">GwOutput_MQTT</a>\n</li>\n<li>mqtt_pass\n: <a class=\"el\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqttgw_config_t</a>\n</li>\n<li>mqtt_port\n: <a class=\"el\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqttgw_config_t</a>\n</li>\n<li>mqtt_queue\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163\">GwOutput_MQTT</a>\n</li>\n<li>mqtt_server\n: <a class=\"el\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqttgw_config_t</a>\n</li>\n<li>mqtt_user\n: <a class=\"el\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqttgw_config_t</a>\n</li>\n<li>mqttgw_config\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516\">GwOutput_MQTT</a>\n</li>\n<li>mqttPassParam\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53\">GwOutput_MQTT</a>\n</li>\n<li>mqttPortParam\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d\">GwOutput_MQTT</a>\n</li>\n<li>mqttServerParam\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef\">GwOutput_MQTT</a>\n</li>\n<li>mqttUserParam\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f\">GwOutput_MQTT</a>\n</li>\n<li>myPublicKey\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31\">EnigmaIOTGatewayClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_n.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_n\"></a>- n -</h3><ul>\n<li>netName\n: <a class=\"el\" href=\"classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa\">GatewayOutput_generic</a>\n</li>\n<li>networkKey\n: <a class=\"el\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">gateway_config_t</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">rtcmem_data_t</a>\n</li>\n<li>networkName\n: <a class=\"el\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">gateway_config_t</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">rtcmem_data_t</a>\n</li>\n<li>node\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435\">EnigmaIOTNodeClass</a>\n</li>\n<li>nodeId\n: <a class=\"el\" href=\"classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f\">node_instance</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">rtcmem_data_t</a>\n</li>\n<li>nodeKey\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">rtcmem_data_t</a>\n</li>\n<li>nodeKeyValid\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">rtcmem_data_t</a>\n</li>\n<li>nodelist\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17\">EnigmaIOTGatewayClass</a>\n</li>\n<li>nodeName\n: <a class=\"el\" href=\"classNode.html#aa270ef450c28e630de129a94c6992805\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#ad979924ffe46421c554052889ee590fb\">node_instance</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">rtcmem_data_t</a>\n</li>\n<li>nodeRegisterStatus\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">rtcmem_data_t</a>\n</li>\n<li>nodes\n: <a class=\"el\" href=\"classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa\">NodeList</a>\n</li>\n<li>notifyConnection\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72\">EnigmaIOTNodeClass</a>\n</li>\n<li>notifyData\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549\">EnigmaIOTNodeClass</a>\n</li>\n<li>notifyDisconnection\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc\">EnigmaIOTNodeClass</a>\n</li>\n<li>notifyHADiscovery\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967\">EnigmaIOTGatewayClass</a>\n</li>\n<li>notifyNewNode\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3\">EnigmaIOTGatewayClass</a>\n</li>\n<li>notifyNodeDisconnection\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061\">EnigmaIOTGatewayClass</a>\n</li>\n<li>notifyRestartRequested\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b\">EnigmaIOTGatewayClass</a>\n</li>\n<li>notifyWiFiManagerExit\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4\">EnigmaIOTNodeClass</a>\n</li>\n<li>notifyWiFiManagerStarted\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9\">EnigmaIOTNodeClass</a>\n</li>\n<li>numElements\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_o.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_o\"></a>- o -</h3><ul>\n<li>offset\n: <a class=\"el\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">TimeManagerClass</a>\n</li>\n<li>ON_STATE\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a4655115d731c63e4f4e98f3b2cf0f743\">smartSwitchControllerHw_t</a>\n</li>\n<li>oneWire\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#aa83d1a9fa08dfeb08690d132e77883db\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>otaError\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6\">EnigmaIOTNodeClass</a>\n</li>\n<li>otaRunning\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888\">EnigmaIOTNodeClass</a>\n</li>\n<li>out_queue\n: <a class=\"el\" href=\"classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92\">Espnow_halClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_p.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_p\"></a>- p -</h3><ul>\n<li>packetErrors\n: <a class=\"el\" href=\"classNode.html#a4e2e4c6afb4bf93ca10e60d239fd87c5\">Node</a>\n</li>\n<li>packetNumber\n: <a class=\"el\" href=\"classNode.html#aedfde4376c7c84dd8c88c2c530b3b102\">Node</a>\n</li>\n<li>packetsHour\n: <a class=\"el\" href=\"classNode.html#abc1ad898434142e44923f7220b6a2ae4\">Node</a>\n</li>\n<li>payload\n: <a class=\"el\" href=\"structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5\">comms_queue_item_t</a>\n, <a class=\"el\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">mqtt_queue_item_t</a>\n</li>\n<li>payload_len\n: <a class=\"el\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">comms_queue_item_t</a>\n, <a class=\"el\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">mqtt_queue_item_t</a>\n</li>\n<li>per\n: <a class=\"el\" href=\"classNode.html#a2f8f6419cc10c972285178991b2cec78\">Node</a>\n</li>\n<li>plainNetKey\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded\">EnigmaIOTGatewayClass</a>\n</li>\n<li>privateDHKey\n: <a class=\"el\" href=\"classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3\">CryptModule</a>\n</li>\n<li>protectOTA\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0\">EnigmaIOTNodeClass</a>\n</li>\n<li>publicDHKey\n: <a class=\"el\" href=\"classCryptModule.html#ae55611b17617615a79de5325d2c3c02d\">CryptModule</a>\n</li>\n<li>pushReleased\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>pushTriggered\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a\">CONTROLLER_CLASS_NAME</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_q.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_q\"></a>- q -</h3><ul>\n<li>qMessageLength\n: <a class=\"el\" href=\"classNode.html#a41f17a6abd376d602bef3925c751a181\">Node</a>\n</li>\n<li>qMessagePending\n: <a class=\"el\" href=\"classNode.html#a0db2a4dfda51cfc5afe8c846a622ba54\">Node</a>\n</li>\n<li>queuedMessage\n: <a class=\"el\" href=\"classNode.html#a712ec21cec6ac19ee68c8beb202fbf92\">Node</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_r.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_r\"></a>- r -</h3><ul>\n<li>rateFilter\n: <a class=\"el\" href=\"classNode.html#adba11398693739d5fc1d9a755d4bc567\">Node</a>\n</li>\n<li>readIndex\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>readyToSend\n: <a class=\"el\" href=\"classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960\">Espnow_halClass</a>\n</li>\n<li>relayPin\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a383953b4e6d9f3a294ed0cc56da0064a\">smartSwitchControllerHw_t</a>\n</li>\n<li>relayPinParam\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a4c81e6c8ec96a457e0e8f3e1bad4525f\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>relayStatus\n: <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#aebd780051c191b829135d424b0b504a3\">smartSwitchControllerHw_t</a>\n</li>\n<li>requestReportRSSI\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1\">EnigmaIOTNodeClass</a>\n</li>\n<li>requestSearchGateway\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1\">EnigmaIOTNodeClass</a>\n</li>\n<li>resetPin\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144\">EnigmaIOTNodeClass</a>\n</li>\n<li>restartReason\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218\">EnigmaIOTNodeClass</a>\n</li>\n<li>retain\n: <a class=\"el\" href=\"structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570\">mqtt_queue_item_t</a>\n</li>\n<li>roundTripDelay\n: <a class=\"el\" href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">TimeManagerClass</a>\n</li>\n<li>rssi\n: <a class=\"el\" href=\"classNode.html#a48d7a268139be97133747b7692a5f888\">Node</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b\">rtcmem_data_t</a>\n</li>\n<li>rtcmem_data\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69\">EnigmaIOTNodeClass</a>\n</li>\n<li>rxled\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816\">EnigmaIOTGatewayClass</a>\n</li>\n<li>rxLedOnTime\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64\">EnigmaIOTGatewayClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_s\"></a>- s -</h3><ul>\n<li>sendData\n: <a class=\"el\" href=\"classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d\">EnigmaIOTjsonController</a>\n</li>\n<li>sensors\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ae875eb77d530db257752d87a010ec6c7\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>sentResult\n: <a class=\"el\" href=\"classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130\">Comms_halClass</a>\n</li>\n<li>server\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classGatewayAPI.html#a7327209d50f6c17e3cd1ad67f2941e9a\">GatewayAPI</a>\n</li>\n<li>shouldRestart\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365\">EnigmaIOTNodeClass</a>\n</li>\n<li>shouldSaveConfig\n: <a class=\"el\" href=\"classGwOutput__MQTT.html#aa8a75a12858e138be2e92c69f2111038\">GwOutput_MQTT</a>\n</li>\n<li>sleepRequested\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649\">EnigmaIOTNodeClass</a>\n</li>\n<li>sleepTime\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91\">EnigmaIOTNodeClass</a>\n, <a class=\"el\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">rtcmem_data_t</a>\n</li>\n<li>sleepy\n: <a class=\"el\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">rtcmem_data_t</a>\n</li>\n<li>sleepyNode\n: <a class=\"el\" href=\"classNode.html#a774efd63a9d427c0911b07dc3a7ac11d\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#adc14b97d211609ff286c2edc4bcbe061\">node_instance</a>\n</li>\n<li>status\n: <a class=\"el\" href=\"classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3\">Node</a>\n, <a class=\"el\" href=\"structnode__instance.html#a784768cbda2285978d85c6dd17c01158\">node_instance</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_t\"></a>- t -</h3><ul>\n<li>tempBuffer\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74\">EnigmaIOTGatewayClass</a>\n</li>\n<li>tempC\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#a31b856de204d6bf15ed12641ff748dc3\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>tempSent\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#ab566b0093af7f84c645a5c35342c6a51\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>timeIsAdjusted\n: <a class=\"el\" href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">TimeManagerClass</a>\n</li>\n<li>timeSyncPeriod\n: <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4\">EnigmaIOTNodeClass</a>\n</li>\n<li>topic\n: <a class=\"el\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">mqtt_queue_item_t</a>\n</li>\n<li>txled\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453\">EnigmaIOTGatewayClass</a>\n</li>\n<li>txLedOnTime\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243\">EnigmaIOTGatewayClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_u.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_u\"></a>- u -</h3><ul>\n<li>useCounter\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf\">EnigmaIOTNodeClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_vars_w.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_w\"></a>- w -</h3><ul>\n<li>wifiManager\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">EnigmaIOTNodeClass</a>\n</li>\n<li>writeIndex\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_w.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index_w\"></a>- w -</h3><ul>\n<li>wifiManager\n: <a class=\"el\" href=\"classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6\">EnigmaIOTGatewayClass</a>\n, <a class=\"el\" href=\"classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78\">EnigmaIOTNodeClass</a>\n</li>\n<li>writeIndex\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/functions_~.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all class members with links to the classes they belong to:</div>\n\n<h3><a id=\"index__7E\"></a>- ~ -</h3><ul>\n<li>~CONTROLLER_CLASS_NAME()\n: <a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284\">CONTROLLER_CLASS_NAME</a>\n</li>\n<li>~EnigmaIOTRingBuffer()\n: <a class=\"el\" href=\"classEnigmaIOTRingBuffer.html#aba3855eadedeaa091aff67f49bdc2255\">EnigmaIOTRingBuffer&lt; Telement &gt;</a>\n</li>\n<li>~FilterClass()\n: <a class=\"el\" href=\"classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619\">FilterClass</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index__5F\"></a>- _ -</h3><ul>\n<li>_LED_OFF\n: <a class=\"el\" href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">LedController.h</a>\n</li>\n<li>_LED_ON\n: <a class=\"el\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">LedController.h</a>\n</li>\n<li>_peerType\n: <a class=\"el\" href=\"espnow__hal_8cpp.html#a62ba3af3e98793dfe8f0e3039e325340\">espnow_hal.cpp</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_a\"></a>- a -</h3><ul>\n<li>AAD_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>ALARM_PANEL\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762\">haEntity.h</a>\n</li>\n<li>ALREADY_USED\n: <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\">NodeList.h</a>\n</li>\n<li>arduinoOTAConfigure()\n: <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a8d52c8107e0bcc9687be62f7e0b388ae\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>AVERAGE_FILTER\n: <a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\">Filter.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_b\"></a>- b -</h3><ul>\n<li>BINARY_SENSOR\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">haEntity.h</a>\n</li>\n<li>BLUE_LED\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n</li>\n<li>BOOT_FLAG_TIMEOUT\n: <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-DashButton-Controller.cpp</a>\n</li>\n<li>bootRelayStatus_t\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">SmartSwitchController.h</a>\n</li>\n<li>bootStateKey\n: <a class=\"el\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">SmartSwitchController.cpp</a>\n</li>\n<li>BRCAST_KEY\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">NodeList.h</a>\n</li>\n<li>BROADCAST_ADDRESS\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>BROADCAST_KEY_REQUEST\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a45ed732c2c1b8f670d6730e6f7a684b5\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa45ed732c2c1b8f670d6730e6f7a684b5\">EnigmaIOTNode.h</a>\n</li>\n<li>BROADCAST_KEY_RESPONSE\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faebca9b745a0bd1dedae14258e54e1838\">EnigmaIOTNode.h</a>\n</li>\n<li>BROADCAST_NONE_NAME\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>bs_battery\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\">haEntity.h</a>\n</li>\n<li>bs_battery_charging\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\">haEntity.h</a>\n</li>\n<li>bs_cold\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\">haEntity.h</a>\n</li>\n<li>bs_connectivity\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\">haEntity.h</a>\n</li>\n<li>bs_door\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\">haEntity.h</a>\n</li>\n<li>bs_garage_door\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\">haEntity.h</a>\n</li>\n<li>bs_gas\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\">haEntity.h</a>\n</li>\n<li>bs_heat\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\">haEntity.h</a>\n</li>\n<li>bs_light\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\">haEntity.h</a>\n</li>\n<li>bs_lock\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\">haEntity.h</a>\n</li>\n<li>bs_moisture\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\">haEntity.h</a>\n</li>\n<li>bs_motion\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\">haEntity.h</a>\n</li>\n<li>bs_moving\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\">haEntity.h</a>\n</li>\n<li>bs_none\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\">haEntity.h</a>\n</li>\n<li>bs_occupancy\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\">haEntity.h</a>\n</li>\n<li>bs_opening\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\">haEntity.h</a>\n</li>\n<li>bs_plug\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\">haEntity.h</a>\n</li>\n<li>bs_power\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\">haEntity.h</a>\n</li>\n<li>bs_presence\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\">haEntity.h</a>\n</li>\n<li>bs_problem\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\">haEntity.h</a>\n</li>\n<li>bs_safety\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\">haEntity.h</a>\n</li>\n<li>bs_smoke\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\">haEntity.h</a>\n</li>\n<li>bs_sound\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\">haEntity.h</a>\n</li>\n<li>bs_vibration\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\">haEntity.h</a>\n</li>\n<li>bs_window\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\">haEntity.h</a>\n</li>\n<li>BSON\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da311c13f8df1217b0cd4d5537cb91311f\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba311c13f8df1217b0cd4d5537cb91311f\">EnigmaIOTNode.h</a>\n</li>\n<li>buildGetName()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aae12028b7a1857ceb320c435832b09b5\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildGetRSSI()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a20d09b7746e96e3f2706652522c121fa\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildGetSleep()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a90e4277194db83896803d38387ec0369\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildGetVersion()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a7bb1ee00fcd42cf937a7f6173e2a8647\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildOtaMsg()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#acc743eebc6ec1a9480db25fa0f59332a\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildRestartNode()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a000e9c08be2b294e884d9a76d447c7ca\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildSendBrcastKey()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aa713b61843ba50cdd12bba2d34d1065e\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildSetIdentify()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#ada98ad7b4543b42a5d57f458528bf2d6\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildSetName()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aa4eb5b74c01643d49f6b82908e85cc32\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildSetResetConfig()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a322bbbaa773a92c19c2ec8daee290bc5\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildSetSleep()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aab70cbb2f23008e90d70b1d744d3e71c\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>BUILTIN_LED\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">EnigmaIOTGatewayDummy.cpp</a>\n</li>\n<li>button_1\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\">haTrigger.h</a>\n</li>\n<li>button_2\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9482c259cff58c7784eed9f35f927400\">haTrigger.h</a>\n</li>\n<li>button_3\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba791944b6979069dd5f7d962556ddc604\">haTrigger.h</a>\n</li>\n<li>button_4\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9db0c27b13d686faf831f1515a9a5340\">haTrigger.h</a>\n</li>\n<li>button_5\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba45efbed920db6ce550810ced085e9b18\">haTrigger.h</a>\n</li>\n<li>button_6\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8\">haTrigger.h</a>\n</li>\n<li>button_double_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca9cfbd94dabbbdcb25bdff5a9fbcead58\">haTrigger.h</a>\n</li>\n<li>button_long_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cadc63942310d712596e55a8f04680fa60\">haTrigger.h</a>\n</li>\n<li>button_long_release\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca762074f9733bc47a3bc38344c36d1a29\">haTrigger.h</a>\n</li>\n<li>BUTTON_PIN\n: <a class=\"el\" href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">ButtonController.h</a>\n</li>\n<li>button_quadruple_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca000c3a771115a30a1c497a9cb8a19014\">haTrigger.h</a>\n</li>\n<li>button_quintuple_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6\">haTrigger.h</a>\n</li>\n<li>button_short_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">haTrigger.h</a>\n</li>\n<li>button_short_release\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca6ba5b8432af7d558ba016c02ee898712\">haTrigger.h</a>\n</li>\n<li>button_triple_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae310001a87f47b0d5398c055f0dac403\">haTrigger.h</a>\n</li>\n<li>buttonKey\n: <a class=\"el\" href=\"SmartSwitchController_8cpp.html#ac6ac941d05242bf7013c414c28fe51f9\">SmartSwitchController.cpp</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_c\"></a>- c -</h3><ul>\n<li>calculateCRC32()\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#a81e44efba216f1a0a981219616eeb8f3\">helperFunctions.h</a>\n</li>\n<li>CAMERA\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956\">haEntity.h</a>\n</li>\n<li>CAYENNELPP\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">EnigmaIOTNode.h</a>\n</li>\n<li>CBOR\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da56f7b9e0a4250b6a5c73811ae092e686\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba56f7b9e0a4250b6a5c73811ae092e686\">EnigmaIOTNode.h</a>\n</li>\n<li>CHECK_COMM_ERRORS\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>checkMsgType()\n: <a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#a57969f4236bd72eca4fa83155a025085\">GwOutput_mqtt.cpp</a>\n</li>\n<li>CHMSG_LEN\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">EnigmaIOTGateway.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">EnigmaIOTNode.cpp</a>\n</li>\n<li>cipher\n: <a class=\"el\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cryptModule.cpp</a>\n</li>\n<li>clearRtcData()\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a1b66b36dbb3d32b25e7f4b2cc4e0accb\">EnigmaIOTNode.cpp</a>\n</li>\n<li>CLIENT_HELLO\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa0c8da6c451065bed79ea70684e6f3fca\">EnigmaIOTNode.h</a>\n</li>\n<li>CLOCK_REQUEST\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa50ab02cc83b80322e63edd2e2779a735\">EnigmaIOTNode.h</a>\n</li>\n<li>CLOCK_RESPONSE\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa597b515e2c48496c513e6d502a7528c0\">EnigmaIOTNode.h</a>\n</li>\n<li>COMM_ERRORS_BEFORE_SCAN\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5\">EnigmaIoTconfig.h</a>\n</li>\n<li>COMM_GATEWAY\n: <a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">Comms_hal.h</a>\n</li>\n<li>COMM_NODE\n: <a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">Comms_hal.h</a>\n</li>\n<li>commandKey\n: <a class=\"el\" href=\"LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">LedController.cpp</a>\n, <a class=\"el\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">SmartSwitchController.cpp</a>\n</li>\n<li>comms_hal_rcvd_data\n: <a class=\"el\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">Comms_hal.h</a>\n</li>\n<li>comms_hal_sent_data\n: <a class=\"el\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">Comms_hal.h</a>\n</li>\n<li>COMMS_QUEUE_SIZE\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>CONFIG_FILE\n: <a class=\"el\" href=\"ds18b20Controller_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">ds18b20Controller.cpp</a>\n, <a class=\"el\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">SmartSwitchController.cpp</a>\n, <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a0a5b20c0a44622656e3028948ca20a47\">GwOutput_mqtt.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">EnigmaIOTGateway.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">EnigmaIOTNode.cpp</a>\n, <a class=\"el\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">ButtonController.cpp</a>\n, <a class=\"el\" href=\"DashButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">DashButtonController.cpp</a>\n, <a class=\"el\" href=\"BasicController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">BasicController.cpp</a>\n, <a class=\"el\" href=\"LedController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">LedController.cpp</a>\n</li>\n<li>CONFIG_RESET\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\">NodeList.h</a>\n</li>\n<li>confirmParam\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a3fab167b11bfa83a179e904d89a38d95\">GatewayAPI.cpp</a>\n</li>\n<li>CONNECT_TO_WIFI_AP\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a3be8ceb481b00916205f536e6028e2f5\">EnigmaIoTconfig.h</a>\n</li>\n<li>connectEventHandler()\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">enigmaiot_node_nonsleepy.cpp</a>\n</li>\n<li>connectionLed\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>connectionLedFlashing\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>CONTROL_DATA\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa6b9b36c3722a1256ac7fa097bf10f4de\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\">EnigmaIOTGateway.h</a>\n</li>\n<li>control_message_type\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4\">NodeList.h</a>\n</li>\n<li>control_message_type_t\n: <a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">NodeList.h</a>\n</li>\n<li>CONTROL_TYPE\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">EnigmaIOTNode.h</a>\n</li>\n<li>controller\n: <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-Led-Controller.cpp</a>\n</li>\n<li>CONTROLLER_CLASS_NAME\n: <a class=\"el\" href=\"LedController_8h.html#a8257556540571a0fe1f5f05eb434af87\">LedController.h</a>\n, <a class=\"el\" href=\"ButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87\">ButtonController.h</a>\n, <a class=\"el\" href=\"DashButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87\">DashButtonController.h</a>\n, <a class=\"el\" href=\"BasicController_8h.html#a8257556540571a0fe1f5f05eb434af87\">BasicController.h</a>\n, <a class=\"el\" href=\"SmartSwitchController_8h.html#a8257556540571a0fe1f5f05eb434af87\">SmartSwitchController.h</a>\n, <a class=\"el\" href=\"ds18b20Controller_8h.html#a8257556540571a0fe1f5f05eb434af87\">ds18b20Controller.h</a>\n</li>\n<li>CONTROLLER_NAME\n: <a class=\"el\" href=\"DashButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">DashButtonController.h</a>\n, <a class=\"el\" href=\"LedController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">LedController.h</a>\n, <a class=\"el\" href=\"SmartSwitchController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">SmartSwitchController.h</a>\n, <a class=\"el\" href=\"BasicController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">BasicController.h</a>\n, <a class=\"el\" href=\"ButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">ButtonController.h</a>\n, <a class=\"el\" href=\"ds18b20Controller_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">ds18b20Controller.h</a>\n</li>\n<li>COVER\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">haEntity.h</a>\n</li>\n<li>cover_awning\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\">haEntity.h</a>\n</li>\n<li>cover_blind\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\">haEntity.h</a>\n</li>\n<li>cover_curtain\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\">haEntity.h</a>\n</li>\n<li>cover_damper\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\">haEntity.h</a>\n</li>\n<li>cover_door\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\">haEntity.h</a>\n</li>\n<li>cover_garage\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\">haEntity.h</a>\n</li>\n<li>cover_gate\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\">haEntity.h</a>\n</li>\n<li>cover_none\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\">haEntity.h</a>\n</li>\n<li>cover_shade\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\">haEntity.h</a>\n</li>\n<li>cover_shutter\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\">haEntity.h</a>\n</li>\n<li>cover_window\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\">haEntity.h</a>\n</li>\n<li>CRC_LENGTH\n: <a class=\"el\" href=\"cryptModule_8h.html#ab705865bb866bc5f070bbde9650eaa2a\">cryptModule.h</a>\n</li>\n<li>CRYPTMODULE_DEBUG_TAG\n: <a class=\"el\" href=\"cryptModule_8h.html#a589540d306f62e7810a03bcfa28fbeef\">cryptModule.h</a>\n</li>\n<li>Crypto\n: <a class=\"el\" href=\"cryptModule_8h.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">cryptModule.h</a>\n, <a class=\"el\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">cryptModule.cpp</a>\n</li>\n<li>CYPHER_TYPE\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a60424869b9d0955e8745158aadcd95b0\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_d\"></a>- d -</h3><ul>\n<li>data\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">GwOutput_generic.h</a>\n</li>\n<li>DATA_TYPE\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">EnigmaIOTNode.h</a>\n</li>\n<li>dataMessageType_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">EnigmaIOTNode.h</a>\n</li>\n<li>DBG\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a49606be7356624568932ec81c0d429f4\">EnigmaIOTdebug.h</a>\n</li>\n<li>DEBUG_ESP_PORT\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7\">EnigmaIoTconfig.h</a>\n</li>\n<li>DEBUG_LEVEL\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ac2d33ccaf63f5d5b66552b95426c0137\">EnigmaIoTconfig.h</a>\n</li>\n<li>DEFAULT_BUTTON_PIN\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6\">SmartSwitchController.h</a>\n</li>\n<li>DEFAULT_CHANNEL\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">EnigmaIoTconfig.h</a>\n</li>\n<li>DEFAULT_RELAY_PIN\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a77b012ee4a034b57e61216c2f25b92bf\">SmartSwitchController.h</a>\n</li>\n<li>DEFAULT_SLEEP_TIME\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f\">EnigmaIoTconfig.h</a>\n</li>\n<li>DEVICE_TRACKER\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c\">haEntity.h</a>\n</li>\n<li>DEVICE_TRIGGER\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">haEntity.h</a>\n</li>\n<li>DISCONNECT_ON_DATA_ERROR\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>disconnectEventHandler()\n: <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-DashButton-Controller.cpp</a>\n</li>\n<li>doRestart()\n: <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4e0b35257234db80b4d6771ec42153a3\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>DOWNLINK_WAIT_TIME\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e\">EnigmaIoTconfig.h</a>\n</li>\n<li>DOWNSTREAM_BRCAST_CTRL_DATA\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fade8205c810264376dfc45dc2b72e116c\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\">EnigmaIOTGateway.h</a>\n</li>\n<li>DOWNSTREAM_BRCAST_DATA_GET\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae5aa3bb71dda4aa9ba38ca2a5eeba422\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\">EnigmaIOTGateway.h</a>\n</li>\n<li>DOWNSTREAM_BRCAST_DATA_SET\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa3b0c314d51c09e5960e07704bb05f4ab\">EnigmaIOTNode.h</a>\n</li>\n<li>DOWNSTREAM_CTRL_DATA\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fad2c18ef749d0eca5f53ecfb0fb0af0bc\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\">EnigmaIOTGateway.h</a>\n</li>\n<li>DOWNSTREAM_DATA_GET\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fac8a74f458aed6681bf199f1ce2f9eb03\">EnigmaIOTNode.h</a>\n</li>\n<li>DOWNSTREAM_DATA_SET\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa21ca6763c97e4804ee6957d039443d2d\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">EnigmaIOTGateway.h</a>\n</li>\n<li>DSTROOTCA_H\n: <a class=\"el\" href=\"dstrootca_8h.html#ac124c2449b0ec4b04fe4bc4e61632e33\">dstrootca.h</a>\n</li>\n<li>dumpRtcData()\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">EnigmaIOTNode.cpp</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_defs.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index__5F\"></a>- _ -</h3><ul>\n<li>_LED_OFF\n: <a class=\"el\" href=\"LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde\">LedController.h</a>\n</li>\n<li>_LED_ON\n: <a class=\"el\" href=\"LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea\">LedController.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_b\"></a>- b -</h3><ul>\n<li>BLUE_LED\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>BUILTIN_LED\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0\">EnigmaIOTGatewayDummy.cpp</a>\n</li>\n<li>BUTTON_PIN\n: <a class=\"el\" href=\"ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da\">ButtonController.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_c\"></a>- c -</h3><ul>\n<li>CHMSG_LEN\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">EnigmaIOTGateway.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a2bd3dd6873079bda9c22994760e817dc\">EnigmaIOTNode.cpp</a>\n</li>\n<li>CONNECT_TO_WIFI_AP\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a3be8ceb481b00916205f536e6028e2f5\">EnigmaIoTconfig.h</a>\n</li>\n<li>CONTROLLER_CLASS_NAME\n: <a class=\"el\" href=\"ButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87\">ButtonController.h</a>\n, <a class=\"el\" href=\"DashButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87\">DashButtonController.h</a>\n, <a class=\"el\" href=\"BasicController_8h.html#a8257556540571a0fe1f5f05eb434af87\">BasicController.h</a>\n, <a class=\"el\" href=\"LedController_8h.html#a8257556540571a0fe1f5f05eb434af87\">LedController.h</a>\n, <a class=\"el\" href=\"ds18b20Controller_8h.html#a8257556540571a0fe1f5f05eb434af87\">ds18b20Controller.h</a>\n, <a class=\"el\" href=\"SmartSwitchController_8h.html#a8257556540571a0fe1f5f05eb434af87\">SmartSwitchController.h</a>\n</li>\n<li>CRYPTMODULE_DEBUG_TAG\n: <a class=\"el\" href=\"cryptModule_8h.html#a589540d306f62e7810a03bcfa28fbeef\">cryptModule.h</a>\n</li>\n<li>CYPHER_TYPE\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a60424869b9d0955e8745158aadcd95b0\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_d\"></a>- d -</h3><ul>\n<li>DBG\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a49606be7356624568932ec81c0d429f4\">EnigmaIOTdebug.h</a>\n</li>\n<li>DEBUG_ESP_PORT\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7\">EnigmaIoTconfig.h</a>\n</li>\n<li>DEBUG_LEVEL\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ac2d33ccaf63f5d5b66552b95426c0137\">EnigmaIoTconfig.h</a>\n</li>\n<li>DEFAULT_BUTTON_PIN\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6\">SmartSwitchController.h</a>\n</li>\n<li>DEFAULT_RELAY_PIN\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a77b012ee4a034b57e61216c2f25b92bf\">SmartSwitchController.h</a>\n</li>\n<li>DSTROOTCA_H\n: <a class=\"el\" href=\"dstrootca_8h.html#ac124c2449b0ec4b04fe4bc4e61632e33\">dstrootca.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_e\"></a>- e -</h3><ul>\n<li>ENABLE_REST_API\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a7961bef0ea455a0913f7bf894b58eac4\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>ENABLE_STATUS_MESSAGES\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ace3e2bfbccf2b3dafab4775343471413\">EnigmaIoTconfig.h</a>\n</li>\n<li>ENABLE_WEB_API\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ad736e65e20072f63bc4d21d745949962\">EnigmaIoTconfig.h</a>\n</li>\n<li>ERROR\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a8fe83ac76edc595f6b98cd4a4127aed5\">EnigmaIOTdebug.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_g\"></a>- g -</h3><ul>\n<li>GET_NAME\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#af8bca12527bac4b474e2ccb5acd8691e\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_NAME_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a043021359c728f4265337a8c21edfcdb\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_RSSI\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae274ed0194e5685c280ab9148dbcba69\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_RSSI_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a44bf9b184af7520ec127c6b705991c8f\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_SLEEP\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a8fa3ce9af2986feed0592ad3f82b0e8a\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_SLEEP_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a8d48508893d087bd76ac4061b112cce7\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_USER_DATA\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ac6dad41b3de63cebfef84fc4677cded8\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_VERSION\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae9ef65fac5a6e3c6594811a7c8ee2291\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_VERSION_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a1bbd404f93aed82bc0d713238fa2bf6b\">GwOutput_mqtt.h</a>\n</li>\n<li>GW_STATUS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a13c1b13340e4cfcf8fa233d3f941853e\">GwOutput_mqtt.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_h\"></a>- h -</h3><ul>\n<li>HA_FIRST_DISCOVERY_DELAY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a1ca4cd82c4372161db98aee89cff4868\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>HA_FIRST_DISCOVERY_DELAY_SLEEPY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a49e01af100e8659b911c4dc6c8b30ef4\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>HA_NEXT_DISCOVERY_DELAY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21aa047809e9b061f5712589cf2136f9\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>HA_NEXT_DISCOVERY_DELAY_SLEEPY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a19844f57e8cb836e57d6418a76e6717f\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_i\"></a>- i -</h3><ul>\n<li>IKMSG_LEN\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">EnigmaIOTGateway.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">EnigmaIOTNode.cpp</a>\n</li>\n<li>INFO\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#ae1103fea1e1b3c41ca3322d5389f7162\">EnigmaIOTdebug.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_l\"></a>- l -</h3><ul>\n<li>LED_BUILTIN\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>LED_OFF\n: <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a80700bb63bd56ebabbb4728aa433fd29\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a80700bb63bd56ebabbb4728aa433fd29\">EnigmaIOTNode.h</a>\n</li>\n<li>LED_ON\n: <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">EnigmaIOTNode.h</a>\n</li>\n<li>LED_PIN\n: <a class=\"el\" href=\"LedController_8h.html#ab4553be4db9860d940f81d7447173b2f\">LedController.h</a>\n</li>\n<li>LOST_MESSAGES\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a2aa30d8c4ad4f2895fefd1b1d425ee66\">GwOutput_mqtt.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_m\"></a>- m -</h3><ul>\n<li>MACSTR\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">helperFunctions.cpp</a>\n</li>\n<li>MAX_ORDER\n: <a class=\"el\" href=\"Filter_8h.html#ab08dffec08ac450d78d4c062b571939e\">Filter.h</a>\n</li>\n<li>MAX_STR_LEN\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6\">helperFunctions.cpp</a>\n</li>\n<li>MIN_ORDER\n: <a class=\"el\" href=\"Filter_8h.html#a23bae2b7cd4008c90256be146e21cccf\">Filter.h</a>\n</li>\n<li>MQTT_BUFFER_SIZE\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a4f9d3fafe897148f4e44e0db74816a9c\">GwOutput_mqtt.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_n\"></a>- n -</h3><ul>\n<li>NO_DEBUG\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a424f1b989129c5519f4df8f61ad6dcaf\">EnigmaIOTdebug.h</a>\n</li>\n<li>NODE_DATA\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#af1dcc05117b1f2ccb5922611c540e241\">GwOutput_mqtt.h</a>\n</li>\n<li>NODE_STATUS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a82ea7d9552d7d2c2d977c578587e94dc\">GwOutput_mqtt.h</a>\n</li>\n<li>NTP_SERVER_1\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ad2cbd556e432924a29a3efa1d13668af\">EnigmaIoTconfig.h</a>\n</li>\n<li>NTP_SERVER_2\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a562447c925663fec9c7e923f6c46fa7d\">EnigmaIoTconfig.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_o\"></a>- o -</h3><ul>\n<li>OFF\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a29e413f6725b2ba32d165ffaa35b01e5\">SmartSwitchController.h</a>\n</li>\n<li>ON\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">SmartSwitchController.h</a>\n</li>\n<li>ONE_WIRE_BUS\n: <a class=\"el\" href=\"ds18b20Controller_8cpp.html#a4260ed8874da804fb9ef9abba200b487\">ds18b20Controller.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_r\"></a>- r -</h3><ul>\n<li>RED_LED\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>RESET_PIN\n: <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-DashButton-Controller.cpp</a>\n</li>\n<li>RESTART_NOTIF\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae2f0ef8f36c0b685940124089172e6c3\">GwOutput_mqtt.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_s\"></a>- s -</h3><ul>\n<li>SET_IDENTIFY\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a523454d3069bcc08356f43906870a8eb\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_NAME\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a947ddc46cf5393a05a60422574c68dd0\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_OTA\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a03d78690a77ad7c71da69356e13f4111\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_OTA_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a82391b9a9738bbf392fbad554f7ef527\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_RESET_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a7e8363a72c676c15de7221529988ee48\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_RESET_CONFIG\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a9ed6c45eceed73f4dc32d6147957fed5\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_RESTART_MCU\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a2e46d7b49d143e76a290f06fc6892aa3\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_SLEEP\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a0ffae85da5eb98e796fd818c50ac147a\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_USER_DATA\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ad7c2efab8087395f360a163faecc66eb\">GwOutput_mqtt.h</a>\n</li>\n<li>SHMSG_LEN\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">EnigmaIOTGateway.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">EnigmaIOTNode.cpp</a>\n</li>\n<li>SLEEPY\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n</li>\n<li>SUPPORT_HA_DISCOVERY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a16e6dc75c832482efe3cc26d5f187201\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_t\"></a>- t -</h3><ul>\n<li>TEST\n: <a class=\"el\" href=\"ds18b20Controller_8cpp.html#ab946e2e7f7679350627acfded8e2658b\">ds18b20Controller.cpp</a>\n</li>\n<li>TZINFO\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a\">EnigmaIoTconfig.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_u\"></a>- u -</h3><ul>\n<li>USE_FLASH_INSTEAD_RTC\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3adc46611e76e71d60021e6c87d11dcc\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>USE_SERIAL\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_v\"></a>- v -</h3><ul>\n<li>VERBOSE\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a42f8c497a1968074f38bf5055c650dca\">EnigmaIOTdebug.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_w\"></a>- w -</h3><ul>\n<li>WARN\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a271d8f7f52be750e5c744a394ec71344\">EnigmaIOTdebug.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_e\"></a>- e -</h3><ul>\n<li>EMPTY_NAME\n: <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\">NodeList.h</a>\n</li>\n<li>ENABLE_REST_API\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a7961bef0ea455a0913f7bf894b58eac4\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>ENABLE_STATUS_MESSAGES\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ace3e2bfbccf2b3dafab4775343471413\">EnigmaIoTconfig.h</a>\n</li>\n<li>ENABLE_WEB_API\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ad736e65e20072f63bc4d21d745949962\">EnigmaIoTconfig.h</a>\n</li>\n<li>ENIGMAIOT\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">EnigmaIOTGateway.h</a>\n</li>\n<li>ENIGMAIOT_ADDR_LEN\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>ENIGMAIOT_PROT_VERS\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">EnigmaIoTconfig.h</a>\n</li>\n<li>EnigmaIOTGateway\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway.h</a>\n</li>\n<li>EnigmaIOTNode\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode.h</a>\n</li>\n<li>ERROR\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a8fe83ac76edc595f6b98cd4a4127aed5\">EnigmaIOTdebug.h</a>\n</li>\n<li>Espnow_hal\n: <a class=\"el\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">espnow_hal.cpp</a>\n, <a class=\"el\" href=\"espnow__hal_8h.html#a3eef8679955ce5f4743338cbc6bf1e0e\">espnow_hal.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_enum.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;<ul>\n<li>bootRelayStatus_t\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">SmartSwitchController.h</a>\n</li>\n<li>control_message_type\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4\">NodeList.h</a>\n</li>\n<li>dataMessageType_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2\">EnigmaIOTNode.h</a>\n</li>\n<li>FilterType_t\n: <a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">Filter.h</a>\n</li>\n<li>gatewayMessageType_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613\">EnigmaIOTGateway.h</a>\n</li>\n<li>gatewayPayloadEncoding_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">EnigmaIOTGateway.h</a>\n</li>\n<li>gwInvalidateReason_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">EnigmaIOTGateway.h</a>\n</li>\n<li>GwOutput_data_type\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636\">GwOutput_generic.h</a>\n</li>\n<li>ha_triggerSubtype_t\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b\">haTrigger.h</a>\n</li>\n<li>ha_triggerType_t\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c\">haTrigger.h</a>\n</li>\n<li>haBinarySensorClass_t\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haEntity.h</a>\n</li>\n<li>haCoverClass_t\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haEntity.h</a>\n</li>\n<li>haDeviceType_t\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haEntity.h</a>\n</li>\n<li>haSensorClass_t\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haEntity.h</a>\n</li>\n<li>node_status\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">NodeList.h</a>\n</li>\n<li>nodeInvalidateReason_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">EnigmaIOTNode.h</a>\n</li>\n<li>nodeMessageType\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">EnigmaIOTNode.h</a>\n</li>\n<li>nodeNameStatus_t\n: <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9a\">NodeList.h</a>\n</li>\n<li>nodePayloadEncoding_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">EnigmaIOTNode.h</a>\n</li>\n<li>ota_status\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4\">NodeList.h</a>\n</li>\n<li>peerType_t\n: <a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">Comms_hal.h</a>\n</li>\n<li>restartReason_t\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">NodeList.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_a\"></a>- a -</h3><ul>\n<li>ALARM_PANEL\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762\">haEntity.h</a>\n</li>\n<li>ALREADY_USED\n: <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d\">NodeList.h</a>\n</li>\n<li>AVERAGE_FILTER\n: <a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9\">Filter.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_b\"></a>- b -</h3><ul>\n<li>BINARY_SENSOR\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">haEntity.h</a>\n</li>\n<li>BRCAST_KEY\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6\">NodeList.h</a>\n</li>\n<li>BROADCAST_KEY_REQUEST\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa45ed732c2c1b8f670d6730e6f7a684b5\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a45ed732c2c1b8f670d6730e6f7a684b5\">EnigmaIOTGateway.h</a>\n</li>\n<li>BROADCAST_KEY_RESPONSE\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faebca9b745a0bd1dedae14258e54e1838\">EnigmaIOTNode.h</a>\n</li>\n<li>bs_battery\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\">haEntity.h</a>\n</li>\n<li>bs_battery_charging\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\">haEntity.h</a>\n</li>\n<li>bs_cold\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\">haEntity.h</a>\n</li>\n<li>bs_connectivity\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\">haEntity.h</a>\n</li>\n<li>bs_door\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\">haEntity.h</a>\n</li>\n<li>bs_garage_door\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\">haEntity.h</a>\n</li>\n<li>bs_gas\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\">haEntity.h</a>\n</li>\n<li>bs_heat\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\">haEntity.h</a>\n</li>\n<li>bs_light\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\">haEntity.h</a>\n</li>\n<li>bs_lock\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\">haEntity.h</a>\n</li>\n<li>bs_moisture\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\">haEntity.h</a>\n</li>\n<li>bs_motion\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\">haEntity.h</a>\n</li>\n<li>bs_moving\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\">haEntity.h</a>\n</li>\n<li>bs_none\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\">haEntity.h</a>\n</li>\n<li>bs_occupancy\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\">haEntity.h</a>\n</li>\n<li>bs_opening\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\">haEntity.h</a>\n</li>\n<li>bs_plug\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\">haEntity.h</a>\n</li>\n<li>bs_power\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\">haEntity.h</a>\n</li>\n<li>bs_presence\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\">haEntity.h</a>\n</li>\n<li>bs_problem\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\">haEntity.h</a>\n</li>\n<li>bs_safety\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\">haEntity.h</a>\n</li>\n<li>bs_smoke\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\">haEntity.h</a>\n</li>\n<li>bs_sound\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\">haEntity.h</a>\n</li>\n<li>bs_vibration\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\">haEntity.h</a>\n</li>\n<li>bs_window\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\">haEntity.h</a>\n</li>\n<li>BSON\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da311c13f8df1217b0cd4d5537cb91311f\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba311c13f8df1217b0cd4d5537cb91311f\">EnigmaIOTNode.h</a>\n</li>\n<li>button_1\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\">haTrigger.h</a>\n</li>\n<li>button_2\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9482c259cff58c7784eed9f35f927400\">haTrigger.h</a>\n</li>\n<li>button_3\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba791944b6979069dd5f7d962556ddc604\">haTrigger.h</a>\n</li>\n<li>button_4\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9db0c27b13d686faf831f1515a9a5340\">haTrigger.h</a>\n</li>\n<li>button_5\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba45efbed920db6ce550810ced085e9b18\">haTrigger.h</a>\n</li>\n<li>button_6\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8\">haTrigger.h</a>\n</li>\n<li>button_double_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca9cfbd94dabbbdcb25bdff5a9fbcead58\">haTrigger.h</a>\n</li>\n<li>button_long_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cadc63942310d712596e55a8f04680fa60\">haTrigger.h</a>\n</li>\n<li>button_long_release\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca762074f9733bc47a3bc38344c36d1a29\">haTrigger.h</a>\n</li>\n<li>button_quadruple_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca000c3a771115a30a1c497a9cb8a19014\">haTrigger.h</a>\n</li>\n<li>button_quintuple_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6\">haTrigger.h</a>\n</li>\n<li>button_short_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">haTrigger.h</a>\n</li>\n<li>button_short_release\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca6ba5b8432af7d558ba016c02ee898712\">haTrigger.h</a>\n</li>\n<li>button_triple_press\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae310001a87f47b0d5398c055f0dac403\">haTrigger.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_c\"></a>- c -</h3><ul>\n<li>CAMERA\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956\">haEntity.h</a>\n</li>\n<li>CAYENNELPP\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4\">EnigmaIOTNode.h</a>\n</li>\n<li>CBOR\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da56f7b9e0a4250b6a5c73811ae092e686\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba56f7b9e0a4250b6a5c73811ae092e686\">EnigmaIOTNode.h</a>\n</li>\n<li>CLIENT_HELLO\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa0c8da6c451065bed79ea70684e6f3fca\">EnigmaIOTNode.h</a>\n</li>\n<li>CLOCK_REQUEST\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa50ab02cc83b80322e63edd2e2779a735\">EnigmaIOTNode.h</a>\n</li>\n<li>CLOCK_RESPONSE\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa597b515e2c48496c513e6d502a7528c0\">EnigmaIOTNode.h</a>\n</li>\n<li>COMM_GATEWAY\n: <a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0\">Comms_hal.h</a>\n</li>\n<li>COMM_NODE\n: <a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5\">Comms_hal.h</a>\n</li>\n<li>CONFIG_RESET\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f\">NodeList.h</a>\n</li>\n<li>CONTROL_DATA\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa6b9b36c3722a1256ac7fa097bf10f4de\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de\">EnigmaIOTGateway.h</a>\n</li>\n<li>CONTROL_TYPE\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96\">EnigmaIOTNode.h</a>\n</li>\n<li>COVER\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">haEntity.h</a>\n</li>\n<li>cover_awning\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\">haEntity.h</a>\n</li>\n<li>cover_blind\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\">haEntity.h</a>\n</li>\n<li>cover_curtain\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\">haEntity.h</a>\n</li>\n<li>cover_damper\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\">haEntity.h</a>\n</li>\n<li>cover_door\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\">haEntity.h</a>\n</li>\n<li>cover_garage\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\">haEntity.h</a>\n</li>\n<li>cover_gate\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\">haEntity.h</a>\n</li>\n<li>cover_none\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\">haEntity.h</a>\n</li>\n<li>cover_shade\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\">haEntity.h</a>\n</li>\n<li>cover_shutter\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\">haEntity.h</a>\n</li>\n<li>cover_window\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\">haEntity.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_d\"></a>- d -</h3><ul>\n<li>data\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">GwOutput_generic.h</a>\n</li>\n<li>DATA_TYPE\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6\">EnigmaIOTNode.h</a>\n</li>\n<li>DEVICE_TRACKER\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c\">haEntity.h</a>\n</li>\n<li>DEVICE_TRIGGER\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">haEntity.h</a>\n</li>\n<li>DOWNSTREAM_BRCAST_CTRL_DATA\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fade8205c810264376dfc45dc2b72e116c\">EnigmaIOTNode.h</a>\n</li>\n<li>DOWNSTREAM_BRCAST_DATA_GET\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae5aa3bb71dda4aa9ba38ca2a5eeba422\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422\">EnigmaIOTGateway.h</a>\n</li>\n<li>DOWNSTREAM_BRCAST_DATA_SET\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa3b0c314d51c09e5960e07704bb05f4ab\">EnigmaIOTNode.h</a>\n</li>\n<li>DOWNSTREAM_CTRL_DATA\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fad2c18ef749d0eca5f53ecfb0fb0af0bc\">EnigmaIOTNode.h</a>\n</li>\n<li>DOWNSTREAM_DATA_GET\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fac8a74f458aed6681bf199f1ce2f9eb03\">EnigmaIOTNode.h</a>\n</li>\n<li>DOWNSTREAM_DATA_SET\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa21ca6763c97e4804ee6957d039443d2d\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d\">EnigmaIOTGateway.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_e\"></a>- e -</h3><ul>\n<li>EMPTY_NAME\n: <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9\">NodeList.h</a>\n</li>\n<li>ENIGMAIOT\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175\">EnigmaIOTGateway.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_f\"></a>- f -</h3><ul>\n<li>FAN\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73\">haEntity.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_h\"></a>- h -</h3><ul>\n<li>HA_DISC_TYPE\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">EnigmaIOTNode.h</a>\n</li>\n<li>HA_DISCOVERY_MESSAGE\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa01b2a3fb2e751c9536ae814b4b8919c3\">EnigmaIOTNode.h</a>\n</li>\n<li>HVAC\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2\">haEntity.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_i.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_i\"></a>- i -</h3><ul>\n<li>IDENTIFY\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">NodeList.h</a>\n</li>\n<li>INIT\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">NodeList.h</a>\n</li>\n<li>INVALID\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">NodeList.h</a>\n</li>\n<li>INVALIDATE_KEY\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa32637f9c9b67f884990ed21097ebc543\">EnigmaIOTNode.h</a>\n</li>\n<li>IRRELEVANT\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\">NodeList.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_k.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_k\"></a>- k -</h3><ul>\n<li>KEY_EXPIRED\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a09a1d3d5daa36af5469fa79c12a027fe\">EnigmaIOTNode.h</a>\n</li>\n<li>KICKED\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\">EnigmaIOTGateway.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_l.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_l\"></a>- l -</h3><ul>\n<li>LIGHT\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb\">haEntity.h</a>\n</li>\n<li>LOCK\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48\">haEntity.h</a>\n</li>\n<li>lostmessages\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">GwOutput_generic.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_m.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_m\"></a>- m -</h3><ul>\n<li>MEDIAN_FILTER\n: <a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\">Filter.h</a>\n</li>\n<li>MSG_PACK\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba578494bedfca043a7f16b17ae27c75bc\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">EnigmaIOTGateway.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_n.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_n\"></a>- n -</h3><ul>\n<li>NAME_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">NodeList.h</a>\n</li>\n<li>NAME_GET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">NodeList.h</a>\n</li>\n<li>NAME_OK\n: <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\">NodeList.h</a>\n</li>\n<li>NAME_SET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">NodeList.h</a>\n</li>\n<li>NODE_NAME_RESULT\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae69668f8ce604a1b3d09c3314cdba5bf\">EnigmaIOTNode.h</a>\n</li>\n<li>NODE_NAME_SET\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa766d5c890baa0b6a0e7e1e3f5cb0b224\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\">EnigmaIOTGateway.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_o.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_o\"></a>- o -</h3><ul>\n<li>OTA\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">NodeList.h</a>\n</li>\n<li>OTA_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">NodeList.h</a>\n</li>\n<li>OTA_CHECK_FAIL\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">NodeList.h</a>\n</li>\n<li>OTA_CHECK_OK\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\">NodeList.h</a>\n</li>\n<li>OTA_ERROR_RESTART\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\">NodeList.h</a>\n</li>\n<li>OTA_FINISHED\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\">NodeList.h</a>\n</li>\n<li>OTA_OUT_OF_SEQUENCE\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\">NodeList.h</a>\n</li>\n<li>OTA_START_ERROR\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\">NodeList.h</a>\n</li>\n<li>OTA_STARTED\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\">NodeList.h</a>\n</li>\n<li>OTA_TIMEOUT\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\">NodeList.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_p.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_p\"></a>- p -</h3><ul>\n<li>PROT_BUF\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da4d6491239946f63d9cc27a2984c4fe59\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba4d6491239946f63d9cc27a2984c4fe59\">EnigmaIOTNode.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_r.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_r\"></a>- r -</h3><ul>\n<li>RAW\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">EnigmaIOTNode.h</a>\n</li>\n<li>REGISTERED\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">NodeList.h</a>\n</li>\n<li>RELAY_OFF\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">SmartSwitchController.h</a>\n</li>\n<li>RELAY_ON\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\">SmartSwitchController.h</a>\n</li>\n<li>RESET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">NodeList.h</a>\n</li>\n<li>RESET_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\">NodeList.h</a>\n</li>\n<li>RESTART_AFTER_OTA\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\">NodeList.h</a>\n</li>\n<li>RESTART_CONFIRM\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\">NodeList.h</a>\n</li>\n<li>RESTART_NODE\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">NodeList.h</a>\n</li>\n<li>RESTART_REQUESTED\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\">NodeList.h</a>\n</li>\n<li>RSSI_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\">NodeList.h</a>\n</li>\n<li>RSSI_GET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">NodeList.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_s\"></a>- s -</h3><ul>\n<li>SAVE_RELAY_STATUS\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SmartSwitchController.h</a>\n</li>\n<li>SCENE\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4\">haEntity.h</a>\n</li>\n<li>SENSOR\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">haEntity.h</a>\n</li>\n<li>sensor_battery\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\">haEntity.h</a>\n</li>\n<li>SENSOR_BRCAST_DATA\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613affd78f537f0c30f76f209e5afd106843\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faffd78f537f0c30f76f209e5afd106843\">EnigmaIOTNode.h</a>\n</li>\n<li>sensor_current\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\">haEntity.h</a>\n</li>\n<li>SENSOR_DATA\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faa8ba55203a30122cc271cc66b2909b21\">EnigmaIOTNode.h</a>\n</li>\n<li>sensor_energy\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\">haEntity.h</a>\n</li>\n<li>sensor_humidity\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\">haEntity.h</a>\n</li>\n<li>sensor_illuminance\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\">haEntity.h</a>\n</li>\n<li>sensor_none\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\">haEntity.h</a>\n</li>\n<li>sensor_power\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\">haEntity.h</a>\n</li>\n<li>sensor_power_factor\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\">haEntity.h</a>\n</li>\n<li>sensor_pressure\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\">haEntity.h</a>\n</li>\n<li>sensor_signal_strength\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\">haEntity.h</a>\n</li>\n<li>sensor_temperature\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\">haEntity.h</a>\n</li>\n<li>sensor_timestamp\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\">haEntity.h</a>\n</li>\n<li>sensor_voltage\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\">haEntity.h</a>\n</li>\n<li>SERVER_HELLO\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa28914d3bb26ec8c2bd2d5ad9781cbf8c\">EnigmaIOTNode.h</a>\n</li>\n<li>SLEEP\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\">NodeList.h</a>\n</li>\n<li>SLEEP_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">NodeList.h</a>\n</li>\n<li>SLEEP_GET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">NodeList.h</a>\n</li>\n<li>SLEEP_SET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">NodeList.h</a>\n</li>\n<li>SMILE\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba298f796cee1bd5d6decfe81d4a98b554\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da298f796cee1bd5d6decfe81d4a98b554\">EnigmaIOTGateway.h</a>\n</li>\n<li>status\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">GwOutput_generic.h</a>\n</li>\n<li>SWITCH\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">haEntity.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_t\"></a>- t -</h3><ul>\n<li>TAG_SCANNER\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607\">haEntity.h</a>\n</li>\n<li>TOO_LONG\n: <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\">NodeList.h</a>\n</li>\n<li>turn_off\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba83ee6b65c9abe8a11ed4d9692b0a5ae7\">haTrigger.h</a>\n</li>\n<li>turn_on\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">haTrigger.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_u.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_u\"></a>- u -</h3><ul>\n<li>UNDEFINED\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">haEntity.h</a>\n</li>\n<li>UNENCRYPTED_NODE_DATA\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa84d08335ed131183ff525c55c14f3148\">EnigmaIOTNode.h</a>\n</li>\n<li>UNKNOWN_ERROR\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\">EnigmaIOTNode.h</a>\n</li>\n<li>UNKNOWN_REASON\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ab309433c1c035ba010b3aff8756d1637\">NodeList.h</a>\n</li>\n<li>UNREGISTERED\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">NodeList.h</a>\n</li>\n<li>UNREGISTERED_NODE\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a975e594ca3839a0687f31cfbbdb6c90f\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\">EnigmaIOTGateway.h</a>\n</li>\n<li>USER_RESET\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ad1616fcb099e2febf3ffc5d115a99441\">NodeList.h</a>\n</li>\n<li>USERDATA_GET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">NodeList.h</a>\n</li>\n<li>USERDATA_SET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">NodeList.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_v.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_v\"></a>- v -</h3><ul>\n<li>VACUUM\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f\">haEntity.h</a>\n</li>\n<li>VERSION\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">NodeList.h</a>\n</li>\n<li>VERSION_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">NodeList.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_eval_w.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_w\"></a>- w -</h3><ul>\n<li>WAIT_FOR_DOWNLINK\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\">NodeList.h</a>\n</li>\n<li>WAIT_FOR_SERVER_HELLO\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">NodeList.h</a>\n</li>\n<li>WRONG_CLIENT_HELLO\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6ad6e9d0b3e3d479305eb2ce4233f4eca6\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977ad6e9d0b3e3d479305eb2ce4233f4eca6\">EnigmaIOTGateway.h</a>\n</li>\n<li>WRONG_DATA\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a4d7f512e433223ce2caa44e787a2ddff\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\">EnigmaIOTGateway.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_f\"></a>- f -</h3><ul>\n<li>FAILSAFE_RTC_ADDRESS\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n</li>\n<li>FAN\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73\">haEntity.h</a>\n</li>\n<li>FilterType_t\n: <a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7\">Filter.h</a>\n</li>\n<li>FLASH_LED_TIME\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">EnigmaIoTconfig.h</a>\n</li>\n<li>flashConnectionLed()\n: <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">EnigmaIOTGatewayDummy.cpp</a>\n</li>\n<li>flashLed()\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a2f399d10e625fb459fb5e0b8a3a79ef8\">EnigmaIOTNode.cpp</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index_a\"></a>- a -</h3><ul>\n<li>arduinoOTAConfigure()\n: <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a8d52c8107e0bcc9687be62f7e0b388ae\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_b\"></a>- b -</h3><ul>\n<li>buildGetName()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aae12028b7a1857ceb320c435832b09b5\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildGetRSSI()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a20d09b7746e96e3f2706652522c121fa\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildGetSleep()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a90e4277194db83896803d38387ec0369\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildGetVersion()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a7bb1ee00fcd42cf937a7f6173e2a8647\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildOtaMsg()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#acc743eebc6ec1a9480db25fa0f59332a\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildRestartNode()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a000e9c08be2b294e884d9a76d447c7ca\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildSendBrcastKey()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aa713b61843ba50cdd12bba2d34d1065e\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildSetIdentify()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#ada98ad7b4543b42a5d57f458528bf2d6\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildSetName()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aa4eb5b74c01643d49f6b82908e85cc32\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildSetResetConfig()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a322bbbaa773a92c19c2ec8daee290bc5\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>buildSetSleep()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aab70cbb2f23008e90d70b1d744d3e71c\">EnigmaIOTGateway.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_c\"></a>- c -</h3><ul>\n<li>calculateCRC32()\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#a81e44efba216f1a0a981219616eeb8f3\">helperFunctions.h</a>\n</li>\n<li>checkMsgType()\n: <a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#a57969f4236bd72eca4fa83155a025085\">GwOutput_mqtt.cpp</a>\n</li>\n<li>clearRtcData()\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a1b66b36dbb3d32b25e7f4b2cc4e0accb\">EnigmaIOTNode.cpp</a>\n</li>\n<li>connectEventHandler()\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a940f8c4df553df52c9145ef2df107ad3\">enigmaiot_node_nonsleepy.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_d\"></a>- d -</h3><ul>\n<li>disconnectEventHandler()\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1\">EnigmaIOT-Led-Controller.cpp</a>\n</li>\n<li>doRestart()\n: <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4e0b35257234db80b4d6771ec42153a3\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>dumpRtcData()\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c\">EnigmaIOTNode.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_f\"></a>- f -</h3><ul>\n<li>flashConnectionLed()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>flashLed()\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a2f399d10e625fb459fb5e0b8a3a79ef8\">EnigmaIOTNode.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_g\"></a>- g -</h3><ul>\n<li>getNextNumber()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>getTopicAddress()\n: <a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#aee4f7d364dbe6c4b29c462b3306bebe7\">GwOutput_mqtt.cpp</a>\n</li>\n<li>getTopicType()\n: <a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#a0ad2a145294a0b58f6e5b5e3d8ad542f\">GwOutput_mqtt.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_i\"></a>- i -</h3><ul>\n<li>initWiFi()\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#a5efcbae54fb852b8a9b23a25931e3f7a\">helperFunctions.h</a>\n</li>\n<li>isHexChar()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#ad08e6ed992bb54d4ab67627295e7fcf0\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>isNumber()\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b\">helperFunctions.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_l\"></a>- l -</h3><ul>\n<li>loop()\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_m\"></a>- m -</h3><ul>\n<li>mac2str()\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#aa4d5213c3c8ecf522b12f0469ffbe840\">helperFunctions.h</a>\n</li>\n<li>memstr()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aab651c53aaa5c935e3cc662399d0f091\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>methodToString()\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a444bff15005e31fc8680af5c3a822984\">GatewayAPI.cpp</a>\n, <a class=\"el\" href=\"GatewayAPI_8h.html#a444bff15005e31fc8680af5c3a822984\">GatewayAPI.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_n\"></a>- n -</h3><ul>\n<li>newNodeConnected()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aa1ed5eb542d16a6542d77742a8b62677\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>nodeDisconnected()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ade106fbc95d08320451d9b901aafd230\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_o\"></a>- o -</h3><ul>\n<li>onDownlinkData()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_p\"></a>- p -</h3><ul>\n<li>printHexBuffer()\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09\">helperFunctions.h</a>\n</li>\n<li>processRxControlData()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>processRxData()\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a15c150763c9e39ec5e7b94a5fddcb95f\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">enigmaiot_node_nonsleepy.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_s\"></a>- s -</h3><ul>\n<li>sendUplinkData()\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n</li>\n<li>setup()\n: <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n</li>\n<li>showTime()\n: <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#af0c88ea180e73ee60842341790d31b44\">enigmaiot_node_nonsleepy.cpp</a>\n</li>\n<li>startConnectionFlash()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a6ff09343e5169937476aa04932b76915\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a6ff09343e5169937476aa04932b76915\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>startFlash()\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#ae79c9303923c11f39edb388b32d4646b\">EnigmaIOTNode.cpp</a>\n</li>\n<li>stopConnectionFlash()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>stopFlash()\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#ad072ccb795ca00a2cc374f3ce7bd5d55\">EnigmaIOTNode.cpp</a>\n</li>\n<li>str2mac()\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#a0fdf837000194d53f0d019f024e0f4a1\">helperFunctions.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_w\"></a>- w -</h3><ul>\n<li>wifiManagerExit()\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d022fc715d83a4b69c587df0201b63d\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOT-Led-Controller.cpp</a>\n</li>\n<li>wifiManagerStarted()\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-DashButton-Controller.cpp</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_g.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_g\"></a>- g -</h3><ul>\n<li>gatewayMessageType_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613\">EnigmaIOTGateway.h</a>\n</li>\n<li>gatewayPayloadEncoding_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d\">EnigmaIOTGateway.h</a>\n</li>\n<li>GET_NAME\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#af8bca12527bac4b474e2ccb5acd8691e\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_NAME_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a043021359c728f4265337a8c21edfcdb\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_RSSI\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae274ed0194e5685c280ab9148dbcba69\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_RSSI_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a44bf9b184af7520ec127c6b705991c8f\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_SLEEP\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a8fa3ce9af2986feed0592ad3f82b0e8a\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_SLEEP_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a8d48508893d087bd76ac4061b112cce7\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_USER_DATA\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ac6dad41b3de63cebfef84fc4677cded8\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_VERSION\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae9ef65fac5a6e3c6594811a7c8ee2291\">GwOutput_mqtt.h</a>\n</li>\n<li>GET_VERSION_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a1bbd404f93aed82bc0d713238fa2bf6b\">GwOutput_mqtt.h</a>\n</li>\n<li>getGwInfoUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a4a9a0e6476327e4b48e47962e42a5b72\">GatewayAPI.cpp</a>\n</li>\n<li>getGwResettUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a44442f4218442b3ac5d6bfb5aa457eb4\">GatewayAPI.cpp</a>\n</li>\n<li>getGwRestartUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a4a669b0dba2a947822ae13ed5cbdad36\">GatewayAPI.cpp</a>\n</li>\n<li>getMaxNodesUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a9e381857b19a19f4b04b22466373d7df\">GatewayAPI.cpp</a>\n</li>\n<li>getNextNumber()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>getNodeNumberUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a1840a76ce647f7367adbe0738848153c\">GatewayAPI.cpp</a>\n</li>\n<li>getNodeRestartUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a55ba46dd79121e3af6c3e3dc06e76b2b\">GatewayAPI.cpp</a>\n</li>\n<li>getNodesUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#acfd88e792c95d773692f0f5b3160ddbf\">GatewayAPI.cpp</a>\n</li>\n<li>getNodeUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a43838d21da06df9ccc48b56d5bab438d\">GatewayAPI.cpp</a>\n</li>\n<li>getTopicAddress()\n: <a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#aee4f7d364dbe6c4b29c462b3306bebe7\">GwOutput_mqtt.cpp</a>\n</li>\n<li>getTopicType()\n: <a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#a0ad2a145294a0b58f6e5b5e3d8ad542f\">GwOutput_mqtt.cpp</a>\n</li>\n<li>GW_STATUS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a13c1b13340e4cfcf8fa233d3f941853e\">GwOutput_mqtt.h</a>\n</li>\n<li>GwAPI\n: <a class=\"el\" href=\"GatewayAPI_8h.html#a69f499591af56509cd3540f09207f091\">GatewayAPI.h</a>\n, <a class=\"el\" href=\"GatewayAPI_8cpp.html#a69f499591af56509cd3540f09207f091\">GatewayAPI.cpp</a>\n</li>\n<li>gwInvalidateReason_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977\">EnigmaIOTGateway.h</a>\n</li>\n<li>GwOutput\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput_mqtt.h</a>\n, <a class=\"el\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput_dummy.cpp</a>\n, <a class=\"el\" href=\"GwOutput__dummy_8h.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput_dummy.h</a>\n, <a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput_mqtt.cpp</a>\n</li>\n<li>GwOutput_data_type\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636\">GwOutput_generic.h</a>\n</li>\n<li>GwOutput_data_type_t\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_generic.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_h\"></a>- h -</h3><ul>\n<li>ha_allow_attrib\n: <a class=\"el\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">haEntity.h</a>\n</li>\n<li>ha_device_class\n: <a class=\"el\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">haEntity.h</a>\n</li>\n<li>ha_device_type\n: <a class=\"el\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">haEntity.h</a>\n</li>\n<li>HA_DISC_TYPE\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd\">EnigmaIOTNode.h</a>\n</li>\n<li>HA_DISCOVERY_MESSAGE\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa01b2a3fb2e751c9536ae814b4b8919c3\">EnigmaIOTNode.h</a>\n</li>\n<li>HA_DISCOVERY_PREFIX\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>ha_expiration\n: <a class=\"el\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">haEntity.h</a>\n</li>\n<li>HA_FIRST_DISCOVERY_DELAY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a1ca4cd82c4372161db98aee89cff4868\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>HA_FIRST_DISCOVERY_DELAY_SLEEPY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a49e01af100e8659b911c4dc6c8b30ef4\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>ha_name_sufix\n: <a class=\"el\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">haEntity.h</a>\n</li>\n<li>HA_NEXT_DISCOVERY_DELAY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21aa047809e9b061f5712589cf2136f9\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>HA_NEXT_DISCOVERY_DELAY_SLEEPY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a19844f57e8cb836e57d6418a76e6717f\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>ha_off_delay\n: <a class=\"el\" href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">haEntity.h</a>\n</li>\n<li>ha_payload\n: <a class=\"el\" href=\"haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14\">haEntity.h</a>\n</li>\n<li>ha_payload_close\n: <a class=\"el\" href=\"haEntity_8h.html#a244cdb583a7f830630583998a8e840c2\">haEntity.h</a>\n</li>\n<li>ha_payload_goto\n: <a class=\"el\" href=\"haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712\">haEntity.h</a>\n</li>\n<li>ha_payload_off\n: <a class=\"el\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">haEntity.h</a>\n</li>\n<li>ha_payload_on\n: <a class=\"el\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">haEntity.h</a>\n</li>\n<li>ha_payload_open\n: <a class=\"el\" href=\"haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880\">haEntity.h</a>\n</li>\n<li>ha_payload_stop\n: <a class=\"el\" href=\"haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6\">haEntity.h</a>\n</li>\n<li>ha_position_closed\n: <a class=\"el\" href=\"haEntity_8h.html#a05ac358789f765b6277d403be15765ae\">haEntity.h</a>\n</li>\n<li>ha_position_open\n: <a class=\"el\" href=\"haEntity_8h.html#ac4777728d51f1f44cb664a1afdd0fe75\">haEntity.h</a>\n</li>\n<li>ha_set_position_template\n: <a class=\"el\" href=\"haEntity_8h.html#af29b583e27925f5bb557695a24e34874\">haEntity.h</a>\n</li>\n<li>ha_state_closed\n: <a class=\"el\" href=\"haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d\">haEntity.h</a>\n</li>\n<li>ha_state_closing\n: <a class=\"el\" href=\"haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f\">haEntity.h</a>\n</li>\n<li>ha_state_off\n: <a class=\"el\" href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">haEntity.h</a>\n</li>\n<li>ha_state_on\n: <a class=\"el\" href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">haEntity.h</a>\n</li>\n<li>ha_state_open\n: <a class=\"el\" href=\"haEntity_8h.html#afb9503f780f913e1ca94900da8723da7\">haEntity.h</a>\n</li>\n<li>ha_state_opening\n: <a class=\"el\" href=\"haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3\">haEntity.h</a>\n</li>\n<li>ha_state_stopped\n: <a class=\"el\" href=\"haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b\">haEntity.h</a>\n</li>\n<li>ha_subtype\n: <a class=\"el\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">haEntity.h</a>\n</li>\n<li>ha_triggerSubtype_t\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b\">haTrigger.h</a>\n</li>\n<li>ha_triggerSubtypeStr\n: <a class=\"el\" href=\"haTrigger_8h.html#a291e753178ee4e52fb182fc2af9cd566\">haTrigger.h</a>\n</li>\n<li>ha_triggerType_t\n: <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c\">haTrigger.h</a>\n</li>\n<li>ha_triggerTypeStr\n: <a class=\"el\" href=\"haTrigger_8h.html#a98aa5d190f3afda4339a9f35a8f59eef\">haTrigger.h</a>\n</li>\n<li>ha_type\n: <a class=\"el\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">haEntity.h</a>\n</li>\n<li>ha_unit_of_measurement\n: <a class=\"el\" href=\"haEntity_8h.html#af69343b9e51fbd195d5964407594f653\">haEntity.h</a>\n</li>\n<li>ha_value_key\n: <a class=\"el\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">haEntity.h</a>\n</li>\n<li>ha_value_template\n: <a class=\"el\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">haEntity.h</a>\n</li>\n<li>haBinarySensorClass_t\n: <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haEntity.h</a>\n</li>\n<li>haCoverClass_t\n: <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haEntity.h</a>\n</li>\n<li>haDeviceType_t\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haEntity.h</a>\n</li>\n<li>haSensorClass_t\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haEntity.h</a>\n</li>\n<li>HVAC\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2\">haEntity.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_i.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_i\"></a>- i -</h3><ul>\n<li>IDENTIFY\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6\">NodeList.h</a>\n</li>\n<li>IDENTIFY_TIMEOUT\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5\">EnigmaIoTconfig.h</a>\n</li>\n<li>IKMSG_LEN\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">EnigmaIOTNode.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a568f6925a7027004598c4ad288dd11f0\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>INFO\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#ae1103fea1e1b3c41ca3322d5389f7162\">EnigmaIOTdebug.h</a>\n</li>\n<li>INIT\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36\">NodeList.h</a>\n</li>\n<li>initWiFi()\n: <a class=\"el\" href=\"helperFunctions_8h.html#a5efcbae54fb852b8a9b23a25931e3f7a\">helperFunctions.h</a>\n, <a class=\"el\" href=\"helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3\">helperFunctions.cpp</a>\n</li>\n<li>INVALID\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2\">NodeList.h</a>\n</li>\n<li>INVALIDATE_KEY\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa32637f9c9b67f884990ed21097ebc543\">EnigmaIOTNode.h</a>\n</li>\n<li>IRRELEVANT\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087\">NodeList.h</a>\n</li>\n<li>isHexChar()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#ad08e6ed992bb54d4ab67627295e7fcf0\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>isNumber()\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#a26eaeecca0f44f0e5cf47b1f044a1306\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#a8d64848792adcc6a1094ea0eef6bed51\">helperFunctions.h</a>\n, <a class=\"el\" href=\"helperFunctions_8cpp.html#a8d64848792adcc6a1094ea0eef6bed51\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b\">helperFunctions.h</a>\n</li>\n<li>IV_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_k.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_k\"></a>- k -</h3><ul>\n<li>KEY_EXPIRED\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a09a1d3d5daa36af5469fa79c12a027fe\">EnigmaIOTNode.h</a>\n</li>\n<li>KEY_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>KICKED\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6\">EnigmaIOTGateway.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_l.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_l\"></a>- l -</h3><ul>\n<li>lastOTAmsg\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>LED\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n</li>\n<li>LED_BUILTIN\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00\">enigmaiot_node.cpp</a>\n</li>\n<li>LED_OFF\n: <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a80700bb63bd56ebabbb4728aa433fd29\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a80700bb63bd56ebabbb4728aa433fd29\">EnigmaIOTNode.h</a>\n</li>\n<li>LED_ON\n: <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25\">EnigmaIOTNode.h</a>\n</li>\n<li>LED_PIN\n: <a class=\"el\" href=\"LedController_8h.html#ab4553be4db9860d940f81d7447173b2f\">LedController.h</a>\n</li>\n<li>ledKey\n: <a class=\"el\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">LedController.cpp</a>\n</li>\n<li>LIGHT\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb\">haEntity.h</a>\n</li>\n<li>linkKey\n: <a class=\"el\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">SmartSwitchController.cpp</a>\n</li>\n<li>localLed\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">EnigmaIOTNode.cpp</a>\n</li>\n<li>LOCK\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48\">haEntity.h</a>\n</li>\n<li>loop()\n: <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">EnigmaIOT-Json-Controller-Template.cpp</a>\n</li>\n<li>LOST_MESSAGES\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a2aa30d8c4ad4f2895fefd1b1d425ee66\">GwOutput_mqtt.h</a>\n</li>\n<li>lostmessages\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff\">GwOutput_generic.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_m.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_m\"></a>- m -</h3><ul>\n<li>mac2str()\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#aa4d5213c3c8ecf522b12f0469ffbe840\">helperFunctions.h</a>\n</li>\n<li>MACSTR\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">helperFunctions.cpp</a>\n</li>\n<li>MAX_CONSECUTIVE_BOOT\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-Led-Controller.cpp</a>\n</li>\n<li>MAX_DATA_PAYLOAD_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>MAX_DATA_PAYLOAD_SIZE\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>MAX_INPUT_QUEUE_SIZE\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a2909f9f6e8ecc4dfd6947911e4eb2d96\">EnigmaIoTconfig.h</a>\n</li>\n<li>MAX_KEY_VALIDITY\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">EnigmaIoTconfig.h</a>\n</li>\n<li>MAX_MESSAGE_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>MAX_MQTT_PLD_LEN\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">GwOutput_mqtt.h</a>\n</li>\n<li>MAX_MQTT_QUEUE_SIZE\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">EnigmaIoTconfig.h</a>\n</li>\n<li>MAX_MQTT_TOPIC_LEN\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">GwOutput_mqtt.h</a>\n</li>\n<li>MAX_NODE_INACTIVITY\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011\">EnigmaIoTconfig.h</a>\n</li>\n<li>MAX_ORDER\n: <a class=\"el\" href=\"Filter_8h.html#ab08dffec08ac450d78d4c062b571939e\">Filter.h</a>\n</li>\n<li>MAX_STR_LEN\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6\">helperFunctions.cpp</a>\n</li>\n<li>MEDIAN_FILTER\n: <a class=\"el\" href=\"Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91\">Filter.h</a>\n</li>\n<li>memstr()\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#aab651c53aaa5c935e3cc662399d0f091\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>methodToString()\n: <a class=\"el\" href=\"GatewayAPI_8h.html#a444bff15005e31fc8680af5c3a822984\">GatewayAPI.h</a>\n, <a class=\"el\" href=\"GatewayAPI_8cpp.html#a444bff15005e31fc8680af5c3a822984\">GatewayAPI.cpp</a>\n</li>\n<li>MIN_ORDER\n: <a class=\"el\" href=\"Filter_8h.html#a23bae2b7cd4008c90256be146e21cccf\">Filter.h</a>\n</li>\n<li>MIN_SYNC_ACCURACY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>MQTT_BUFFER_SIZE\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a4f9d3fafe897148f4e44e0db74816a9c\">GwOutput_mqtt.h</a>\n</li>\n<li>MSG_PACK\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba578494bedfca043a7f16b17ae27c75bc\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc\">EnigmaIOTGateway.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_n.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_n\"></a>- n -</h3><ul>\n<li>NAME_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb\">NodeList.h</a>\n</li>\n<li>NAME_GET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee\">NodeList.h</a>\n</li>\n<li>NAME_OK\n: <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0\">NodeList.h</a>\n</li>\n<li>NAME_SET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17\">NodeList.h</a>\n</li>\n<li>NETWORK_NAME_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>newNodeConnected()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aa1ed5eb542d16a6542d77742a8b62677\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>NO_DEBUG\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a424f1b989129c5519f4df8f61ad6dcaf\">EnigmaIOTdebug.h</a>\n</li>\n<li>NODE_DATA\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#af1dcc05117b1f2ccb5922611c540e241\">GwOutput_mqtt.h</a>\n</li>\n<li>NODE_NAME_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>NODE_NAME_RESULT\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae69668f8ce604a1b3d09c3314cdba5bf\">EnigmaIOTNode.h</a>\n</li>\n<li>NODE_NAME_SET\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa766d5c890baa0b6a0e7e1e3f5cb0b224\">EnigmaIOTNode.h</a>\n</li>\n<li>NODE_STATUS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a82ea7d9552d7d2c2d977c578587e94dc\">GwOutput_mqtt.h</a>\n</li>\n<li>node_status\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a\">NodeList.h</a>\n</li>\n<li>node_t\n: <a class=\"el\" href=\"NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6\">NodeList.h</a>\n</li>\n<li>nodeAddrParam\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#ad9a0cbae2e14a9562307948b2ac1434a\">GatewayAPI.cpp</a>\n</li>\n<li>nodeConnectionLedFlashing\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">EnigmaIOTNode.cpp</a>\n</li>\n<li>nodeDisconnected()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ade106fbc95d08320451d9b901aafd230\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>nodeIdParam\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#affc0d6e756f8b8eb7c21751494b5e8b2\">GatewayAPI.cpp</a>\n</li>\n<li>nodeInvalidateReason_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6\">EnigmaIOTNode.h</a>\n</li>\n<li>nodeMessageType\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f\">EnigmaIOTNode.h</a>\n</li>\n<li>nodeMessageType_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#acbdfeab1a5e492bc200768fa91041445\">EnigmaIOTNode.h</a>\n</li>\n<li>nodeNameParam\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">GatewayAPI.cpp</a>\n</li>\n<li>nodeNameStatus_t\n: <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9a\">NodeList.h</a>\n</li>\n<li>nodePayloadEncoding_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb\">EnigmaIOTNode.h</a>\n</li>\n<li>NTP_SERVER_1\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#ad2cbd556e432924a29a3efa1d13668af\">EnigmaIoTconfig.h</a>\n</li>\n<li>NTP_SERVER_2\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a562447c925663fec9c7e923f6c46fa7d\">EnigmaIoTconfig.h</a>\n</li>\n<li>NUM_NODES\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">EnigmaIoTconfig.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_o.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_o\"></a>- o -</h3><ul>\n<li>OFF\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a29e413f6725b2ba32d165ffaa35b01e5\">SmartSwitchController.h</a>\n</li>\n<li>ON\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2\">SmartSwitchController.h</a>\n</li>\n<li>onConnected_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">EnigmaIOTNode.h</a>\n</li>\n<li>onDisconnected_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">EnigmaIOTNode.h</a>\n</li>\n<li>onDlData_t\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">GwOutput_generic.h</a>\n</li>\n<li>onDownlinkData()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>ONE_WIRE_BUS\n: <a class=\"el\" href=\"ds18b20Controller_8cpp.html#a4260ed8874da804fb9ef9abba200b487\">ds18b20Controller.cpp</a>\n</li>\n<li>onGwDataRx_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">EnigmaIOTGateway.h</a>\n</li>\n<li>onNewNode_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">EnigmaIOTGateway.h</a>\n</li>\n<li>onNodeDataRx_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">EnigmaIOTNode.h</a>\n</li>\n<li>onNodeDisconnected_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">EnigmaIOTGateway.h</a>\n</li>\n<li>onWiFiManagerExit_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">EnigmaIOTNode.h</a>\n</li>\n<li>onWiFiManagerStarted_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#aeafba3e3725226cdcb14a23c4e57c97a\">EnigmaIOTNode.h</a>\n</li>\n<li>OTA\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71\">NodeList.h</a>\n</li>\n<li>OTA_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e\">NodeList.h</a>\n</li>\n<li>OTA_CHECK_FAIL\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513\">NodeList.h</a>\n</li>\n<li>OTA_CHECK_OK\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc\">NodeList.h</a>\n</li>\n<li>OTA_ERROR_RESTART\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434\">NodeList.h</a>\n</li>\n<li>OTA_FINISHED\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a\">NodeList.h</a>\n</li>\n<li>OTA_GW_TIMEOUT\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>OTA_OUT_OF_SEQUENCE\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236\">NodeList.h</a>\n</li>\n<li>OTA_START_ERROR\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450\">NodeList.h</a>\n</li>\n<li>OTA_STARTED\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf\">NodeList.h</a>\n</li>\n<li>ota_status\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4\">NodeList.h</a>\n</li>\n<li>ota_status_t\n: <a class=\"el\" href=\"NodeList_8h.html#afca510572b2bed862d3aae57a6eff6f7\">NodeList.h</a>\n</li>\n<li>OTA_TIMEOUT\n: <a class=\"el\" href=\"NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad\">NodeList.h</a>\n</li>\n<li>OTA_TIMEOUT_TIME\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>OTAongoing\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f\">EnigmaIOTGateway.cpp</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_p.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_p\"></a>- p -</h3><ul>\n<li>peerType_t\n: <a class=\"el\" href=\"Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4\">Comms_hal.h</a>\n</li>\n<li>POST_REG_DELAY\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed\">EnigmaIoTconfig.h</a>\n</li>\n<li>PRE_REG_DELAY\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a\">EnigmaIoTconfig.h</a>\n</li>\n<li>printHexBuffer()\n: <a class=\"el\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">helperFunctions.cpp</a>\n, <a class=\"el\" href=\"helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09\">helperFunctions.h</a>\n</li>\n<li>processRxControlData()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#acecaff385e13802f95e84d1ece4f6322\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>processRxData()\n: <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a15c150763c9e39ec5e7b94a5fddcb95f\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc\">EnigmaIOT-Sensor-Controller.cpp</a>\n</li>\n<li>PROT_BUF\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da4d6491239946f63d9cc27a2984c4fe59\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba4d6491239946f63d9cc27a2984c4fe59\">EnigmaIOTNode.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_q.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_q\"></a>- q -</h3><ul>\n<li>QUICK_SYNC_TIME\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">EnigmaIoTconfig.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_r.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_r\"></a>- r -</h3><ul>\n<li>RANDOM_LENGTH\n: <a class=\"el\" href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">cryptModule.h</a>\n</li>\n<li>RATE_AVE_ORDER\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#af320072fb51a344213679450cacb3d6a\">EnigmaIoTconfig.h</a>\n</li>\n<li>RAW\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7\">EnigmaIOTGateway.h</a>\n</li>\n<li>RECONNECTION_PERIOD\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">EnigmaIoTconfig.h</a>\n</li>\n<li>RED_LED\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>REGISTERED\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568\">NodeList.h</a>\n</li>\n<li>RELAY_OFF\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f\">SmartSwitchController.h</a>\n</li>\n<li>RELAY_ON\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2\">SmartSwitchController.h</a>\n</li>\n<li>relayKey\n: <a class=\"el\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">SmartSwitchController.cpp</a>\n</li>\n<li>RESET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05\">NodeList.h</a>\n</li>\n<li>RESET_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445\">NodeList.h</a>\n</li>\n<li>RESET_PIN\n: <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c\">EnigmaIOT-DashButton-Controller.cpp</a>\n</li>\n<li>RESET_PIN_DURATION\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b\">EnigmaIoTconfig.h</a>\n</li>\n<li>RESPONSE_SIZE\n: <a class=\"el\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">GatewayAPI.h</a>\n</li>\n<li>RESTART_AFTER_OTA\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6\">NodeList.h</a>\n</li>\n<li>RESTART_CONFIRM\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23\">NodeList.h</a>\n</li>\n<li>RESTART_NODE\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4\">NodeList.h</a>\n</li>\n<li>RESTART_NOTIF\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae2f0ef8f36c0b685940124089172e6c3\">GwOutput_mqtt.h</a>\n</li>\n<li>RESTART_REQUESTED\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06\">NodeList.h</a>\n</li>\n<li>restartReason_t\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601\">NodeList.h</a>\n</li>\n<li>restartRequested\n: <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a827c388d92651f51d34097598a52a92a\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>restartRequestTime\n: <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a37e5a736d8dfa2198aa9607a61ff1695\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>RSSI_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1\">NodeList.h</a>\n</li>\n<li>RSSI_GET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824\">NodeList.h</a>\n</li>\n<li>RTC_ADDRESS\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_s\"></a>- s -</h3><ul>\n<li>SAVE_RELAY_STATUS\n: <a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf\">SmartSwitchController.h</a>\n</li>\n<li>SCENE\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4\">haEntity.h</a>\n</li>\n<li>sendUplinkData()\n: <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4\">EnigmaIOT-Sensor-Controller.cpp</a>\n</li>\n<li>SENSOR\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">haEntity.h</a>\n</li>\n<li>sensor_battery\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\">haEntity.h</a>\n</li>\n<li>SENSOR_BRCAST_DATA\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613affd78f537f0c30f76f209e5afd106843\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faffd78f537f0c30f76f209e5afd106843\">EnigmaIOTNode.h</a>\n</li>\n<li>sensor_current\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\">haEntity.h</a>\n</li>\n<li>SENSOR_DATA\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faa8ba55203a30122cc271cc66b2909b21\">EnigmaIOTNode.h</a>\n</li>\n<li>sensor_energy\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\">haEntity.h</a>\n</li>\n<li>sensor_humidity\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\">haEntity.h</a>\n</li>\n<li>sensor_illuminance\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\">haEntity.h</a>\n</li>\n<li>sensor_none\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\">haEntity.h</a>\n</li>\n<li>sensor_power\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\">haEntity.h</a>\n</li>\n<li>sensor_power_factor\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\">haEntity.h</a>\n</li>\n<li>sensor_pressure\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\">haEntity.h</a>\n</li>\n<li>sensor_signal_strength\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\">haEntity.h</a>\n</li>\n<li>sensor_temperature\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\">haEntity.h</a>\n</li>\n<li>sensor_timestamp\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\">haEntity.h</a>\n</li>\n<li>sensor_voltage\n: <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\">haEntity.h</a>\n</li>\n<li>SERVER_HELLO\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa28914d3bb26ec8c2bd2d5ad9781cbf8c\">EnigmaIOTNode.h</a>\n</li>\n<li>SET_IDENTIFY\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a523454d3069bcc08356f43906870a8eb\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_NAME\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a947ddc46cf5393a05a60422574c68dd0\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_OTA\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a03d78690a77ad7c71da69356e13f4111\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_OTA_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a82391b9a9738bbf392fbad554f7ef527\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_RESET_ANS\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a7e8363a72c676c15de7221529988ee48\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_RESET_CONFIG\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a9ed6c45eceed73f4dc32d6147957fed5\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_RESTART_MCU\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a2e46d7b49d143e76a290f06fc6892aa3\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_SLEEP\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a0ffae85da5eb98e796fd818c50ac147a\">GwOutput_mqtt.h</a>\n</li>\n<li>SET_USER_DATA\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ad7c2efab8087395f360a163faecc66eb\">GwOutput_mqtt.h</a>\n</li>\n<li>setup()\n: <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">enigmaiot_node_msgpack.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>SHMSG_LEN\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">EnigmaIOTNode.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>shouldSave\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>showTime()\n: <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#af0c88ea180e73ee60842341790d31b44\">enigmaiot_node_nonsleepy.cpp</a>\n</li>\n<li>simpleEventHandler_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">EnigmaIOTGateway.h</a>\n</li>\n<li>SLEEP\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa\">NodeList.h</a>\n</li>\n<li>SLEEP_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6\">NodeList.h</a>\n</li>\n<li>SLEEP_GET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa\">NodeList.h</a>\n</li>\n<li>SLEEP_SET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55\">NodeList.h</a>\n</li>\n<li>SLEEP_TIME\n: <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">EnigmaIOT-Sensor-Controller.cpp</a>\n</li>\n<li>SLEEPY\n: <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d\">EnigmaIOT-Button-Controller.cpp</a>\n</li>\n<li>SMILE\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da298f796cee1bd5d6decfe81d4a98b554\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba298f796cee1bd5d6decfe81d4a98b554\">EnigmaIOTNode.h</a>\n</li>\n<li>startConnectionFlash()\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a6ff09343e5169937476aa04932b76915\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a6ff09343e5169937476aa04932b76915\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>startFlash()\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#ae79c9303923c11f39edb388b32d4646b\">EnigmaIOTNode.cpp</a>\n</li>\n<li>status\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30\">GwOutput_generic.h</a>\n</li>\n<li>STATUS_SEND_PERIOD\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a0c2feee288af6e6c9d13de8804a94128\">GwOutput_mqtt.h</a>\n</li>\n<li>status_t\n: <a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">NodeList.h</a>\n</li>\n<li>stopConnectionFlash()\n: <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd\">EnigmaIOTGatewayDummy.cpp</a>\n</li>\n<li>stopFlash()\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#ad072ccb795ca00a2cc374f3ce7bd5d55\">EnigmaIOTNode.cpp</a>\n</li>\n<li>str2mac()\n: <a class=\"el\" href=\"helperFunctions_8h.html#a0fdf837000194d53f0d019f024e0f4a1\">helperFunctions.h</a>\n, <a class=\"el\" href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">helperFunctions.cpp</a>\n</li>\n<li>SUPPORT_HA_DISCOVERY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a16e6dc75c832482efe3cc26d5f187201\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>SWITCH\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">haEntity.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_t\"></a>- t -</h3><ul>\n<li>TAG_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>TAG_SCANNER\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607\">haEntity.h</a>\n</li>\n<li>TEST\n: <a class=\"el\" href=\"ds18b20Controller_8cpp.html#ab946e2e7f7679350627acfded8e2658b\">ds18b20Controller.cpp</a>\n</li>\n<li>TIME_SYNC_PERIOD\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c\">EnigmaIoTconfig.h</a>\n</li>\n<li>TimeManager\n: <a class=\"el\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">timeManager.cpp</a>\n, <a class=\"el\" href=\"timeManager_8h.html#aa2f15646607c9908039f67741ccbab58\">timeManager.h</a>\n</li>\n<li>TOO_LONG\n: <a class=\"el\" href=\"NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f\">NodeList.h</a>\n</li>\n<li>turn_off\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba83ee6b65c9abe8a11ed4d9692b0a5ae7\">haTrigger.h</a>\n</li>\n<li>turn_on\n: <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">haTrigger.h</a>\n</li>\n<li>TZINFO\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a\">EnigmaIoTconfig.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_type.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;<ul>\n<li>comms_hal_rcvd_data\n: <a class=\"el\" href=\"Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0\">Comms_hal.h</a>\n</li>\n<li>comms_hal_sent_data\n: <a class=\"el\" href=\"Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b\">Comms_hal.h</a>\n</li>\n<li>control_message_type_t\n: <a class=\"el\" href=\"NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7\">NodeList.h</a>\n</li>\n<li>GwOutput_data_type_t\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc\">GwOutput_generic.h</a>\n</li>\n<li>node_t\n: <a class=\"el\" href=\"NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6\">NodeList.h</a>\n</li>\n<li>nodeMessageType_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#acbdfeab1a5e492bc200768fa91041445\">EnigmaIOTNode.h</a>\n</li>\n<li>onConnected_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386\">EnigmaIOTNode.h</a>\n</li>\n<li>onDisconnected_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9\">EnigmaIOTNode.h</a>\n</li>\n<li>onDlData_t\n: <a class=\"el\" href=\"GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b\">GwOutput_generic.h</a>\n</li>\n<li>onGwDataRx_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b\">EnigmaIOTGateway.h</a>\n</li>\n<li>onNewNode_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7\">EnigmaIOTGateway.h</a>\n</li>\n<li>onNodeDataRx_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8\">EnigmaIOTNode.h</a>\n</li>\n<li>onNodeDisconnected_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666\">EnigmaIOTGateway.h</a>\n</li>\n<li>onWiFiManagerExit_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891\">EnigmaIOTGateway.h</a>\n</li>\n<li>onWiFiManagerStarted_t\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#aeafba3e3725226cdcb14a23c4e57c97a\">EnigmaIOTNode.h</a>\n</li>\n<li>ota_status_t\n: <a class=\"el\" href=\"NodeList_8h.html#afca510572b2bed862d3aae57a6eff6f7\">NodeList.h</a>\n</li>\n<li>simpleEventHandler_t\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c\">EnigmaIOTGateway.h</a>\n</li>\n<li>status_t\n: <a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">NodeList.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_u.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_u\"></a>- u -</h3><ul>\n<li>UNDEFINED\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">haEntity.h</a>\n</li>\n<li>UNENCRYPTED_NODE_DATA\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa84d08335ed131183ff525c55c14f3148\">EnigmaIOTNode.h</a>\n</li>\n<li>UNKNOWN_ERROR\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83\">EnigmaIOTNode.h</a>\n</li>\n<li>UNKNOWN_REASON\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ab309433c1c035ba010b3aff8756d1637\">NodeList.h</a>\n</li>\n<li>UNREGISTERED\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">NodeList.h</a>\n</li>\n<li>UNREGISTERED_NODE\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a975e594ca3839a0687f31cfbbdb6c90f\">EnigmaIOTNode.h</a>\n</li>\n<li>USE_FLASH_INSTEAD_RTC\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3adc46611e76e71d60021e6c87d11dcc\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>USE_SERIAL\n: <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b\">EnigmaIOT-Led-Controller.cpp</a>\n</li>\n<li>USER_RESET\n: <a class=\"el\" href=\"NodeList_8h.html#a410abac5350706d6651d4e9242730601ad1616fcb099e2febf3ffc5d115a99441\">NodeList.h</a>\n</li>\n<li>USERDATA_GET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27\">NodeList.h</a>\n</li>\n<li>USERDATA_SET\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be\">NodeList.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_v.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_v\"></a>- v -</h3><ul>\n<li>VACUUM\n: <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f\">haEntity.h</a>\n</li>\n<li>VERBOSE\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a42f8c497a1968074f38bf5055c650dca\">EnigmaIOTdebug.h</a>\n</li>\n<li>VERSION\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a\">NodeList.h</a>\n</li>\n<li>VERSION_ANS\n: <a class=\"el\" href=\"NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe\">NodeList.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_vars.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;\n\n<h3><a id=\"index__5F\"></a>- _ -</h3><ul>\n<li>_peerType\n: <a class=\"el\" href=\"espnow__hal_8cpp.html#a62ba3af3e98793dfe8f0e3039e325340\">espnow_hal.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_a\"></a>- a -</h3><ul>\n<li>AAD_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_b\"></a>- b -</h3><ul>\n<li>BOOT_FLAG_TIMEOUT\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n</li>\n<li>bootStateKey\n: <a class=\"el\" href=\"SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb\">SmartSwitchController.cpp</a>\n</li>\n<li>BROADCAST_ADDRESS\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>BROADCAST_NONE_NAME\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>buttonKey\n: <a class=\"el\" href=\"SmartSwitchController_8cpp.html#ac6ac941d05242bf7013c414c28fe51f9\">SmartSwitchController.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_c\"></a>- c -</h3><ul>\n<li>CHECK_COMM_ERRORS\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>cipher\n: <a class=\"el\" href=\"cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758\">cryptModule.cpp</a>\n</li>\n<li>COMM_ERRORS_BEFORE_SCAN\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5\">EnigmaIoTconfig.h</a>\n</li>\n<li>commandKey\n: <a class=\"el\" href=\"LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">LedController.cpp</a>\n, <a class=\"el\" href=\"SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9\">SmartSwitchController.cpp</a>\n</li>\n<li>COMMS_QUEUE_SIZE\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>CONFIG_FILE\n: <a class=\"el\" href=\"ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">ButtonController.cpp</a>\n, <a class=\"el\" href=\"DashButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">DashButtonController.cpp</a>\n, <a class=\"el\" href=\"BasicController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">BasicController.cpp</a>\n, <a class=\"el\" href=\"LedController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">LedController.cpp</a>\n, <a class=\"el\" href=\"ds18b20Controller_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">ds18b20Controller.cpp</a>\n, <a class=\"el\" href=\"SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47\">SmartSwitchController.cpp</a>\n, <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a0a5b20c0a44622656e3028948ca20a47\">GwOutput_mqtt.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08\">EnigmaIOTGateway.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08\">EnigmaIOTNode.cpp</a>\n</li>\n<li>confirmParam\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a3fab167b11bfa83a179e904d89a38d95\">GatewayAPI.cpp</a>\n</li>\n<li>connectionLed\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>connectionLedFlashing\n: <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>controller\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd\">EnigmaIOT-Json-Controller-Template.cpp</a>\n</li>\n<li>CONTROLLER_NAME\n: <a class=\"el\" href=\"ButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">ButtonController.h</a>\n, <a class=\"el\" href=\"SmartSwitchController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">SmartSwitchController.h</a>\n, <a class=\"el\" href=\"DashButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">DashButtonController.h</a>\n, <a class=\"el\" href=\"BasicController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">BasicController.h</a>\n, <a class=\"el\" href=\"LedController_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">LedController.h</a>\n, <a class=\"el\" href=\"ds18b20Controller_8h.html#a0cf4eba0801e84be66f6198f07bfe287\">ds18b20Controller.h</a>\n</li>\n<li>CRC_LENGTH\n: <a class=\"el\" href=\"cryptModule_8h.html#ab705865bb866bc5f070bbde9650eaa2a\">cryptModule.h</a>\n</li>\n<li>Crypto\n: <a class=\"el\" href=\"cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">cryptModule.cpp</a>\n, <a class=\"el\" href=\"cryptModule_8h.html#a2f63b7a310b37c1127e7b8cfcbb5eb22\">cryptModule.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_d\"></a>- d -</h3><ul>\n<li>DEFAULT_CHANNEL\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">EnigmaIoTconfig.h</a>\n</li>\n<li>DEFAULT_SLEEP_TIME\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f\">EnigmaIoTconfig.h</a>\n</li>\n<li>DISCONNECT_ON_DATA_ERROR\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>DOWNLINK_WAIT_TIME\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e\">EnigmaIoTconfig.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_e\"></a>- e -</h3><ul>\n<li>ENIGMAIOT_ADDR_LEN\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>ENIGMAIOT_PROT_VERS\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821\">EnigmaIoTconfig.h</a>\n</li>\n<li>EnigmaIOTGateway\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>EnigmaIOTNode\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#aad0a67af9b0ad60557652e3170f8a2af\">EnigmaIOTNode.h</a>\n</li>\n<li>Espnow_hal\n: <a class=\"el\" href=\"espnow__hal_8h.html#a3eef8679955ce5f4743338cbc6bf1e0e\">espnow_hal.h</a>\n, <a class=\"el\" href=\"espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e\">espnow_hal.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_f\"></a>- f -</h3><ul>\n<li>FAILSAFE_RTC_ADDRESS\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d64e953651e420d91f95bacd3078b4e\">EnigmaIOT-Json-Controller-Template.cpp</a>\n</li>\n<li>FLASH_LED_TIME\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349\">EnigmaIoTconfig.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_g\"></a>- g -</h3><ul>\n<li>getGwInfoUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a4a9a0e6476327e4b48e47962e42a5b72\">GatewayAPI.cpp</a>\n</li>\n<li>getGwResettUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a44442f4218442b3ac5d6bfb5aa457eb4\">GatewayAPI.cpp</a>\n</li>\n<li>getGwRestartUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a4a669b0dba2a947822ae13ed5cbdad36\">GatewayAPI.cpp</a>\n</li>\n<li>getMaxNodesUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a9e381857b19a19f4b04b22466373d7df\">GatewayAPI.cpp</a>\n</li>\n<li>getNodeNumberUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a1840a76ce647f7367adbe0738848153c\">GatewayAPI.cpp</a>\n</li>\n<li>getNodeRestartUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a55ba46dd79121e3af6c3e3dc06e76b2b\">GatewayAPI.cpp</a>\n</li>\n<li>getNodesUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#acfd88e792c95d773692f0f5b3160ddbf\">GatewayAPI.cpp</a>\n</li>\n<li>getNodeUri\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a43838d21da06df9ccc48b56d5bab438d\">GatewayAPI.cpp</a>\n</li>\n<li>GwAPI\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a69f499591af56509cd3540f09207f091\">GatewayAPI.cpp</a>\n, <a class=\"el\" href=\"GatewayAPI_8h.html#a69f499591af56509cd3540f09207f091\">GatewayAPI.h</a>\n</li>\n<li>GwOutput\n: <a class=\"el\" href=\"GwOutput__dummy_8h.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput_dummy.h</a>\n, <a class=\"el\" href=\"GwOutput__mqtt_8h.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput_mqtt.h</a>\n, <a class=\"el\" href=\"GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95\">GwOutput_dummy.cpp</a>\n, <a class=\"el\" href=\"GwOutput__mqtt_8cpp.html#afb58b5e941b1e87b27c59c51b730f631\">GwOutput_mqtt.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_h\"></a>- h -</h3><ul>\n<li>ha_allow_attrib\n: <a class=\"el\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">haEntity.h</a>\n</li>\n<li>ha_device_class\n: <a class=\"el\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">haEntity.h</a>\n</li>\n<li>ha_device_type\n: <a class=\"el\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">haEntity.h</a>\n</li>\n<li>HA_DISCOVERY_PREFIX\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>ha_expiration\n: <a class=\"el\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">haEntity.h</a>\n</li>\n<li>ha_name_sufix\n: <a class=\"el\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">haEntity.h</a>\n</li>\n<li>ha_off_delay\n: <a class=\"el\" href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">haEntity.h</a>\n</li>\n<li>ha_payload\n: <a class=\"el\" href=\"haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14\">haEntity.h</a>\n</li>\n<li>ha_payload_close\n: <a class=\"el\" href=\"haEntity_8h.html#a244cdb583a7f830630583998a8e840c2\">haEntity.h</a>\n</li>\n<li>ha_payload_goto\n: <a class=\"el\" href=\"haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712\">haEntity.h</a>\n</li>\n<li>ha_payload_off\n: <a class=\"el\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">haEntity.h</a>\n</li>\n<li>ha_payload_on\n: <a class=\"el\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">haEntity.h</a>\n</li>\n<li>ha_payload_open\n: <a class=\"el\" href=\"haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880\">haEntity.h</a>\n</li>\n<li>ha_payload_stop\n: <a class=\"el\" href=\"haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6\">haEntity.h</a>\n</li>\n<li>ha_position_closed\n: <a class=\"el\" href=\"haEntity_8h.html#a05ac358789f765b6277d403be15765ae\">haEntity.h</a>\n</li>\n<li>ha_position_open\n: <a class=\"el\" href=\"haEntity_8h.html#ac4777728d51f1f44cb664a1afdd0fe75\">haEntity.h</a>\n</li>\n<li>ha_set_position_template\n: <a class=\"el\" href=\"haEntity_8h.html#af29b583e27925f5bb557695a24e34874\">haEntity.h</a>\n</li>\n<li>ha_state_closed\n: <a class=\"el\" href=\"haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d\">haEntity.h</a>\n</li>\n<li>ha_state_closing\n: <a class=\"el\" href=\"haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f\">haEntity.h</a>\n</li>\n<li>ha_state_off\n: <a class=\"el\" href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">haEntity.h</a>\n</li>\n<li>ha_state_on\n: <a class=\"el\" href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">haEntity.h</a>\n</li>\n<li>ha_state_open\n: <a class=\"el\" href=\"haEntity_8h.html#afb9503f780f913e1ca94900da8723da7\">haEntity.h</a>\n</li>\n<li>ha_state_opening\n: <a class=\"el\" href=\"haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3\">haEntity.h</a>\n</li>\n<li>ha_state_stopped\n: <a class=\"el\" href=\"haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b\">haEntity.h</a>\n</li>\n<li>ha_subtype\n: <a class=\"el\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">haEntity.h</a>\n</li>\n<li>ha_triggerSubtypeStr\n: <a class=\"el\" href=\"haTrigger_8h.html#a291e753178ee4e52fb182fc2af9cd566\">haTrigger.h</a>\n</li>\n<li>ha_triggerTypeStr\n: <a class=\"el\" href=\"haTrigger_8h.html#a98aa5d190f3afda4339a9f35a8f59eef\">haTrigger.h</a>\n</li>\n<li>ha_type\n: <a class=\"el\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">haEntity.h</a>\n</li>\n<li>ha_unit_of_measurement\n: <a class=\"el\" href=\"haEntity_8h.html#af69343b9e51fbd195d5964407594f653\">haEntity.h</a>\n</li>\n<li>ha_value_key\n: <a class=\"el\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">haEntity.h</a>\n</li>\n<li>ha_value_template\n: <a class=\"el\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">haEntity.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_i\"></a>- i -</h3><ul>\n<li>IDENTIFY_TIMEOUT\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5\">EnigmaIoTconfig.h</a>\n</li>\n<li>IV_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_k\"></a>- k -</h3><ul>\n<li>KEY_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_l\"></a>- l -</h3><ul>\n<li>lastOTAmsg\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>LED\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d\">EnigmaIOT-DashButton-Controller.cpp</a>\n</li>\n<li>ledKey\n: <a class=\"el\" href=\"LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da\">LedController.cpp</a>\n</li>\n<li>linkKey\n: <a class=\"el\" href=\"SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21\">SmartSwitchController.cpp</a>\n</li>\n<li>localLed\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524\">EnigmaIOTNode.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_m\"></a>- m -</h3><ul>\n<li>MAX_CONSECUTIVE_BOOT\n: <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n</li>\n<li>MAX_DATA_PAYLOAD_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>MAX_DATA_PAYLOAD_SIZE\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>MAX_INPUT_QUEUE_SIZE\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a2909f9f6e8ecc4dfd6947911e4eb2d96\">EnigmaIoTconfig.h</a>\n</li>\n<li>MAX_KEY_VALIDITY\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79\">EnigmaIoTconfig.h</a>\n</li>\n<li>MAX_MESSAGE_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>MAX_MQTT_PLD_LEN\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">GwOutput_mqtt.h</a>\n</li>\n<li>MAX_MQTT_QUEUE_SIZE\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d\">EnigmaIoTconfig.h</a>\n</li>\n<li>MAX_MQTT_TOPIC_LEN\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">GwOutput_mqtt.h</a>\n</li>\n<li>MAX_NODE_INACTIVITY\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011\">EnigmaIoTconfig.h</a>\n</li>\n<li>MIN_SYNC_ACCURACY\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_n\"></a>- n -</h3><ul>\n<li>NETWORK_NAME_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>NODE_NAME_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>nodeAddrParam\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#ad9a0cbae2e14a9562307948b2ac1434a\">GatewayAPI.cpp</a>\n</li>\n<li>nodeConnectionLedFlashing\n: <a class=\"el\" href=\"EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa\">EnigmaIOTNode.cpp</a>\n</li>\n<li>nodeIdParam\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#affc0d6e756f8b8eb7c21751494b5e8b2\">GatewayAPI.cpp</a>\n</li>\n<li>nodeNameParam\n: <a class=\"el\" href=\"GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a\">GatewayAPI.cpp</a>\n</li>\n<li>NUM_NODES\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2\">EnigmaIoTconfig.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_o\"></a>- o -</h3><ul>\n<li>OTA_GW_TIMEOUT\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>OTA_TIMEOUT_TIME\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>OTAongoing\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f\">EnigmaIOTGateway.cpp</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_p\"></a>- p -</h3><ul>\n<li>POST_REG_DELAY\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed\">EnigmaIoTconfig.h</a>\n</li>\n<li>PRE_REG_DELAY\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a\">EnigmaIoTconfig.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_q\"></a>- q -</h3><ul>\n<li>QUICK_SYNC_TIME\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9\">EnigmaIoTconfig.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_r\"></a>- r -</h3><ul>\n<li>RANDOM_LENGTH\n: <a class=\"el\" href=\"cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654\">cryptModule.h</a>\n</li>\n<li>RATE_AVE_ORDER\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#af320072fb51a344213679450cacb3d6a\">EnigmaIoTconfig.h</a>\n</li>\n<li>RECONNECTION_PERIOD\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826\">EnigmaIoTconfig.h</a>\n</li>\n<li>relayKey\n: <a class=\"el\" href=\"SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba\">SmartSwitchController.cpp</a>\n</li>\n<li>RESET_PIN\n: <a class=\"el\" href=\"enigmaiot__node__nonsleepy_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">enigmaiot_node_nonsleepy.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__led__flasher_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">enigmaiot_led_flasher.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">enigmaiot_node.cpp</a>\n, <a class=\"el\" href=\"enigmaiot__node__msgpack_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e\">enigmaiot_node_msgpack.cpp</a>\n</li>\n<li>RESET_PIN_DURATION\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b\">EnigmaIoTconfig.h</a>\n</li>\n<li>RESPONSE_SIZE\n: <a class=\"el\" href=\"GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df\">GatewayAPI.h</a>\n</li>\n<li>restartRequested\n: <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a827c388d92651f51d34097598a52a92a\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>restartRequestTime\n: <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a37e5a736d8dfa2198aa9607a61ff1695\">EnigmaIOTGatewayMQTT.cpp</a>\n</li>\n<li>RTC_ADDRESS\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_s\"></a>- s -</h3><ul>\n<li>shouldSave\n: <a class=\"el\" href=\"EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9\">EnigmaIOTGateway.cpp</a>\n</li>\n<li>SLEEP_TIME\n: <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260\">EnigmaIOT-Sensor-Controller.cpp</a>\n</li>\n<li>STATUS_SEND_PERIOD\n: <a class=\"el\" href=\"GwOutput__mqtt_8h.html#a0c2feee288af6e6c9d13de8804a94128\">GwOutput_mqtt.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_t\"></a>- t -</h3><ul>\n<li>TAG_LENGTH\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>TIME_SYNC_PERIOD\n: <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c\">EnigmaIoTconfig.h</a>\n</li>\n<li>TimeManager\n: <a class=\"el\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">timeManager.cpp</a>\n, <a class=\"el\" href=\"timeManager_8h.html#aa2f15646607c9908039f67741ccbab58\">timeManager.h</a>\n</li>\n</ul>\n\n\n<h3><a id=\"index_w\"></a>- w -</h3><ul>\n<li>WEB_API_PORT\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/globals_w.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: File Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div>\n\n<h3><a id=\"index_w\"></a>- w -</h3><ul>\n<li>WAIT_FOR_DOWNLINK\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f\">NodeList.h</a>\n</li>\n<li>WAIT_FOR_SERVER_HELLO\n: <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f\">NodeList.h</a>\n</li>\n<li>WARN\n: <a class=\"el\" href=\"EnigmaIOTdebug_8h.html#a271d8f7f52be750e5c744a394ec71344\">EnigmaIOTdebug.h</a>\n</li>\n<li>WEB_API_PORT\n: <a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a\">EnigmaIoTconfigAdvanced.h</a>\n</li>\n<li>wifiManagerExit()\n: <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOT-Button-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#a960401606ecc83efdb2e45646619f277\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#a4d022fc715d83a4b69c587df0201b63d\">EnigmaIOT-Json-Controller-Template.cpp</a>\n</li>\n<li>wifiManagerStarted()\n: <a class=\"el\" href=\"EnigmaIOT-Led-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-Led-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Sensor-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-Sensor-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayDummy_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOTGatewayDummy.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-SmartSwitch-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-SmartSwitch-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOTGatewayMQTT_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOTGatewayMQTT.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-DashButton-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-DashButton-Controller.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Json-Controller-Template_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-Json-Controller-Template.cpp</a>\n, <a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#ad151c02682f80a13429640710b842160\">EnigmaIOT-Button-Controller.cpp</a>\n</li>\n<li>WRONG_CLIENT_HELLO\n: <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6ad6e9d0b3e3d479305eb2ce4233f4eca6\">EnigmaIOTNode.h</a>\n, <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977ad6e9d0b3e3d479305eb2ce4233f4eca6\">EnigmaIOTGateway.h</a>\n</li>\n<li>WRONG_DATA\n: <a class=\"el\" href=\"EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff\">EnigmaIOTGateway.h</a>\n, <a class=\"el\" href=\"EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a4d7f512e433223ce2caa44e787a2ddff\">EnigmaIOTNode.h</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haBinarySensor_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haBinarySensor.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haBinarySensor.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Home Assistant binary sensor integration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"haBinarySensor_8h_source.html\">haBinarySensor.h</a>&quot;</code><br />\n</div>\n<p><a href=\"haBinarySensor_8cpp_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Home Assistant binary sensor integration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haBinarySensor_8cpp_source.html\">haBinarySensor.cpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haBinarySensor_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haBinarySensor.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haBinarySensor.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haBinarySensor_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haBinarySensor_8h.html\">haBinarySensor.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#af305236afbd0405010d1611eac965530\">   13</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#af305236afbd0405010d1611eac965530\">HABinarySensor::setDeviceClass</a> (<a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a> devClass) {</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;    <span class=\"keywordflow\">if</span> (devClass &gt; <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\">bs_none</a>) {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        <span class=\"comment\">// DEBUG_WARN (&quot;Set device class to %d&quot;, devClass);</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a>] = devClass;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">   20</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">HABinarySensor::setPayloadOn</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">   26</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">HABinarySensor::setPayloadOff</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#ae7d585e8eed2eda20125b9d2eb5c4b9c\">   32</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">HABinarySensor::setPayloadOn</a> (<span class=\"keywordtype\">int</span> payload) {</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160; </div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#a48a5415389f3b0a03e35c883f764ab45\">   36</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">HABinarySensor::setPayloadOff</a> (<span class=\"keywordtype\">int</span> payload) {</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958\">   40</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958\">HABinarySensor::setValueField</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160; </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552\">   46</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552\">HABinarySensor::setValueTemplate</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7\">   52</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7\">HABinarySensor::setOffDelay</a> (uint payload) {</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">ha_off_delay</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"comment\">/* Discovery JSON template for binary sensor</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"comment\">  &quot;pl_on&quot;:&lt;cmd_payload_on&gt;,</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"comment\">  &quot;pl_off&quot;:&lt;cmd_payload_off&gt;,</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"comment\">  &quot;val&quot;:&lt;value_field&gt;,</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"comment\">  &quot;exp_aft&quot;:&lt;expire_time&gt;,</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"comment\">  &quot;dev_cla&quot;:&lt;device_class&gt;</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"comment\">  &quot;nmsfx&quot;:&lt;name_suffix&gt;</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"comment\">}</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"comment\"></span> </div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"comment\">  &quot;name&quot;:&lt;node_name&gt;_&lt;name_suffix&gt;,</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"comment\">  &quot;unique_id&quot;:&lt;node_name&gt;_&lt;name_suffix&gt;,</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"comment\">  &quot;device_class&quot;:&lt;device_class&gt;,</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"comment\">  &quot;state_topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;,</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"comment\">  &quot;payload_on&quot;:&lt;cmd_payload_on&gt;,</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"comment\">  &quot;payload_off&quot;:&lt;cmd_payload_off&gt;,</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"comment\">  &quot;value_template&quot;:&quot;{{value_json.&lt;value_field&gt;}}&quot;,</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"comment\">  &quot;expire_after&quot;:&lt;expire_time&gt;</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"comment\">}</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160; </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">   78</a></span>&#160;<span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">HABinarySensor::getDiscoveryJson</a> (<span class=\"keywordtype\">char</span>* buffer, <span class=\"keywordtype\">size_t</span> buflen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, DynamicJsonDocument* inputJSON) {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    <span class=\"comment\">//DynamicJsonDocument inputJSON (1024);</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    DynamicJsonDocument outputJSON (1024);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;    <span class=\"comment\">//deserializeMsgPack (inputJSON, msgPack, len);</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160; </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;    <span class=\"keywordflow\">if</span> (!nodeName || !networkName || !inputJSON ) {</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Whrong parameters&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160; </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>)) {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;name&quot;</span>] = String (nodeName) + <span class=\"stringliteral\">&quot;_&quot;</span> + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;name&quot;</span>] = nodeName;    </div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>)) {</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;unique_id&quot;</span>] = String (nodeName) + <span class=\"stringliteral\">&quot;_&quot;</span> + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;unique_id&quot;</span>] = nodeName;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;state_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a>)) {</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;device_class&quot;</span>] = <a class=\"code\" href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">deviceClassStr</a> ((*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a>]);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a>)) {</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;payload_on&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a>];</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a>)) {</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;payload_off&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a>];</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a>)) {</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        String templ = ((*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a>]).as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        templ.replace (<span class=\"stringliteral\">&quot;***&quot;</span>, nodeName);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;value_template&quot;</span>].set&lt;String&gt; (templ);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>) &amp;&amp; (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>].is&lt;String&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;value_template&quot;</span>] = String (<span class=\"stringliteral\">&quot;{{value_json.&quot;</span>) + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>].as&lt;String&gt; () + String (<span class=\"stringliteral\">&quot;}}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;value_template&quot;</span>] = <span class=\"stringliteral\">&quot;{{value_json.value}}&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a>) &amp;&amp; (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a>].is&lt;<span class=\"keywordtype\">int</span>&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;expire_after&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a>].as&lt;<span class=\"keywordtype\">int</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">ha_off_delay</a>) &amp;&amp; (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">ha_off_delay</a>].is&lt;<span class=\"keywordtype\">int</span>&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;off_delay&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">ha_off_delay</a>].as&lt;<span class=\"keywordtype\">int</span>&gt; ();</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a>) &amp;&amp; (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a>].as&lt;<span class=\"keywordtype\">bool</span>&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;json_attributes_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;json_attributes_template&quot;</span>] = <span class=\"stringliteral\">&quot;{{value_json | tojson}}&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160; </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    <span class=\"keywordtype\">size_t</span> jsonLen = measureJson (outputJSON);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160; </div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    <span class=\"keywordflow\">if</span> (jsonLen &gt; buflen) {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Too small buffer. Required %u Has %u&quot;</span>, jsonLen, buflen);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160; </div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    <span class=\"comment\">//buffer[jsonLen - 1] = &#39;\\0&#39;;</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    serializeJson (outputJSON, buffer, 1024);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"keywordflow\">return</span> jsonLen;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160; </div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">  142</a></span>&#160;String <a class=\"code\" href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">HABinarySensor::deviceClassStr</a> (<a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a> sensorClass) {</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    <span class=\"keywordflow\">switch</span> (sensorClass) {</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\">bs_battery</a>:</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;battery&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\">bs_battery_charging</a>:</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;battery_charging&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\">bs_cold</a>:</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;cold&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\">bs_connectivity</a>:</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;connectivity&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\">bs_door</a>:</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;door&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\">bs_garage_door</a>:</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;garage_door&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\">bs_gas</a>:</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;gas&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\">bs_heat</a>:</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;heat&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\">bs_light</a>:</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;light&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\">bs_lock</a>:</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;lock&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\">bs_moisture</a>:</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;moisture&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\">bs_motion</a>:</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;motion&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\">bs_moving</a>:</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;moving&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\">bs_occupancy</a>:</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;occupancy&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\">bs_opening</a>:</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;opening&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\">bs_plug</a>:</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;plug&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\">bs_power</a>:</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;power&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\">bs_presence</a>:</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;presence&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\">bs_problem</a>:</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;problem&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\">bs_safety</a>:</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;safety&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\">bs_smoke</a>:</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;smoke&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\">bs_sound</a>:</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;sound&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\">bs_vibration</a>:</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;vibration&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\">bs_window</a>:</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;window&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\">bs_lock</a></div><div class=\"ttdeci\">@ bs_lock</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00084\">haEntity.h:84</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\">bs_power</a></div><div class=\"ttdeci\">@ bs_power</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00091\">haEntity.h:91</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\">bs_garage_door</a></div><div class=\"ttdeci\">@ bs_garage_door</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00080\">haEntity.h:80</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aebdcd9a166f413152e13a2d85d47d3a3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a></div><div class=\"ttdeci\">constexpr auto ha_device_class</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00024\">haEntity.h:24</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\">bs_moisture</a></div><div class=\"ttdeci\">@ bs_moisture</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00085\">haEntity.h:85</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\">bs_light</a></div><div class=\"ttdeci\">@ bs_light</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00083\">haEntity.h:83</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a></div><div class=\"ttdeci\">haBinarySensorClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00073\">haEntity.h:73</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\">bs_cold</a></div><div class=\"ttdeci\">@ bs_cold</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00077\">haEntity.h:77</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_ab0b307302ea8fe68e39cd89fdda7b9cc\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">HABinarySensor::deviceClassStr</a></div><div class=\"ttdeci\">static String deviceClassStr(haBinarySensorClass_t sensorClass)</div><div class=\"ttdoc\">Gets binary sensor class name from haBinarySensorClass_t https://www.home-assistant....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00142\">haBinarySensor.cpp:142</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\">bs_presence</a></div><div class=\"ttdeci\">@ bs_presence</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00092\">haEntity.h:92</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\">bs_smoke</a></div><div class=\"ttdeci\">@ bs_smoke</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00095\">haEntity.h:95</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\">bs_battery</a></div><div class=\"ttdeci\">@ bs_battery</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00075\">haEntity.h:75</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\">bs_safety</a></div><div class=\"ttdeci\">@ bs_safety</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00094\">haEntity.h:94</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\">bs_occupancy</a></div><div class=\"ttdeci\">@ bs_occupancy</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00088\">haEntity.h:88</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a55c51daf4f6f4c37723ce6ed4c44b958\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958\">HABinarySensor::setValueField</a></div><div class=\"ttdeci\">void setValueField(const char *payload)</div><div class=\"ttdoc\">Defines a template that returns a string to be compared to payload_on/payload_off or an empty string,...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00040\">haBinarySensor.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\">bs_plug</a></div><div class=\"ttdeci\">@ bs_plug</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00090\">haEntity.h:90</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_af2c19a08cf6b4c1260bb85c7cddee552\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552\">HABinarySensor::setValueTemplate</a></div><div class=\"ttdeci\">void setValueTemplate(const char *payload)</div><div class=\"ttdoc\">Defines a template that defines binary sensor value. When setting this you should not call setValueFi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00046\">haBinarySensor.cpp:46</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a1af598a0ee0d299624cef6b4b61b6ba6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a></div><div class=\"ttdeci\">constexpr auto ha_allow_attrib</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00048\">haEntity.h:48</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a03ffb2c860c7276dca38abdca4423f16\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a></div><div class=\"ttdeci\">constexpr auto ha_name_sufix</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00047\">haEntity.h:47</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\">bs_motion</a></div><div class=\"ttdeci\">@ bs_motion</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00086\">haEntity.h:86</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\">bs_vibration</a></div><div class=\"ttdeci\">@ bs_vibration</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00097\">haEntity.h:97</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\">bs_none</a></div><div class=\"ttdeci\">@ bs_none</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00074\">haEntity.h:74</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a401afaae50f1f853db98f8398b921d5a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a></div><div class=\"ttdeci\">constexpr auto ha_payload_off</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00026\">haEntity.h:26</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a6cdc4acd13954859318b6f95243d5694\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a></div><div class=\"ttdeci\">constexpr auto ha_expiration</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00029\">haEntity.h:29</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\">bs_connectivity</a></div><div class=\"ttdeci\">@ bs_connectivity</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00078\">haEntity.h:78</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\">bs_sound</a></div><div class=\"ttdeci\">@ bs_sound</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00096\">haEntity.h:96</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a843647264ee900edb1ee5c51abef4bd2\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">HABinarySensor::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Binary Sensor template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00078\">haBinarySensor.cpp:78</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_ad04e2a8059ebfefb02e98fb3524276c2\"><div class=\"ttname\"><a href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a></div><div class=\"ttdeci\">constexpr auto ha_value_template</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00028\">haEntity.h:28</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a3fc9f50d176634428630c03bb15a8d59\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">HABinarySensor::setPayloadOff</a></div><div class=\"ttdeci\">void setPayloadOff(const char *payload)</div><div class=\"ttdoc\">Defines the string that represents the off state. It will be compared to the message in the state_top...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00026\">haBinarySensor.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\">bs_problem</a></div><div class=\"ttdeci\">@ bs_problem</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00093\">haEntity.h:93</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a9192b104b2c2ac607dc66b98237ff4c4\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">HABinarySensor::setPayloadOn</a></div><div class=\"ttdeci\">void setPayloadOn(const char *payload)</div><div class=\"ttdoc\">Defines the string that represents the on state. It will be compared to the message in the state_topi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00020\">haBinarySensor.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_ae7ffd524cbd915c942359b0f6abe1df5\"><div class=\"ttname\"><a href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a></div><div class=\"ttdeci\">constexpr auto ha_payload_on</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00025\">haEntity.h:25</a></div></div>\n<div class=\"ttc\" id=\"ahaBinarySensor_8h_html\"><div class=\"ttname\"><a href=\"haBinarySensor_8h.html\">haBinarySensor.h</a></div><div class=\"ttdoc\">Home Assistant binary sensor integration.</div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a3195d26bdb20255ce0e07c0e2c0d3af7\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7\">HABinarySensor::setOffDelay</a></div><div class=\"ttdeci\">void setOffDelay(uint payload)</div><div class=\"ttdoc\">For sensors that only send on state updates (like PIRs), this sets a delay in seconds after which the...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00052\">haBinarySensor.cpp:52</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_af305236afbd0405010d1611eac965530\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#af305236afbd0405010d1611eac965530\">HABinarySensor::setDeviceClass</a></div><div class=\"ttdeci\">void setDeviceClass(haBinarySensorClass_t devClass)</div><div class=\"ttdoc\">Define binary sensor class as haBinarySensorClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00013\">haBinarySensor.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\">bs_door</a></div><div class=\"ttdeci\">@ bs_door</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00079\">haEntity.h:79</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\">bs_battery_charging</a></div><div class=\"ttdeci\">@ bs_battery_charging</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00076\">haEntity.h:76</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\">bs_gas</a></div><div class=\"ttdeci\">@ bs_gas</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00081\">haEntity.h:81</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\">bs_window</a></div><div class=\"ttdeci\">@ bs_window</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00099\">haEntity.h:98</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\">bs_opening</a></div><div class=\"ttdeci\">@ bs_opening</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00089\">haEntity.h:89</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a510b5d3df2d7a28a54196b2441fdb270\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">ha_off_delay</a></div><div class=\"ttdeci\">constexpr auto ha_off_delay</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00045\">haEntity.h:45</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\">bs_heat</a></div><div class=\"ttdeci\">@ bs_heat</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00082\">haEntity.h:82</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\">bs_moving</a></div><div class=\"ttdeci\">@ bs_moving</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00087\">haEntity.h:87</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a55797940423863b288e6c60755873026\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a></div><div class=\"ttdeci\">constexpr auto ha_value_key</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00027\">haEntity.h:27</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haBinarySensor_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haBinarySensor.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">haBinarySensor.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Home Assistant binary sensor integration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>&quot;</code><br />\n</div>\n<p><a href=\"haBinarySensor_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHABinarySensor.html\">HABinarySensor</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Home Assistant binary sensor integration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haBinarySensor_8h_source.html\">haBinarySensor.h</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haBinarySensor_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haBinarySensor.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haBinarySensor.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haBinarySensor_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _BINARY_SENSOR_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _BINARY_SENSOR_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haEntity_8h.html\">haEntity.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160; </div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html\">   85</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classHABinarySensor.html\">HABinarySensor</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classHAEntity.html\">HAEntity</a> {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#a24cc503973f65dadac7575a2bba823b6\">   90</a></span>&#160;    <a class=\"code\" href=\"classHABinarySensor.html#a24cc503973f65dadac7575a2bba823b6\">HABinarySensor</a> () {</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a> = JSON_OBJECT_SIZE (10) + 250;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a> = <span class=\"keyword\">new</span> DynamicJsonDocument (<a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a>);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">BINARY_SENSOR</a>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a>] = <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a>;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    };</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#af305236afbd0405010d1611eac965530\">setDeviceClass</a> (<a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a> devClass);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">setPayloadOn</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">setPayloadOff</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160; </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">setPayloadOn</a> (<span class=\"keywordtype\">int</span> payload);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160; </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">setPayloadOff</a> (<span class=\"keywordtype\">int</span> payload);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160; </div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958\">setValueField</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552\">setValueTemplate</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7\">setOffDelay</a> (uint payload);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160; </div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;   </div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">getDiscoveryJson</a> (<span class=\"keywordtype\">char</span>* buffer, <span class=\"keywordtype\">size_t</span> buflen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, DynamicJsonDocument* inputJSON);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160; </div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;    <span class=\"keyword\">static</span> String <a class=\"code\" href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">deviceClassStr</a> (<a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a> sensorClass);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160; </div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHABinarySensor.html#a857bc07743e8564db8476907f925c48e\">  178</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHABinarySensor.html#a857bc07743e8564db8476907f925c48e\">addExpiration</a> (uint seconds) {</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keywordflow\">if</span> (seconds &gt; 0) {</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;            (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a>] = seconds;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160; </div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160; </div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160; </div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">#endif // _BINARY_SENSOR_h</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">BINARY_SENSOR</a></div><div class=\"ttdeci\">@ BINARY_SENSOR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00056\">haEntity.h:56</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_aadb3c5676c00fc0c8b3939888e408d2b\"><div class=\"ttname\"><a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">HAEntity::entityConfig</a></div><div class=\"ttdeci\">DynamicJsonDocument * entityConfig</div><div class=\"ttdoc\">JSON object to be sent to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00138\">haEntity.h:138</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a></div><div class=\"ttdeci\">haBinarySensorClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00073\">haEntity.h:73</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html\"><div class=\"ttname\"><a href=\"haEntity_8h.html\">haEntity.h</a></div><div class=\"ttdoc\">Defines an entity for Home Assistant autodiscovery.</div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_ab0b307302ea8fe68e39cd89fdda7b9cc\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc\">HABinarySensor::deviceClassStr</a></div><div class=\"ttdeci\">static String deviceClassStr(haBinarySensorClass_t sensorClass)</div><div class=\"ttdoc\">Gets binary sensor class name from haBinarySensorClass_t https://www.home-assistant....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00142\">haBinarySensor.cpp:142</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_aeff41e84aaa1b70df8137cbd05d8ddbe\"><div class=\"ttname\"><a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">HAEntity::capacity</a></div><div class=\"ttdeci\">size_t capacity</div><div class=\"ttdoc\">JSON object memory reservation length.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00134\">haEntity.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a55c51daf4f6f4c37723ce6ed4c44b958\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958\">HABinarySensor::setValueField</a></div><div class=\"ttdeci\">void setValueField(const char *payload)</div><div class=\"ttdoc\">Defines a template that returns a string to be compared to payload_on/payload_off or an empty string,...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00040\">haBinarySensor.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_af2c19a08cf6b4c1260bb85c7cddee552\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552\">HABinarySensor::setValueTemplate</a></div><div class=\"ttdeci\">void setValueTemplate(const char *payload)</div><div class=\"ttdoc\">Defines a template that defines binary sensor value. When setting this you should not call setValueFi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00046\">haBinarySensor.cpp:46</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a6cdc4acd13954859318b6f95243d5694\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a></div><div class=\"ttdeci\">constexpr auto ha_expiration</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00029\">haEntity.h:29</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html\"><div class=\"ttname\"><a href=\"classHABinarySensor.html\">HABinarySensor</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8h_source.html#l00085\">haBinarySensor.h:85</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a843647264ee900edb1ee5c51abef4bd2\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2\">HABinarySensor::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Binary Sensor template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00078\">haBinarySensor.cpp:78</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a3fc9f50d176634428630c03bb15a8d59\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59\">HABinarySensor::setPayloadOff</a></div><div class=\"ttdeci\">void setPayloadOff(const char *payload)</div><div class=\"ttdoc\">Defines the string that represents the off state. It will be compared to the message in the state_top...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00026\">haBinarySensor.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a375fbbd60c980937a4d80c1156fb9d33\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a></div><div class=\"ttdeci\">constexpr auto ha_device_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00023\">haEntity.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a857bc07743e8564db8476907f925c48e\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a857bc07743e8564db8476907f925c48e\">HABinarySensor::addExpiration</a></div><div class=\"ttdeci\">void addExpiration(uint seconds)</div><div class=\"ttdoc\">Defines the number of seconds after the sensor’s state expires, if it’s not updated....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8h_source.html#l00178\">haBinarySensor.h:178</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a8c9d02fb762b3af1739ba632479473d5\"><div class=\"ttname\"><a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">HAEntity::deviceType</a></div><div class=\"ttdeci\">haDeviceType_t deviceType</div><div class=\"ttdoc\">HomeAssistant entity device type.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00135\">haEntity.h:135</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a9192b104b2c2ac607dc66b98237ff4c4\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4\">HABinarySensor::setPayloadOn</a></div><div class=\"ttdeci\">void setPayloadOn(const char *payload)</div><div class=\"ttdoc\">Defines the string that represents the on state. It will be compared to the message in the state_topi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00020\">haBinarySensor.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a3195d26bdb20255ce0e07c0e2c0d3af7\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7\">HABinarySensor::setOffDelay</a></div><div class=\"ttdeci\">void setOffDelay(uint payload)</div><div class=\"ttdoc\">For sensors that only send on state updates (like PIRs), this sets a delay in seconds after which the...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00052\">haBinarySensor.cpp:52</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_a24cc503973f65dadac7575a2bba823b6\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#a24cc503973f65dadac7575a2bba823b6\">HABinarySensor::HABinarySensor</a></div><div class=\"ttdeci\">HABinarySensor()</div><div class=\"ttdoc\">Binary sensor constructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8h_source.html#l00090\">haBinarySensor.h:90</a></div></div>\n<div class=\"ttc\" id=\"aclassHABinarySensor_html_af305236afbd0405010d1611eac965530\"><div class=\"ttname\"><a href=\"classHABinarySensor.html#af305236afbd0405010d1611eac965530\">HABinarySensor::setDeviceClass</a></div><div class=\"ttdeci\">void setDeviceClass(haBinarySensorClass_t devClass)</div><div class=\"ttdoc\">Define binary sensor class as haBinarySensorClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haBinarySensor_8cpp_source.html#l00013\">haBinarySensor.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html\"><div class=\"ttname\"><a href=\"classHAEntity.html\">HAEntity</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00132\">haEntity.h:132</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haCover_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haCover.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haCover.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Home Assistant cover and shade integration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"haCover_8h_source.html\">haCover.h</a>&quot;</code><br />\n</div>\n<p><a href=\"haCover_8cpp_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Home Assistant cover and shade integration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haCover_8cpp_source.html\">haCover.cpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haCover_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haCover.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haCover.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haCover_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haCover_8h.html\">haCover.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#add81f3124d1f1f66745798d27b467098\">   13</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#add81f3124d1f1f66745798d27b467098\">HACover::setDeviceClass</a> (<a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a> devClass) {</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;    <span class=\"keywordflow\">if</span> (devClass &gt; <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\">cover_none</a>) {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        <span class=\"comment\">// DEBUG_WARN (&quot;Set device class to %d&quot;, devClass);</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a>] = devClass;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#a20860a2f4181be32c69a583104cf9181\">   20</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a20860a2f4181be32c69a583104cf9181\">HACover::setPayloadOpen</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880\">ha_payload_open</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#a372d3fac011d58154daca97311fb5a94\">   26</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a372d3fac011d58154daca97311fb5a94\">HACover::setPayloadClose</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a244cdb583a7f830630583998a8e840c2\">ha_payload_close</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#a727afd76b2e852a0e177c5d64fff5894\">   32</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a727afd76b2e852a0e177c5d64fff5894\">HACover::setPayloadStop</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6\">ha_payload_stop</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160; </div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#ac2f06095a52cd09cf77fb881754bffd4\">   38</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#ac2f06095a52cd09cf77fb881754bffd4\">HACover::setPayloadGoto</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712\">ha_payload_goto</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160; </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42\">   44</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42\">HACover::setStateOpen</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#afb9503f780f913e1ca94900da8723da7\">ha_state_open</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2\">   50</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2\">HACover::setStateOpening</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3\">ha_state_opening</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160; </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0\">   56</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0\">HACover::setStateClosed</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d\">ha_state_closed</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69\">   62</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69\">HACover::setStateClosing</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f\">ha_state_closing</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160; </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#a2341ee037b2dae238703f15bf95e6ccf\">   68</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a2341ee037b2dae238703f15bf95e6ccf\">HACover::setStateStopped</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b\">ha_state_stopped</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160; </div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"comment\">/* Discovery JSON template for Cover</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"comment\">    &quot;dev_cla&quot;:&lt;device_class&gt;,</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"comment\">    &quot;pl_cls&quot;:&lt;pl_cls&gt;&gt;,</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"comment\">    &quot;pl_open&quot;:&lt;pl_open&gt;,</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"comment\">    &quot;pl_stop&quot;:&lt;pl_stop&gt;,</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"comment\">    &quot;pl_goto&quot;:&lt;pl_goto&gt;,</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"comment\">    &quot;pos_open&quot;:&lt;pos_open&gt;,</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"comment\">    &quot;pos_clsd&quot;:&lt;pos_clsd&gt;,</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"comment\">    &quot;set_pos_tpl&quot;:&lt;pl_goto&gt;,</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"comment\">    &quot;stat_clsd&quot;:&lt;stat_clsd&gt;,</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"comment\">    &quot;stat_closing&quot;:&lt;stat_closing&gt;,</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"comment\">    &quot;stat_open&quot;:&lt;stat_open&gt;,</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"comment\">    &quot;stat_opening&quot;:&lt;stat_opening&gt;,</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"comment\">    &quot;stat_stopped&quot;:&lt;stat_stopped&gt;,</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"comment\">}</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"comment\">    &quot;name&quot;:&lt;node_name&gt;,</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"comment\">    &quot;unique_id&quot;:&lt;node_name&gt;,</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"comment\">    &quot;command_topic&quot;:&lt;network_name&gt;/&lt;node_name&gt;/set/data,</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"comment\">    &quot;device_class&quot;:&lt;device_class&gt;,</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"comment\">    &quot;json_attributes_topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;,</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"comment\">    &quot;json_attributes_template&quot;:&quot;{{value_json}}&quot;,</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"comment\">    &quot;payload_close&quot;:&quot;{\\&quot;cmd\\&quot;:&lt;pl_cls&gt;}&quot;,</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"comment\">    &quot;payload_open&quot;:&quot;{\\&quot;cmd\\&quot;:&lt;pl_open&gt;}&quot;,</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"comment\">    &quot;payload_stop&quot;:&quot;{\\&quot;cmd\\&quot;:&lt;pl_stop&gt;}&quot;,</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"comment\">    &quot;position_topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;,</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"comment\">    &quot;position_template&quot;:&quot;{{value_json.pos}}&quot;,</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;<span class=\"comment\">    &quot;set_position_topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/set/data,</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"comment\">    &quot;set_position_template&quot;:&quot;{\\&quot;cmd\\&quot;:&lt;pl_goto&gt;,\\&quot;pos\\&quot;:{{position|int}}}&quot;,</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"comment\">    &quot;state_closed&quot;:&lt;stat_clsd&gt;,</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"comment\">    &quot;state_closing&quot;:&lt;stat_closing&gt;,</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"comment\">    &quot;state_open&quot;:&lt;stat_open&gt;,</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"comment\">    &quot;state_opening&quot;:&lt;stat_opening&gt;,</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"comment\">    &quot;state_stopped&quot;:&lt;stat_stopped&gt;,</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"comment\">    &quot;state_topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;,</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"comment\">    &quot;value_template&quot;:&quot;{{value_json.state}}&quot;,</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"comment\">}</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160; </div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">  114</a></span>&#160;<span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">HACover::getDiscoveryJson</a> (<span class=\"keywordtype\">char</span>* buffer, <span class=\"keywordtype\">size_t</span> buflen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, DynamicJsonDocument* inputJSON) {</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    <span class=\"comment\">//DynamicJsonDocument inputJSON (1024);</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    DynamicJsonDocument outputJSON (1300);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160; </div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <span class=\"comment\">//deserializeMsgPack (inputJSON, msgPack, len);</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160; </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"keywordflow\">if</span> (!nodeName || !networkName || !inputJSON ) {</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Whrong parameters&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>)) {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;name&quot;</span>] = String (nodeName) + <span class=\"stringliteral\">&quot;_&quot;</span> + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;name&quot;</span>] = nodeName;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>)) {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;unique_id&quot;</span>] = String (nodeName) + <span class=\"stringliteral\">&quot;_&quot;</span> + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;unique_id&quot;</span>] = nodeName;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;command_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a>)) {</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;device_class&quot;</span>] = <a class=\"code\" href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">deviceClassStr</a> ((*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a>]);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a244cdb583a7f830630583998a8e840c2\">ha_payload_close</a>)) {</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;payload_close&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a244cdb583a7f830630583998a8e840c2\">ha_payload_close</a>];</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880\">ha_payload_open</a>)) {</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;payload_open&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880\">ha_payload_open</a>];</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6\">ha_payload_stop</a>)) {</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;payload_stop&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6\">ha_payload_stop</a>];</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;position_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;position_template&quot;</span>] = <span class=\"stringliteral\">&quot;{{value_json.pos}}&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;set_position_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/set/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    String pl_goto = <span class=\"stringliteral\">&quot;pos&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712\">ha_payload_goto</a>)) {</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        pl_goto = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712\">ha_payload_goto</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;set_position_template&quot;</span>]= String(<span class=\"stringliteral\">&quot;{\\&quot;cmd\\&quot;:&quot;</span>) + pl_goto + String(<span class=\"stringliteral\">&quot;\\&quot;pos\\&quot;:{{position|int}}}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d\">ha_state_closed</a>)) {</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;state_closed&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d\">ha_state_closed</a>];</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f\">ha_state_closing</a>)) {</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;state_closing&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f\">ha_state_closing</a>];</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#afb9503f780f913e1ca94900da8723da7\">ha_state_open</a>)) {</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;state_open&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#afb9503f780f913e1ca94900da8723da7\">ha_state_open</a>];</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3\">ha_state_opening</a>)) {</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;state_opening&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3\">ha_state_opening</a>];</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b\">ha_state_stopped</a>)) {</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;state_stopped&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b\">ha_state_stopped</a>];</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;state_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;value_template&quot;</span>] = <span class=\"stringliteral\">&quot;{{value_json.state}}&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160; </div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a>) &amp;&amp; (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a>].as&lt;<span class=\"keywordtype\">bool</span>&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;json_attributes_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;json_attributes_template&quot;</span>] = <span class=\"stringliteral\">&quot;{{value_json | tojson}}&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;    <span class=\"keywordtype\">size_t</span> jsonLen = measureJson (outputJSON);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160; </div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    <span class=\"keywordflow\">if</span> (jsonLen &gt; buflen) {</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Too small buffer. Required %u Has %u&quot;</span>, jsonLen, buflen);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160; </div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;    <span class=\"comment\">//buffer[jsonLen - 1] = &#39;\\0&#39;;</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;    serializeJson (outputJSON, buffer, 1024);</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160; </div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;    <span class=\"keywordflow\">return</span> jsonLen;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160; </div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">  192</a></span>&#160;String <a class=\"code\" href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">HACover::deviceClassStr</a> (<a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a> sensorClass) {</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    <span class=\"keywordflow\">switch</span> (sensorClass) {</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\">cover_awning</a>:</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;awning&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\">cover_blind</a>:</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;blind&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\">cover_curtain</a>:</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;curtain&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\">cover_damper</a>:</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;damper&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\">cover_door</a>:</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;door&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\">cover_garage</a>:</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;garage&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\">cover_gate</a>:</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;gate&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\">cover_shade</a>:</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;shade&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\">cover_shutter</a>:</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;shutter&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\">cover_window</a>:</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;window&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a></div><div class=\"ttdeci\">haCoverClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00102\">haEntity.h:102</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\">cover_awning</a></div><div class=\"ttdeci\">@ cover_awning</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00104\">haEntity.h:104</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_ab8bc696d21186a4468f8add2c5e8d7c2\"><div class=\"ttname\"><a href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">HACover::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Cover template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00114\">haCover.cpp:114</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\">cover_window</a></div><div class=\"ttdeci\">@ cover_window</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00114\">haEntity.h:113</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a4b984a52e4dae0e93fcd2a360be339d2\"><div class=\"ttname\"><a href=\"classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2\">HACover::setStateOpening</a></div><div class=\"ttdeci\">void setStateOpening(const char *payload)</div><div class=\"ttdoc\">The payload that represents the opening state https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00050\">haCover.cpp:50</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a449cf1be60eb0a8a34960fdf8c23a880\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880\">ha_payload_open</a></div><div class=\"ttdeci\">constexpr auto ha_payload_open</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00030\">haEntity.h:30</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\">cover_door</a></div><div class=\"ttdeci\">@ cover_door</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00108\">haEntity.h:108</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aebdcd9a166f413152e13a2d85d47d3a3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a></div><div class=\"ttdeci\">constexpr auto ha_device_class</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00024\">haEntity.h:24</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_ac28afc4ec8c1f31ce44d297789c575d6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6\">ha_payload_stop</a></div><div class=\"ttdeci\">constexpr auto ha_payload_stop</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00032\">haEntity.h:32</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a4bfa8996be4012ccf22cae3385ddcc69\"><div class=\"ttname\"><a href=\"classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69\">HACover::setStateClosing</a></div><div class=\"ttdeci\">void setStateClosing(const char *payload)</div><div class=\"ttdoc\">The payload that represents the closing state https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00062\">haCover.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\">cover_shade</a></div><div class=\"ttdeci\">@ cover_shade</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00111\">haEntity.h:111</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_afb9503f780f913e1ca94900da8723da7\"><div class=\"ttname\"><a href=\"haEntity_8h.html#afb9503f780f913e1ca94900da8723da7\">ha_state_open</a></div><div class=\"ttdeci\">constexpr auto ha_state_open</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00038\">haEntity.h:38</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a372d3fac011d58154daca97311fb5a94\"><div class=\"ttname\"><a href=\"classHACover.html#a372d3fac011d58154daca97311fb5a94\">HACover::setPayloadClose</a></div><div class=\"ttdeci\">void setPayloadClose(const char *payload)</div><div class=\"ttdoc\">The command payload that closes the cover https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00026\">haCover.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_affa1a278c35b3323dd830ac3a2195d2f\"><div class=\"ttname\"><a href=\"haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f\">ha_state_closing</a></div><div class=\"ttdeci\">constexpr auto ha_state_closing</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00041\">haEntity.h:41</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\">cover_curtain</a></div><div class=\"ttdeci\">@ cover_curtain</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00106\">haEntity.h:106</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\">cover_damper</a></div><div class=\"ttdeci\">@ cover_damper</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00107\">haEntity.h:107</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a6e7e453ab4f0a09c4041b577af62773d\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d\">ha_state_closed</a></div><div class=\"ttdeci\">constexpr auto ha_state_closed</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00040\">haEntity.h:40</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a20860a2f4181be32c69a583104cf9181\"><div class=\"ttname\"><a href=\"classHACover.html#a20860a2f4181be32c69a583104cf9181\">HACover::setPayloadOpen</a></div><div class=\"ttdeci\">void setPayloadOpen(const char *payload)</div><div class=\"ttdoc\">The command payload that opens the cover https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00020\">haCover.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a1af598a0ee0d299624cef6b4b61b6ba6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a></div><div class=\"ttdeci\">constexpr auto ha_allow_attrib</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00048\">haEntity.h:48</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a03ffb2c860c7276dca38abdca4423f16\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a></div><div class=\"ttdeci\">constexpr auto ha_name_sufix</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00047\">haEntity.h:47</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\">cover_shutter</a></div><div class=\"ttdeci\">@ cover_shutter</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00112\">haEntity.h:112</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\">cover_blind</a></div><div class=\"ttdeci\">@ cover_blind</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00105\">haEntity.h:105</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_ab9e4ae5934dd24bbd5014ec9eb16e2ef\"><div class=\"ttname\"><a href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">HACover::deviceClassStr</a></div><div class=\"ttdeci\">static String deviceClassStr(haCoverClass_t sensorClass)</div><div class=\"ttdoc\">Gets binary sensor class name from haCoverClass_t https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00192\">haCover.cpp:192</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\">cover_none</a></div><div class=\"ttdeci\">@ cover_none</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00103\">haEntity.h:103</a></div></div>\n<div class=\"ttc\" id=\"ahaCover_8h_html\"><div class=\"ttname\"><a href=\"haCover_8h.html\">haCover.h</a></div><div class=\"ttdoc\">Home Assistant cover and shade integration.</div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a244cdb583a7f830630583998a8e840c2\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a244cdb583a7f830630583998a8e840c2\">ha_payload_close</a></div><div class=\"ttdeci\">constexpr auto ha_payload_close</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00031\">haEntity.h:31</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a7adb03c6d78cf03d69a6d01bbfdc7712\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712\">ha_payload_goto</a></div><div class=\"ttdeci\">constexpr auto ha_payload_goto</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00036\">haEntity.h:36</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_add81f3124d1f1f66745798d27b467098\"><div class=\"ttname\"><a href=\"classHACover.html#add81f3124d1f1f66745798d27b467098\">HACover::setDeviceClass</a></div><div class=\"ttdeci\">void setDeviceClass(haCoverClass_t devClass)</div><div class=\"ttdoc\">Define cover class as haCoverClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00013\">haCover.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a727afd76b2e852a0e177c5d64fff5894\"><div class=\"ttname\"><a href=\"classHACover.html#a727afd76b2e852a0e177c5d64fff5894\">HACover::setPayloadStop</a></div><div class=\"ttdeci\">void setPayloadStop(const char *payload)</div><div class=\"ttdoc\">The command payload that stops the cover https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00032\">haCover.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa16bd80cd18d74b5613df907fb42436b\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b\">ha_state_stopped</a></div><div class=\"ttdeci\">constexpr auto ha_state_stopped</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00042\">haEntity.h:42</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_ac2f06095a52cd09cf77fb881754bffd4\"><div class=\"ttname\"><a href=\"classHACover.html#ac2f06095a52cd09cf77fb881754bffd4\">HACover::setPayloadGoto</a></div><div class=\"ttdeci\">void setPayloadGoto(const char *payload)</div><div class=\"ttdoc\">The command that moves the cover to specific position.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00038\">haCover.cpp:38</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a2341ee037b2dae238703f15bf95e6ccf\"><div class=\"ttname\"><a href=\"classHACover.html#a2341ee037b2dae238703f15bf95e6ccf\">HACover::setStateStopped</a></div><div class=\"ttdeci\">void setStateStopped(const char *payload)</div><div class=\"ttdoc\">The payload that represents the stopped state https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00068\">haCover.cpp:68</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a536f1579f3c3216e432bb8c90af908f3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3\">ha_state_opening</a></div><div class=\"ttdeci\">constexpr auto ha_state_opening</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00039\">haEntity.h:39</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_ac7086eaf2411420d3a36df4ba3a55d42\"><div class=\"ttname\"><a href=\"classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42\">HACover::setStateOpen</a></div><div class=\"ttdeci\">void setStateOpen(const char *payload)</div><div class=\"ttdoc\">The payload that represents the open state https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00044\">haCover.cpp:44</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\">cover_garage</a></div><div class=\"ttdeci\">@ cover_garage</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00109\">haEntity.h:109</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a7caf15ccd3d71002c83f67ef65e814d0\"><div class=\"ttname\"><a href=\"classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0\">HACover::setStateClosed</a></div><div class=\"ttdeci\">void setStateClosed(const char *payload)</div><div class=\"ttdoc\">The payload that represents the closed state https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00056\">haCover.cpp:56</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\">cover_gate</a></div><div class=\"ttdeci\">@ cover_gate</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00110\">haEntity.h:110</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haCover_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haCover.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">haCover.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Home Assistant cover and shade integration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>&quot;</code><br />\n</div>\n<p><a href=\"haCover_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHACover.html\">HACover</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Home Assistant cover and shade integration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haCover_8h_source.html\">haCover.h</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haCover_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haCover.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haCover.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haCover_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _HA_COVER_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _HA_COVER_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haEntity_8h.html\">haEntity.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html\">  119</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classHACover.html\">HACover</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classHAEntity.html\">HAEntity</a> {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160; </div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160; </div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHACover.html#acc7fe4e246ebd9af4ff958447ec78d86\">  126</a></span>&#160;    <a class=\"code\" href=\"classHACover.html#acc7fe4e246ebd9af4ff958447ec78d86\">HACover</a> () {</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a> = JSON_OBJECT_SIZE (10) + 250;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a> = <span class=\"keyword\">new</span> DynamicJsonDocument (<a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a>);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">COVER</a>;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a>] = <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a>;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    };</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160; </div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#add81f3124d1f1f66745798d27b467098\">setDeviceClass</a> (<a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a> devClass);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a20860a2f4181be32c69a583104cf9181\">setPayloadOpen</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160; </div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a372d3fac011d58154daca97311fb5a94\">setPayloadClose</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160; </div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a727afd76b2e852a0e177c5d64fff5894\">setPayloadStop</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160; </div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#ac2f06095a52cd09cf77fb881754bffd4\">setPayloadGoto</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160; </div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42\">setStateOpen</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2\">setStateOpening</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0\">setStateClosed</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69\">setStateClosing</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHACover.html#a2341ee037b2dae238703f15bf95e6ccf\">setStateStopped</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160; </div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">getDiscoveryJson</a> (<span class=\"keywordtype\">char</span>* buffer, <span class=\"keywordtype\">size_t</span> buflen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, DynamicJsonDocument* inputJSON);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160; </div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;    <span class=\"keyword\">static</span> String <a class=\"code\" href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">deviceClassStr</a> (<a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a> sensorClass);</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160; </div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160; </div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160; </div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;<span class=\"preprocessor\">#endif // _HA_COVER_h</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a></div><div class=\"ttdeci\">haCoverClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00102\">haEntity.h:102</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_ab8bc696d21186a4468f8add2c5e8d7c2\"><div class=\"ttname\"><a href=\"classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2\">HACover::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Cover template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00114\">haCover.cpp:114</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">COVER</a></div><div class=\"ttdeci\">@ COVER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00058\">haEntity.h:58</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a4b984a52e4dae0e93fcd2a360be339d2\"><div class=\"ttname\"><a href=\"classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2\">HACover::setStateOpening</a></div><div class=\"ttdeci\">void setStateOpening(const char *payload)</div><div class=\"ttdoc\">The payload that represents the opening state https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00050\">haCover.cpp:50</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_aadb3c5676c00fc0c8b3939888e408d2b\"><div class=\"ttname\"><a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">HAEntity::entityConfig</a></div><div class=\"ttdeci\">DynamicJsonDocument * entityConfig</div><div class=\"ttdoc\">JSON object to be sent to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00138\">haEntity.h:138</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a4bfa8996be4012ccf22cae3385ddcc69\"><div class=\"ttname\"><a href=\"classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69\">HACover::setStateClosing</a></div><div class=\"ttdeci\">void setStateClosing(const char *payload)</div><div class=\"ttdoc\">The payload that represents the closing state https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00062\">haCover.cpp:62</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html\"><div class=\"ttname\"><a href=\"classHACover.html\">HACover</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8h_source.html#l00119\">haCover.h:119</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html\"><div class=\"ttname\"><a href=\"haEntity_8h.html\">haEntity.h</a></div><div class=\"ttdoc\">Defines an entity for Home Assistant autodiscovery.</div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a372d3fac011d58154daca97311fb5a94\"><div class=\"ttname\"><a href=\"classHACover.html#a372d3fac011d58154daca97311fb5a94\">HACover::setPayloadClose</a></div><div class=\"ttdeci\">void setPayloadClose(const char *payload)</div><div class=\"ttdoc\">The command payload that closes the cover https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00026\">haCover.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_aeff41e84aaa1b70df8137cbd05d8ddbe\"><div class=\"ttname\"><a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">HAEntity::capacity</a></div><div class=\"ttdeci\">size_t capacity</div><div class=\"ttdoc\">JSON object memory reservation length.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00134\">haEntity.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a20860a2f4181be32c69a583104cf9181\"><div class=\"ttname\"><a href=\"classHACover.html#a20860a2f4181be32c69a583104cf9181\">HACover::setPayloadOpen</a></div><div class=\"ttdeci\">void setPayloadOpen(const char *payload)</div><div class=\"ttdoc\">The command payload that opens the cover https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00020\">haCover.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_ab9e4ae5934dd24bbd5014ec9eb16e2ef\"><div class=\"ttname\"><a href=\"classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef\">HACover::deviceClassStr</a></div><div class=\"ttdeci\">static String deviceClassStr(haCoverClass_t sensorClass)</div><div class=\"ttdoc\">Gets binary sensor class name from haCoverClass_t https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00192\">haCover.cpp:192</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_add81f3124d1f1f66745798d27b467098\"><div class=\"ttname\"><a href=\"classHACover.html#add81f3124d1f1f66745798d27b467098\">HACover::setDeviceClass</a></div><div class=\"ttdeci\">void setDeviceClass(haCoverClass_t devClass)</div><div class=\"ttdoc\">Define cover class as haCoverClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00013\">haCover.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a727afd76b2e852a0e177c5d64fff5894\"><div class=\"ttname\"><a href=\"classHACover.html#a727afd76b2e852a0e177c5d64fff5894\">HACover::setPayloadStop</a></div><div class=\"ttdeci\">void setPayloadStop(const char *payload)</div><div class=\"ttdoc\">The command payload that stops the cover https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00032\">haCover.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a375fbbd60c980937a4d80c1156fb9d33\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a></div><div class=\"ttdeci\">constexpr auto ha_device_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00023\">haEntity.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a8c9d02fb762b3af1739ba632479473d5\"><div class=\"ttname\"><a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">HAEntity::deviceType</a></div><div class=\"ttdeci\">haDeviceType_t deviceType</div><div class=\"ttdoc\">HomeAssistant entity device type.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00135\">haEntity.h:135</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_acc7fe4e246ebd9af4ff958447ec78d86\"><div class=\"ttname\"><a href=\"classHACover.html#acc7fe4e246ebd9af4ff958447ec78d86\">HACover::HACover</a></div><div class=\"ttdeci\">HACover()</div><div class=\"ttdoc\">Cover constructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8h_source.html#l00126\">haCover.h:126</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_ac2f06095a52cd09cf77fb881754bffd4\"><div class=\"ttname\"><a href=\"classHACover.html#ac2f06095a52cd09cf77fb881754bffd4\">HACover::setPayloadGoto</a></div><div class=\"ttdeci\">void setPayloadGoto(const char *payload)</div><div class=\"ttdoc\">The command that moves the cover to specific position.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00038\">haCover.cpp:38</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a2341ee037b2dae238703f15bf95e6ccf\"><div class=\"ttname\"><a href=\"classHACover.html#a2341ee037b2dae238703f15bf95e6ccf\">HACover::setStateStopped</a></div><div class=\"ttdeci\">void setStateStopped(const char *payload)</div><div class=\"ttdoc\">The payload that represents the stopped state https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00068\">haCover.cpp:68</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_ac7086eaf2411420d3a36df4ba3a55d42\"><div class=\"ttname\"><a href=\"classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42\">HACover::setStateOpen</a></div><div class=\"ttdeci\">void setStateOpen(const char *payload)</div><div class=\"ttdoc\">The payload that represents the open state https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00044\">haCover.cpp:44</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html\"><div class=\"ttname\"><a href=\"classHAEntity.html\">HAEntity</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00132\">haEntity.h:132</a></div></div>\n<div class=\"ttc\" id=\"aclassHACover_html_a7caf15ccd3d71002c83f67ef65e814d0\"><div class=\"ttname\"><a href=\"classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0\">HACover::setStateClosed</a></div><div class=\"ttdeci\">void setStateClosed(const char *payload)</div><div class=\"ttdoc\">The payload that represents the closed state https://www.home-assistant.io/integrations/cover....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haCover_8cpp_source.html#l00056\">haCover.cpp:56</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haEntity_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haEntity.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">haEntity.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Defines an entity for Home Assistant autodiscovery.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>&quot;</code><br />\n<code>#include &lt;ArduinoJson.h&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>&gt;</code><br />\n<code>#include &lt;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&gt;</code><br />\n</div>\n<p><a href=\"haEntity_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHAEntity.html\">HAEntity</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:aa0743062e1533ced64df39be6177d76d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762\">ALARM_PANEL</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">BINARY_SENSOR</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956\">CAMERA</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">COVER</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c\">DEVICE_TRACKER</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">DEVICE_TRIGGER</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73\">FAN</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2\">HVAC</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb\">LIGHT</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48\">LOCK</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4\">SCENE</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">SENSOR</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">SWITCH</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607\">TAG_SCANNER</a>, \n<a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f\">VACUUM</a>\n<br />\n }</td></tr>\n<tr class=\"separator:aa0743062e1533ced64df39be6177d76d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5e77b90b0b440c9d440d4912c1c0c3e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\">bs_none</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\">bs_battery</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\">bs_battery_charging</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\">bs_cold</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\">bs_connectivity</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\">bs_door</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\">bs_garage_door</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\">bs_gas</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\">bs_heat</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\">bs_light</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\">bs_lock</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\">bs_moisture</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\">bs_motion</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\">bs_moving</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\">bs_occupancy</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\">bs_opening</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\">bs_plug</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\">bs_power</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\">bs_presence</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\">bs_problem</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\">bs_safety</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\">bs_smoke</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\">bs_sound</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\">bs_vibration</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\">bs_window</a>\n<br />\n }</td></tr>\n<tr class=\"separator:a5e77b90b0b440c9d440d4912c1c0c3e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4068d7314037bd1d4d5b24c9cf6f8e14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\">cover_none</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\">cover_awning</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\">cover_blind</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\">cover_curtain</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\">cover_damper</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\">cover_door</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\">cover_garage</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\">cover_gate</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\">cover_shade</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\">cover_shutter</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\">cover_window</a>\n<br />\n }</td></tr>\n<tr class=\"separator:a4068d7314037bd1d4d5b24c9cf6f8e14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a69d83255396b1bd9a325fffa797f77c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\">sensor_none</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\">sensor_battery</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\">sensor_current</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\">sensor_energy</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\">sensor_humidity</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\">sensor_illuminance</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\">sensor_signal_strength</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\">sensor_temperature</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\">sensor_power</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\">sensor_power_factor</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\">sensor_pressure</a>, \n<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\">sensor_timestamp</a>, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\">sensor_voltage</a>\n<br />\n }</td></tr>\n<tr class=\"separator:a69d83255396b1bd9a325fffa797f77c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a375fbbd60c980937a4d80c1156fb9d33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a> = &quot;type&quot;</td></tr>\n<tr class=\"separator:a375fbbd60c980937a4d80c1156fb9d33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aebdcd9a166f413152e13a2d85d47d3a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a> = &quot;dev_cla&quot;</td></tr>\n<tr class=\"separator:aebdcd9a166f413152e13a2d85d47d3a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae7ffd524cbd915c942359b0f6abe1df5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a> = &quot;pl_on&quot;</td></tr>\n<tr class=\"separator:ae7ffd524cbd915c942359b0f6abe1df5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a401afaae50f1f853db98f8398b921d5a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a> = &quot;pl_off&quot;</td></tr>\n<tr class=\"separator:a401afaae50f1f853db98f8398b921d5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a55797940423863b288e6c60755873026\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a> = &quot;val&quot;</td></tr>\n<tr class=\"separator:a55797940423863b288e6c60755873026\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad04e2a8059ebfefb02e98fb3524276c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a> = &quot;val_tpl&quot;</td></tr>\n<tr class=\"separator:ad04e2a8059ebfefb02e98fb3524276c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6cdc4acd13954859318b6f95243d5694\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a> = &quot;exp_aft&quot;</td></tr>\n<tr class=\"separator:a6cdc4acd13954859318b6f95243d5694\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a449cf1be60eb0a8a34960fdf8c23a880\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880\">ha_payload_open</a> = &quot;pl_open&quot;</td></tr>\n<tr class=\"separator:a449cf1be60eb0a8a34960fdf8c23a880\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a244cdb583a7f830630583998a8e840c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a244cdb583a7f830630583998a8e840c2\">ha_payload_close</a> = &quot;pl_cls&quot;</td></tr>\n<tr class=\"separator:a244cdb583a7f830630583998a8e840c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac28afc4ec8c1f31ce44d297789c575d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6\">ha_payload_stop</a> = &quot;pl_stop&quot;</td></tr>\n<tr class=\"separator:ac28afc4ec8c1f31ce44d297789c575d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af29b583e27925f5bb557695a24e34874\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#af29b583e27925f5bb557695a24e34874\">ha_set_position_template</a> = &quot;set_pos_tpl&quot;</td></tr>\n<tr class=\"separator:af29b583e27925f5bb557695a24e34874\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac4777728d51f1f44cb664a1afdd0fe75\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#ac4777728d51f1f44cb664a1afdd0fe75\">ha_position_open</a> = &quot;pos_open&quot;</td></tr>\n<tr class=\"separator:ac4777728d51f1f44cb664a1afdd0fe75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a05ac358789f765b6277d403be15765ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a05ac358789f765b6277d403be15765ae\">ha_position_closed</a> = &quot;pos_clsd&quot;</td></tr>\n<tr class=\"separator:a05ac358789f765b6277d403be15765ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7adb03c6d78cf03d69a6d01bbfdc7712\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712\">ha_payload_goto</a> = &quot;pl_goto&quot;</td></tr>\n<tr class=\"separator:a7adb03c6d78cf03d69a6d01bbfdc7712\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6353607c8cf0175f0c64dde2848e8d14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14\">ha_payload</a> = &quot;pl&quot;</td></tr>\n<tr class=\"separator:a6353607c8cf0175f0c64dde2848e8d14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afb9503f780f913e1ca94900da8723da7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#afb9503f780f913e1ca94900da8723da7\">ha_state_open</a> = &quot;stat_open&quot;</td></tr>\n<tr class=\"separator:afb9503f780f913e1ca94900da8723da7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a536f1579f3c3216e432bb8c90af908f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3\">ha_state_opening</a> = &quot;stat_opening&quot;</td></tr>\n<tr class=\"separator:a536f1579f3c3216e432bb8c90af908f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6e7e453ab4f0a09c4041b577af62773d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d\">ha_state_closed</a> = &quot;stat_clsd&quot;</td></tr>\n<tr class=\"separator:a6e7e453ab4f0a09c4041b577af62773d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:affa1a278c35b3323dd830ac3a2195d2f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f\">ha_state_closing</a> = &quot;stat_closing&quot;</td></tr>\n<tr class=\"separator:affa1a278c35b3323dd830ac3a2195d2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa16bd80cd18d74b5613df907fb42436b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b\">ha_state_stopped</a> = &quot;stat_stopped&quot;</td></tr>\n<tr class=\"separator:aa16bd80cd18d74b5613df907fb42436b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a9f73e9dfb1de4078c76f6670d1c8b46a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">ha_state_on</a> = &quot;stat_on&quot;</td></tr>\n<tr class=\"separator:a9f73e9dfb1de4078c76f6670d1c8b46a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2fe6fbc4270c94da4cafb0cbb9378230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">ha_state_off</a> = &quot;stat_off&quot;</td></tr>\n<tr class=\"separator:a2fe6fbc4270c94da4cafb0cbb9378230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a510b5d3df2d7a28a54196b2441fdb270\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">ha_off_delay</a> = &quot;off_dly&quot;</td></tr>\n<tr class=\"separator:a510b5d3df2d7a28a54196b2441fdb270\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af69343b9e51fbd195d5964407594f653\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#af69343b9e51fbd195d5964407594f653\">ha_unit_of_measurement</a> = &quot;unit_of_meas&quot;</td></tr>\n<tr class=\"separator:af69343b9e51fbd195d5964407594f653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a03ffb2c860c7276dca38abdca4423f16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a> = &quot;nmsfx&quot;</td></tr>\n<tr class=\"separator:a03ffb2c860c7276dca38abdca4423f16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1af598a0ee0d299624cef6b4b61b6ba6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a> = &quot;attr&quot;</td></tr>\n<tr class=\"separator:a1af598a0ee0d299624cef6b4b61b6ba6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0102b90994b2b8c9c461faf7a13d453\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a> = &quot;ttype&quot;</td></tr>\n<tr class=\"separator:aa0102b90994b2b8c9c461faf7a13d453\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a79b008a5a9f249d1e6fd72a710636ca7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr auto&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a> = &quot;tstype&quot;</td></tr>\n<tr class=\"separator:a79b008a5a9f249d1e6fd72a710636ca7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Defines an entity for Home Assistant autodiscovery. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin <pre class=\"fragment\">   https://www.home-assistant.io/docs/mqtt/discovery/\n</pre> </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n</div><h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5e77b90b0b440c9d440d4912c1c0c3e7\">&#9670;&nbsp;</a></span>haBinarySensorClass_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\"></a>bs_none&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\"></a>bs_battery&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\"></a>bs_battery_charging&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\"></a>bs_cold&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\"></a>bs_connectivity&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\"></a>bs_door&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\"></a>bs_garage_door&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\"></a>bs_gas&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\"></a>bs_heat&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\"></a>bs_light&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\"></a>bs_lock&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\"></a>bs_moisture&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\"></a>bs_motion&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\"></a>bs_moving&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\"></a>bs_occupancy&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\"></a>bs_opening&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\"></a>bs_plug&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\"></a>bs_power&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\"></a>bs_presence&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\"></a>bs_problem&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\"></a>bs_safety&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\"></a>bs_smoke&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\"></a>bs_sound&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\"></a>bs_vibration&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\"></a>bs_window&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00073\">73</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4068d7314037bd1d4d5b24c9cf6f8e14\">&#9670;&nbsp;</a></span>haCoverClass_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\"></a>cover_none&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\"></a>cover_awning&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\"></a>cover_blind&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\"></a>cover_curtain&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\"></a>cover_damper&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\"></a>cover_door&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\"></a>cover_garage&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\"></a>cover_gate&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\"></a>cover_shade&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\"></a>cover_shutter&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\"></a>cover_window&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00102\">102</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa0743062e1533ced64df39be6177d76d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa0743062e1533ced64df39be6177d76d\">&#9670;&nbsp;</a></span>haDeviceType_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\"></a>UNDEFINED&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762\"></a>ALARM_PANEL&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\"></a>BINARY_SENSOR&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956\"></a>CAMERA&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\"></a>COVER&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c\"></a>DEVICE_TRACKER&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\"></a>DEVICE_TRIGGER&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73\"></a>FAN&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2\"></a>HVAC&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb\"></a>LIGHT&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48\"></a>LOCK&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4\"></a>SCENE&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\"></a>SENSOR&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\"></a>SWITCH&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607\"></a>TAG_SCANNER&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f\"></a>VACUUM&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00053\">53</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a69d83255396b1bd9a325fffa797f77c2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a69d83255396b1bd9a325fffa797f77c2\">&#9670;&nbsp;</a></span>haSensorClass_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\"></a>sensor_none&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\"></a>sensor_battery&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\"></a>sensor_current&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\"></a>sensor_energy&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\"></a>sensor_humidity&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\"></a>sensor_illuminance&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\"></a>sensor_signal_strength&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\"></a>sensor_temperature&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\"></a>sensor_power&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\"></a>sensor_power_factor&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\"></a>sensor_pressure&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\"></a>sensor_timestamp&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\"></a>sensor_voltage&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00116\">116</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a1af598a0ee0d299624cef6b4b61b6ba6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1af598a0ee0d299624cef6b4b61b6ba6\">&#9670;&nbsp;</a></span>ha_allow_attrib</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_allow_attrib = &quot;attr&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00048\">48</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aebdcd9a166f413152e13a2d85d47d3a3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aebdcd9a166f413152e13a2d85d47d3a3\">&#9670;&nbsp;</a></span>ha_device_class</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_device_class = &quot;dev_cla&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00024\">24</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a375fbbd60c980937a4d80c1156fb9d33\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a375fbbd60c980937a4d80c1156fb9d33\">&#9670;&nbsp;</a></span>ha_device_type</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_device_type = &quot;type&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00023\">23</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6cdc4acd13954859318b6f95243d5694\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6cdc4acd13954859318b6f95243d5694\">&#9670;&nbsp;</a></span>ha_expiration</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_expiration = &quot;exp_aft&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00029\">29</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a03ffb2c860c7276dca38abdca4423f16\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a03ffb2c860c7276dca38abdca4423f16\">&#9670;&nbsp;</a></span>ha_name_sufix</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_name_sufix = &quot;nmsfx&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00047\">47</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a510b5d3df2d7a28a54196b2441fdb270\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a510b5d3df2d7a28a54196b2441fdb270\">&#9670;&nbsp;</a></span>ha_off_delay</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_off_delay = &quot;off_dly&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00045\">45</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6353607c8cf0175f0c64dde2848e8d14\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6353607c8cf0175f0c64dde2848e8d14\">&#9670;&nbsp;</a></span>ha_payload</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_payload = &quot;pl&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00037\">37</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a244cdb583a7f830630583998a8e840c2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a244cdb583a7f830630583998a8e840c2\">&#9670;&nbsp;</a></span>ha_payload_close</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_payload_close = &quot;pl_cls&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00031\">31</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7adb03c6d78cf03d69a6d01bbfdc7712\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7adb03c6d78cf03d69a6d01bbfdc7712\">&#9670;&nbsp;</a></span>ha_payload_goto</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_payload_goto = &quot;pl_goto&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00036\">36</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a401afaae50f1f853db98f8398b921d5a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a401afaae50f1f853db98f8398b921d5a\">&#9670;&nbsp;</a></span>ha_payload_off</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_payload_off = &quot;pl_off&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00026\">26</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae7ffd524cbd915c942359b0f6abe1df5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae7ffd524cbd915c942359b0f6abe1df5\">&#9670;&nbsp;</a></span>ha_payload_on</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_payload_on = &quot;pl_on&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00025\">25</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a449cf1be60eb0a8a34960fdf8c23a880\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a449cf1be60eb0a8a34960fdf8c23a880\">&#9670;&nbsp;</a></span>ha_payload_open</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_payload_open = &quot;pl_open&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00030\">30</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac28afc4ec8c1f31ce44d297789c575d6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac28afc4ec8c1f31ce44d297789c575d6\">&#9670;&nbsp;</a></span>ha_payload_stop</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_payload_stop = &quot;pl_stop&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00032\">32</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a05ac358789f765b6277d403be15765ae\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a05ac358789f765b6277d403be15765ae\">&#9670;&nbsp;</a></span>ha_position_closed</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_position_closed = &quot;pos_clsd&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00035\">35</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ac4777728d51f1f44cb664a1afdd0fe75\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ac4777728d51f1f44cb664a1afdd0fe75\">&#9670;&nbsp;</a></span>ha_position_open</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_position_open = &quot;pos_open&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00034\">34</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af29b583e27925f5bb557695a24e34874\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af29b583e27925f5bb557695a24e34874\">&#9670;&nbsp;</a></span>ha_set_position_template</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_set_position_template = &quot;set_pos_tpl&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00033\">33</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6e7e453ab4f0a09c4041b577af62773d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6e7e453ab4f0a09c4041b577af62773d\">&#9670;&nbsp;</a></span>ha_state_closed</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_state_closed = &quot;stat_clsd&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00040\">40</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"affa1a278c35b3323dd830ac3a2195d2f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#affa1a278c35b3323dd830ac3a2195d2f\">&#9670;&nbsp;</a></span>ha_state_closing</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_state_closing = &quot;stat_closing&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00041\">41</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2fe6fbc4270c94da4cafb0cbb9378230\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2fe6fbc4270c94da4cafb0cbb9378230\">&#9670;&nbsp;</a></span>ha_state_off</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_state_off = &quot;stat_off&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00044\">44</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a9f73e9dfb1de4078c76f6670d1c8b46a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9f73e9dfb1de4078c76f6670d1c8b46a\">&#9670;&nbsp;</a></span>ha_state_on</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_state_on = &quot;stat_on&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00043\">43</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"afb9503f780f913e1ca94900da8723da7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afb9503f780f913e1ca94900da8723da7\">&#9670;&nbsp;</a></span>ha_state_open</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_state_open = &quot;stat_open&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00038\">38</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a536f1579f3c3216e432bb8c90af908f3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a536f1579f3c3216e432bb8c90af908f3\">&#9670;&nbsp;</a></span>ha_state_opening</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_state_opening = &quot;stat_opening&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00039\">39</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa16bd80cd18d74b5613df907fb42436b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa16bd80cd18d74b5613df907fb42436b\">&#9670;&nbsp;</a></span>ha_state_stopped</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_state_stopped = &quot;stat_stopped&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00042\">42</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a79b008a5a9f249d1e6fd72a710636ca7\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a79b008a5a9f249d1e6fd72a710636ca7\">&#9670;&nbsp;</a></span>ha_subtype</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_subtype = &quot;tstype&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00050\">50</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa0102b90994b2b8c9c461faf7a13d453\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa0102b90994b2b8c9c461faf7a13d453\">&#9670;&nbsp;</a></span>ha_type</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_type = &quot;ttype&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00049\">49</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af69343b9e51fbd195d5964407594f653\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af69343b9e51fbd195d5964407594f653\">&#9670;&nbsp;</a></span>ha_unit_of_measurement</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_unit_of_measurement = &quot;unit_of_meas&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00046\">46</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a55797940423863b288e6c60755873026\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a55797940423863b288e6c60755873026\">&#9670;&nbsp;</a></span>ha_value_key</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_value_key = &quot;val&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00027\">27</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad04e2a8059ebfefb02e98fb3524276c2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad04e2a8059ebfefb02e98fb3524276c2\">&#9670;&nbsp;</a></span>ha_value_template</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">constexpr auto ha_value_template = &quot;val_tpl&quot;</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">constexpr</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haEntity_8h_source.html#l00028\">28</a> of file <a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haEntity_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haEntity.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haEntity.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haEntity_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#ifndef _HA_ENTITY_h</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#define _HA_ENTITY_h</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160; </div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160; </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;ArduinoJson.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">   23</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a> = <span class=\"stringliteral\">&quot;type&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">   24</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a> = <span class=\"stringliteral\">&quot;dev_cla&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">   25</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a> = <span class=\"stringliteral\">&quot;pl_on&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">   26</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a> = <span class=\"stringliteral\">&quot;pl_off&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">   27</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a> = <span class=\"stringliteral\">&quot;val&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">   28</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a> = <span class=\"stringliteral\">&quot;val_tpl&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">   29</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a> = <span class=\"stringliteral\">&quot;exp_aft&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880\">   30</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880\">ha_payload_open</a> = <span class=\"stringliteral\">&quot;pl_open&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a244cdb583a7f830630583998a8e840c2\">   31</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a244cdb583a7f830630583998a8e840c2\">ha_payload_close</a> = <span class=\"stringliteral\">&quot;pl_cls&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6\">   32</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6\">ha_payload_stop</a> = <span class=\"stringliteral\">&quot;pl_stop&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#af29b583e27925f5bb557695a24e34874\">   33</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#af29b583e27925f5bb557695a24e34874\">ha_set_position_template</a> = <span class=\"stringliteral\">&quot;set_pos_tpl&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#ac4777728d51f1f44cb664a1afdd0fe75\">   34</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#ac4777728d51f1f44cb664a1afdd0fe75\">ha_position_open</a> = <span class=\"stringliteral\">&quot;pos_open&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a05ac358789f765b6277d403be15765ae\">   35</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a05ac358789f765b6277d403be15765ae\">ha_position_closed</a> = <span class=\"stringliteral\">&quot;pos_clsd&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712\">   36</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712\">ha_payload_goto</a> = <span class=\"stringliteral\">&quot;pl_goto&quot;</span>; <span class=\"comment\">// custom</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14\">   37</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14\">ha_payload</a> = <span class=\"stringliteral\">&quot;pl&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#afb9503f780f913e1ca94900da8723da7\">   38</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#afb9503f780f913e1ca94900da8723da7\">ha_state_open</a> = <span class=\"stringliteral\">&quot;stat_open&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3\">   39</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3\">ha_state_opening</a> = <span class=\"stringliteral\">&quot;stat_opening&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d\">   40</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d\">ha_state_closed</a> = <span class=\"stringliteral\">&quot;stat_clsd&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f\">   41</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f\">ha_state_closing</a> = <span class=\"stringliteral\">&quot;stat_closing&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b\">   42</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b\">ha_state_stopped</a> = <span class=\"stringliteral\">&quot;stat_stopped&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">   43</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">ha_state_on</a> = <span class=\"stringliteral\">&quot;stat_on&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">   44</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">ha_state_off</a> = <span class=\"stringliteral\">&quot;stat_off&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">   45</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">ha_off_delay</a> = <span class=\"stringliteral\">&quot;off_dly&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#af69343b9e51fbd195d5964407594f653\">   46</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#af69343b9e51fbd195d5964407594f653\">ha_unit_of_measurement</a> = <span class=\"stringliteral\">&quot;unit_of_meas&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">   47</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a> = <span class=\"stringliteral\">&quot;nmsfx&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">   48</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a> = <span class=\"stringliteral\">&quot;attr&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">   49</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a> = <span class=\"stringliteral\">&quot;ttype&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">   50</a></span>&#160;constexpr <span class=\"keyword\">auto</span> <a class=\"code\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a> = <span class=\"stringliteral\">&quot;tstype&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">   53</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> {</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">   54</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a>,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762\">   55</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762\">ALARM_PANEL</a>,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">   56</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">BINARY_SENSOR</a>,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956\">   57</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956\">CAMERA</a>,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">   58</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">COVER</a>,</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c\">   59</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c\">DEVICE_TRACKER</a>,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">   60</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">DEVICE_TRIGGER</a>,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73\">   61</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73\">FAN</a>,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2\">   62</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2\">HVAC</a>,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb\">   63</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb\">LIGHT</a>,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48\">   64</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48\">LOCK</a>,</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4\">   65</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4\">SCENE</a>,</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">   66</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">SENSOR</a>,</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">   67</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">SWITCH</a>,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607\">   68</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607\">TAG_SCANNER</a>,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f\">VACUUM</a></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f\">   70</a></span>&#160;} <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a>; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160; </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160; </div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">   73</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\">   74</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\">bs_none</a>,             <span class=\"comment\">// Generic on / off.This is the defaultand doesn’t need to be set.</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\">   75</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\">bs_battery</a>,          <span class=\"comment\">// on means low,                     off means normal</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\">   76</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\">bs_battery_charging</a>, <span class=\"comment\">// on means charging,                off means not charging</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\">   77</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\">bs_cold</a>,             <span class=\"comment\">// on means cold,                    off means normal</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\">   78</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\">bs_connectivity</a>,     <span class=\"comment\">// on means connected,               off means disconnected</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\">   79</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\">bs_door</a>,             <span class=\"comment\">// on means open,                    off means closed</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\">   80</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\">bs_garage_door</a>,      <span class=\"comment\">// on means open,                    off means closed</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\">   81</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\">bs_gas</a>,              <span class=\"comment\">// on means gas detected,            off means no gas (clear)</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\">   82</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\">bs_heat</a>,             <span class=\"comment\">// on means hot,                     off means normal</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\">   83</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\">bs_light</a>,            <span class=\"comment\">// on means light detected,          off means no light</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\">   84</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\">bs_lock</a>,             <span class=\"comment\">// on means open (unlocked),         off means closed (locked)</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\">   85</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\">bs_moisture</a>,         <span class=\"comment\">// on means moisture detected (wet), off means no moisture (dry)</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\">   86</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\">bs_motion</a>,           <span class=\"comment\">// on means motion detected,         off means no motion (clear)</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\">   87</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\">bs_moving</a>,           <span class=\"comment\">// on means moving,                  off means not moving (stopped)</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\">   88</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\">bs_occupancy</a>,        <span class=\"comment\">// on means occupied,                off means not occupied (clear)</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\">   89</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\">bs_opening</a>,          <span class=\"comment\">// on means open,                    off means closed</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\">   90</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\">bs_plug</a>,             <span class=\"comment\">// on means device is plugged in,    off means device is unplugged</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\">   91</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\">bs_power</a>,            <span class=\"comment\">// on means power detected,          off means no power</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\">   92</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\">bs_presence</a>,         <span class=\"comment\">// on means home,                    off means away</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\">   93</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\">bs_problem</a>,          <span class=\"comment\">// on means problem detected,        off means no problem (OK)</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\">   94</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\">bs_safety</a>,           <span class=\"comment\">// on means unsafe,                  off means safe</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\">   95</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\">bs_smoke</a>,            <span class=\"comment\">// on means smoke detected,          off means no smoke (clear)</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\">   96</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\">bs_sound</a>,            <span class=\"comment\">// on means sound detected,          off means no sound (clear)</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\">   97</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\">bs_vibration</a>,        <span class=\"comment\">// on means vibration detected,      off means no vibration (clear)</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\">bs_window</a>            <span class=\"comment\">// on means open,                    off means closed</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\">   99</a></span>&#160;} <a class=\"code\" href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a>; </div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160; </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">  102</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> {</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\">  103</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\">cover_none</a>,       <span class=\"comment\">// Generic cover. This is the default and doesn’t need to be set</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\">  104</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\">cover_awning</a>,     <span class=\"comment\">// Control of an awning, such as an exterior retractable window, door, or patio cover</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\">  105</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\">cover_blind</a>,      <span class=\"comment\">// Control of blinds, which are linked slats that expand or collapse to cover an opening or may be tilted to partially covering an opening, such as window blinds</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\">  106</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\">cover_curtain</a>,    <span class=\"comment\">// Control of curtains or drapes, which is often fabric hung above a window or door that can be drawn open</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\">  107</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\">cover_damper</a>,     <span class=\"comment\">// Control of a mechanical damper that reduces airflow, sound, or light</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\">  108</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\">cover_door</a>,       <span class=\"comment\">// Control of a door or gate that provides access to an area</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\">  109</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\">cover_garage</a>,     <span class=\"comment\">// Control of a garage door that provides access to a garage</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\">  110</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\">cover_gate</a>,       <span class=\"comment\">// Control of a gate. Gates are found outside of a structure and are typically part of a fence</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\">  111</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\">cover_shade</a>,      <span class=\"comment\">// Control of shades, which are a continuous plane of material or connected cells that expanded or collapsed over an opening, such as window shades</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\">  112</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\">cover_shutter</a>,    <span class=\"comment\">// Control of shutters, which are linked slats that swing out / in to covering an opening or may be tilted to partially cover an opening, such as indoor or exterior window shutters</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\">cover_window</a>      <span class=\"comment\">// Control of a physical window that opens and closes or may tilt</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\">  114</a></span>&#160;} <a class=\"code\" href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a>; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160; </div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">  116</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> {</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\">  117</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\">sensor_none</a>,            <span class=\"comment\">// Generic sensor. This is the default and doesn’t need to be set.</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\">  118</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\">sensor_battery</a>,         <span class=\"comment\">// Percentage of battery that is left.</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\">  119</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\">sensor_current</a>,         <span class=\"comment\">// Current in A.</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\">  120</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\">sensor_energy</a>,          <span class=\"comment\">// Energy in Wh or kWh.</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\">  121</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\">sensor_humidity</a>,        <span class=\"comment\">// Percentage of humidity in the air.</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\">  122</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\">sensor_illuminance</a>,     <span class=\"comment\">// The current light level in lx or lm.</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\">  123</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\">sensor_signal_strength</a>, <span class=\"comment\">// Signal strength in dB or dBm.</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\">  124</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\">sensor_temperature</a>,     <span class=\"comment\">// Temperature in °C or °F.</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\">  125</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\">sensor_power</a>,           <span class=\"comment\">// Power in W or kW.</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\">  126</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\">sensor_power_factor</a>,    <span class=\"comment\">// Power factor in % .</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\">  127</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\">sensor_pressure</a>,        <span class=\"comment\">// Pressure in hPa or mbar.</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\">  128</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\">sensor_timestamp</a>,       <span class=\"comment\">// Datetime object or timestamp string (ISO 8601).</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\"><a class=\"line\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\">  129</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\">sensor_voltage</a>,         <span class=\"comment\">// Voltage in V.</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;} <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a>;  </div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160; </div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html\">  132</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classHAEntity.html\">HAEntity</a> {</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">  134</a></span>&#160;    <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a>; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">  135</a></span>&#160;    <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a>; </div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    <span class=\"comment\">// uint expiration = 0; ///&lt; @brief Entity expiration parameter</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    <span class=\"comment\">//char name[20]; ///&lt; @brief Entity name</span></div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">  138</a></span>&#160;    DynamicJsonDocument* <a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a>; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">  143</a></span>&#160;    <a class=\"code\" href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity</a> () {}</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160; </div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160; </div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">  153</a></span>&#160;    <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">getAnounceMessage</a> (<span class=\"keywordtype\">int</span> bufferlen, uint8_t* buffer) {</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#if DEBUG_LEVEL &gt;= WARN</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keywordtype\">char</span>* output;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        <span class=\"keywordtype\">size_t</span> json_len = measureJsonPretty (*<a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a>) + 1;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        output = (<span class=\"keywordtype\">char</span>*)malloc (json_len);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        serializeJsonPretty (*<a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a>, output, json_len);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160; </div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;JSON message\\n%s&quot;</span>, output);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        free (output);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160; </div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        </div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        <span class=\"keywordflow\">if</span> (!buffer) {</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Buffer is null&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;            <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"comment\">//message = buffer;</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        <span class=\"keywordtype\">int</span> len = measureMsgPack (*<a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a>);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160; </div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        <span class=\"keywordflow\">if</span> (len &gt; <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3\">MAX_DATA_PAYLOAD_LENGTH</a>) {</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Too long message. Reduce HA anounce options&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;            <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160; </div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        <span class=\"keywordflow\">if</span> (bufferlen &lt; len) {</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Buffer is not big enough&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;            <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160; </div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        len = serializeMsgPack (*<a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a>, buffer, bufferlen);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Msg Pack size: %u&quot;</span>, len);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160; </div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        DEBUG_VERBOSE (<span class=\"stringliteral\">&quot;%s&quot;</span>, <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (buffer, len));</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160; </div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"keywordflow\">if</span> (<a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a>) {</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;            <span class=\"keyword\">delete</span> (<a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a>);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;            <a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a> = NULL;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;            DEBUG_DBG (<span class=\"stringliteral\">&quot;Deleted JSON&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160; </div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keywordflow\">return</span> len;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">  200</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">setNameSufix</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;       <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;           (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;       }</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160; </div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">  209</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">allowSendAttributes</a> () {</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a>] = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160; </div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">  217</a></span>&#160;    <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">measureMessage</a> () {</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;        <span class=\"keywordflow\">return</span> measureMsgPack (*<a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a>) + 1;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160; </div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">  227</a></span>&#160;    <span class=\"keyword\">static</span> String <a class=\"code\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a> (<a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType) {</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;        <span class=\"keywordflow\">switch</span> (entityType) {</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762\">ALARM_PANEL</a>:</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;alarm_control_panel&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">BINARY_SENSOR</a>:</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;binary_sensor&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956\">CAMERA</a>:</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;camera&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">COVER</a>:</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;cover&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c\">DEVICE_TRACKER</a>:</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;device_tracker&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">DEVICE_TRIGGER</a>:</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;device_automation&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73\">FAN</a>:</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;fan&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2\">HVAC</a>:</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;climate&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb\">LIGHT</a>:</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;light&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48\">LOCK</a>:</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;lock&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4\">SCENE</a>:</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;scene&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">SENSOR</a>:</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;sensor&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">SWITCH</a>:</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;switch&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607\">TAG_SCANNER</a>:</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;tag&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f\">VACUUM</a>:</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;vacuum&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160; </div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;    <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"comment\">        Discovery configuration topic template</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"comment\">        &lt;hass_prefix&gt;/&lt;device_type&gt;/&lt;node_name&gt;/config</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"comment\">    */</span></div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">  277</a></span>&#160;    <span class=\"keyword\">static</span> String <a class=\"code\" href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">getDiscoveryTopic</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* hassPrefix, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a> entityType, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nameSuffix = NULL) {</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;        String output;</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160; </div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        <span class=\"keywordflow\">if</span> (!hassPrefix) {</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Empty prefix&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        <span class=\"keywordflow\">if</span> (!nodeName) {</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;            DEBUG_WARN (<span class=\"stringliteral\">&quot;Empty node name&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160; </div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"keywordflow\">if</span> (nameSuffix) {</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;            output = String (hassPrefix) + <span class=\"stringliteral\">&quot;/&quot;</span> + <a class=\"code\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a> (entityType) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;_&quot;</span> + String(nameSuffix) + <span class=\"stringliteral\">&quot;/config&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;            output = String (hassPrefix) + <span class=\"stringliteral\">&quot;/&quot;</span> + <a class=\"code\" href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">deviceTypeStr</a> (entityType) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/config&quot;</span>;        </div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160; </div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        <span class=\"keywordflow\">return</span> output;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160; </div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160; </div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160; </div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160; </div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;<span class=\"preprocessor\">#endif // _HA_ENTITY_h</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14\">haCoverClass_t</a></div><div class=\"ttdeci\">haCoverClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00102\">haEntity.h:102</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956\">CAMERA</a></div><div class=\"ttdeci\">@ CAMERA</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00057\">haEntity.h:57</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c\">cover_awning</a></div><div class=\"ttdeci\">@ cover_awning</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00104\">haEntity.h:104</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\">sensor_power_factor</a></div><div class=\"ttdeci\">@ sensor_power_factor</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00126\">haEntity.h:126</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e\">bs_lock</a></div><div class=\"ttdeci\">@ bs_lock</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00084\">haEntity.h:84</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4\">cover_window</a></div><div class=\"ttdeci\">@ cover_window</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00114\">haEntity.h:113</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989\">COVER</a></div><div class=\"ttdeci\">@ COVER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00058\">haEntity.h:58</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690\">bs_power</a></div><div class=\"ttdeci\">@ bs_power</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00091\">haEntity.h:91</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3\">BINARY_SENSOR</a></div><div class=\"ttdeci\">@ BINARY_SENSOR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00056\">haEntity.h:56</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a449cf1be60eb0a8a34960fdf8c23a880\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880\">ha_payload_open</a></div><div class=\"ttdeci\">constexpr auto ha_payload_open</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00030\">haEntity.h:30</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a\">bs_garage_door</a></div><div class=\"ttdeci\">@ bs_garage_door</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00080\">haEntity.h:80</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_ad299ecdb73519da56e2f5439941af544\"><div class=\"ttname\"><a href=\"classHAEntity.html#ad299ecdb73519da56e2f5439941af544\">HAEntity::measureMessage</a></div><div class=\"ttdeci\">size_t measureMessage()</div><div class=\"ttdoc\">Gets needed buffer size for discovery message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00217\">haEntity.h:217</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a05ac358789f765b6277d403be15765ae\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a05ac358789f765b6277d403be15765ae\">ha_position_closed</a></div><div class=\"ttdeci\">constexpr auto ha_position_closed</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00035\">haEntity.h:35</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_aadb3c5676c00fc0c8b3939888e408d2b\"><div class=\"ttname\"><a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">HAEntity::entityConfig</a></div><div class=\"ttdeci\">DynamicJsonDocument * entityConfig</div><div class=\"ttdoc\">JSON object to be sent to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00138\">haEntity.h:138</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a\">cover_door</a></div><div class=\"ttdeci\">@ cover_door</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00108\">haEntity.h:108</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">SWITCH</a></div><div class=\"ttdeci\">@ SWITCH</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00067\">haEntity.h:67</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aebdcd9a166f413152e13a2d85d47d3a3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a></div><div class=\"ttdeci\">constexpr auto ha_device_class</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00024\">haEntity.h:24</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_ac28afc4ec8c1f31ce44d297789c575d6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6\">ha_payload_stop</a></div><div class=\"ttdeci\">constexpr auto ha_payload_stop</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00032\">haEntity.h:32</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c\">bs_moisture</a></div><div class=\"ttdeci\">@ bs_moisture</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00085\">haEntity.h:85</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a64140dc1e3e041eafbcd6eca04abb9ef\"><div class=\"ttname\"><a href=\"classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef\">HAEntity::getAnounceMessage</a></div><div class=\"ttdeci\">size_t getAnounceMessage(int bufferlen, uint8_t *buffer)</div><div class=\"ttdoc\">Gets entity anounce message to be sent over EnigmaIOT message.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00153\">haEntity.h:153</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48\">LOCK</a></div><div class=\"ttdeci\">@ LOCK</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00064\">haEntity.h:64</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d\">cover_shade</a></div><div class=\"ttdeci\">@ cover_shade</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00111\">haEntity.h:111</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99\">bs_light</a></div><div class=\"ttdeci\">@ bs_light</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00083\">haEntity.h:83</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb\">LIGHT</a></div><div class=\"ttdeci\">@ LIGHT</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00063\">haEntity.h:63</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7\">haBinarySensorClass_t</a></div><div class=\"ttdeci\">haBinarySensorClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00073\">haEntity.h:73</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_afb9503f780f913e1ca94900da8723da7\"><div class=\"ttname\"><a href=\"haEntity_8h.html#afb9503f780f913e1ca94900da8723da7\">ha_state_open</a></div><div class=\"ttdeci\">constexpr auto ha_state_open</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00038\">haEntity.h:38</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c\">DEVICE_TRACKER</a></div><div class=\"ttdeci\">@ DEVICE_TRACKER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00059\">haEntity.h:59</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae\">bs_cold</a></div><div class=\"ttdeci\">@ bs_cold</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00077\">haEntity.h:77</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a></div><div class=\"ttdoc\">Parameter configuration.</div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114\">bs_presence</a></div><div class=\"ttdeci\">@ bs_presence</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00092\">haEntity.h:92</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_affa1a278c35b3323dd830ac3a2195d2f\"><div class=\"ttname\"><a href=\"haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f\">ha_state_closing</a></div><div class=\"ttdeci\">constexpr auto ha_state_closing</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00041\">haEntity.h:41</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76d\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76d\">haDeviceType_t</a></div><div class=\"ttdeci\">haDeviceType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00053\">haEntity.h:53</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\">sensor_none</a></div><div class=\"ttdeci\">@ sensor_none</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00117\">haEntity.h:117</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2\">HVAC</a></div><div class=\"ttdeci\">@ HVAC</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00062\">haEntity.h:62</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a2fccc769283a5e59b2205fce6c5663c3\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3\">MAX_DATA_PAYLOAD_LENGTH</a></div><div class=\"ttdeci\">static const uint8_t MAX_DATA_PAYLOAD_LENGTH</div><div class=\"ttdoc\">Maximum EnigmaIOT user data payload size.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00022\">EnigmaIoTconfigAdvanced.h:22</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c\">bs_smoke</a></div><div class=\"ttdeci\">@ bs_smoke</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00095\">haEntity.h:95</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_aeff41e84aaa1b70df8137cbd05d8ddbe\"><div class=\"ttname\"><a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">HAEntity::capacity</a></div><div class=\"ttdeci\">size_t capacity</div><div class=\"ttdoc\">JSON object memory reservation length.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00134\">haEntity.h:134</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607\">TAG_SCANNER</a></div><div class=\"ttdeci\">@ TAG_SCANNER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00068\">haEntity.h:68</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208\">cover_curtain</a></div><div class=\"ttdeci\">@ cover_curtain</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00106\">haEntity.h:106</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93\">UNDEFINED</a></div><div class=\"ttdeci\">@ UNDEFINED</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00054\">haEntity.h:54</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a9f73e9dfb1de4078c76f6670d1c8b46a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">ha_state_on</a></div><div class=\"ttdeci\">constexpr auto ha_state_on</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00043\">haEntity.h:43</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27\">bs_battery</a></div><div class=\"ttdeci\">@ bs_battery</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00075\">haEntity.h:75</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17\">bs_safety</a></div><div class=\"ttdeci\">@ bs_safety</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00094\">haEntity.h:94</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047\">bs_occupancy</a></div><div class=\"ttdeci\">@ bs_occupancy</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00088\">haEntity.h:88</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a264a9779679d77db65566233a952100d\"><div class=\"ttname\"><a href=\"classHAEntity.html#a264a9779679d77db65566233a952100d\">HAEntity::getDiscoveryTopic</a></div><div class=\"ttdeci\">static String getDiscoveryTopic(const char *hassPrefix, const char *nodeName, haDeviceType_t entityType, const char *nameSuffix=NULL)</div><div class=\"ttdoc\">Allows Gateway to get discovery message MQTT topic.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00277\">haEntity.h:277</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f\">cover_damper</a></div><div class=\"ttdeci\">@ cover_damper</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00107\">haEntity.h:107</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a6e7e453ab4f0a09c4041b577af62773d\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d\">ha_state_closed</a></div><div class=\"ttdeci\">constexpr auto ha_state_closed</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00040\">haEntity.h:40</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5\">bs_plug</a></div><div class=\"ttdeci\">@ bs_plug</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00090\">haEntity.h:90</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a1e3da7d22fd155a3661f754b9b1f64a3\"><div class=\"ttname\"><a href=\"classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3\">HAEntity::HAEntity</a></div><div class=\"ttdeci\">HAEntity()</div><div class=\"ttdoc\">Default constructor. Needed for inheritance.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00143\">haEntity.h:143</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a1af598a0ee0d299624cef6b4b61b6ba6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a></div><div class=\"ttdeci\">constexpr auto ha_allow_attrib</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00048\">haEntity.h:48</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4\">SCENE</a></div><div class=\"ttdeci\">@ SCENE</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00065\">haEntity.h:65</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a03ffb2c860c7276dca38abdca4423f16\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a></div><div class=\"ttdeci\">constexpr auto ha_name_sufix</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00047\">haEntity.h:47</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609\">bs_motion</a></div><div class=\"ttdeci\">@ bs_motion</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00086\">haEntity.h:86</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3\">cover_shutter</a></div><div class=\"ttdeci\">@ cover_shutter</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00112\">haEntity.h:112</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e\">cover_blind</a></div><div class=\"ttdeci\">@ cover_blind</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00105\">haEntity.h:105</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807\">bs_vibration</a></div><div class=\"ttdeci\">@ bs_vibration</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00097\">haEntity.h:97</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8\">bs_none</a></div><div class=\"ttdeci\">@ bs_none</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00074\">haEntity.h:74</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a6353607c8cf0175f0c64dde2848e8d14\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14\">ha_payload</a></div><div class=\"ttdeci\">constexpr auto ha_payload</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00037\">haEntity.h:37</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a401afaae50f1f853db98f8398b921d5a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a></div><div class=\"ttdeci\">constexpr auto ha_payload_off</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00026\">haEntity.h:26</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\">sensor_temperature</a></div><div class=\"ttdeci\">@ sensor_temperature</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00124\">haEntity.h:124</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e\">cover_none</a></div><div class=\"ttdeci\">@ cover_none</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00103\">haEntity.h:103</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a6cdc4acd13954859318b6f95243d5694\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a></div><div class=\"ttdeci\">constexpr auto ha_expiration</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00029\">haEntity.h:29</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074\">bs_connectivity</a></div><div class=\"ttdeci\">@ bs_connectivity</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00078\">haEntity.h:78</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a79b008a5a9f249d1e6fd72a710636ca7\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a></div><div class=\"ttdeci\">constexpr auto ha_subtype</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00050\">haEntity.h:50</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\">sensor_pressure</a></div><div class=\"ttdeci\">@ sensor_pressure</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00127\">haEntity.h:127</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\">sensor_battery</a></div><div class=\"ttdeci\">@ sensor_battery</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00118\">haEntity.h:118</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a244cdb583a7f830630583998a8e840c2\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a244cdb583a7f830630583998a8e840c2\">ha_payload_close</a></div><div class=\"ttdeci\">constexpr auto ha_payload_close</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00031\">haEntity.h:31</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\">sensor_signal_strength</a></div><div class=\"ttdeci\">@ sensor_signal_strength</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00123\">haEntity.h:123</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf\">bs_sound</a></div><div class=\"ttdeci\">@ bs_sound</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00096\">haEntity.h:96</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\">sensor_illuminance</a></div><div class=\"ttdeci\">@ sensor_illuminance</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00122\">haEntity.h:122</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_ac083c92c7973db1f2b51ede001768f2f\"><div class=\"ttname\"><a href=\"classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f\">HAEntity::deviceTypeStr</a></div><div class=\"ttdeci\">static String deviceTypeStr(haDeviceType_t entityType)</div><div class=\"ttdoc\">Gets entity type string from haDeviceType_t value https://www.home-assistant.io/docs/mqtt/discovery/.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00227\">haEntity.h:227</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_ad04e2a8059ebfefb02e98fb3524276c2\"><div class=\"ttname\"><a href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a></div><div class=\"ttdeci\">constexpr auto ha_value_template</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00028\">haEntity.h:28</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a7adb03c6d78cf03d69a6d01bbfdc7712\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712\">ha_payload_goto</a></div><div class=\"ttdeci\">constexpr auto ha_payload_goto</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00036\">haEntity.h:36</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\">sensor_voltage</a></div><div class=\"ttdeci\">@ sensor_voltage</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00129\">haEntity.h:129</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_ac4777728d51f1f44cb664a1afdd0fe75\"><div class=\"ttname\"><a href=\"haEntity_8h.html#ac4777728d51f1f44cb664a1afdd0fe75\">ha_position_open</a></div><div class=\"ttdeci\">constexpr auto ha_position_open</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00034\">haEntity.h:34</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a2fe6fbc4270c94da4cafb0cbb9378230\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">ha_state_off</a></div><div class=\"ttdeci\">constexpr auto ha_state_off</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00044\">haEntity.h:44</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa16bd80cd18d74b5613df907fb42436b\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b\">ha_state_stopped</a></div><div class=\"ttdeci\">constexpr auto ha_state_stopped</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00042\">haEntity.h:42</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_af69343b9e51fbd195d5964407594f653\"><div class=\"ttname\"><a href=\"haEntity_8h.html#af69343b9e51fbd195d5964407594f653\">ha_unit_of_measurement</a></div><div class=\"ttdeci\">constexpr auto ha_unit_of_measurement</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00046\">haEntity.h:46</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a375fbbd60c980937a4d80c1156fb9d33\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a></div><div class=\"ttdeci\">constexpr auto ha_device_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00023\">haEntity.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a8c9d02fb762b3af1739ba632479473d5\"><div class=\"ttname\"><a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">HAEntity::deviceType</a></div><div class=\"ttdeci\">haDeviceType_t deviceType</div><div class=\"ttdoc\">HomeAssistant entity device type.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00135\">haEntity.h:135</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5\">bs_problem</a></div><div class=\"ttdeci\">@ bs_problem</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00093\">haEntity.h:93</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\">sensor_energy</a></div><div class=\"ttdeci\">@ sensor_energy</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00120\">haEntity.h:120</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">SENSOR</a></div><div class=\"ttdeci\">@ SENSOR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00066\">haEntity.h:66</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_ae7ffd524cbd915c942359b0f6abe1df5\"><div class=\"ttname\"><a href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a></div><div class=\"ttdeci\">constexpr auto ha_payload_on</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00025\">haEntity.h:25</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0102b90994b2b8c9c461faf7a13d453\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a></div><div class=\"ttdeci\">constexpr auto ha_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00049\">haEntity.h:49</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a></div><div class=\"ttdeci\">haSensorClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00116\">haEntity.h:116</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f\">VACUUM</a></div><div class=\"ttdeci\">@ VACUUM</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00070\">haEntity.h:69</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\">sensor_humidity</a></div><div class=\"ttdeci\">@ sensor_humidity</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00121\">haEntity.h:121</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\">sensor_current</a></div><div class=\"ttdeci\">@ sensor_current</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00119\">haEntity.h:119</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\">sensor_power</a></div><div class=\"ttdeci\">@ sensor_power</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00125\">haEntity.h:125</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a1bd8a543ed665f9e48ca47b220123063\"><div class=\"ttname\"><a href=\"classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063\">HAEntity::setNameSufix</a></div><div class=\"ttdeci\">void setNameSufix(const char *payload)</div><div class=\"ttdoc\">Sets name suffix. Used for multi entity nodes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00200\">haEntity.h:200</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe\">bs_door</a></div><div class=\"ttdeci\">@ bs_door</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00079\">haEntity.h:79</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711\">bs_battery_charging</a></div><div class=\"ttdeci\">@ bs_battery_charging</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00076\">haEntity.h:76</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTdebug_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a></div><div class=\"ttdoc\">Auxiliary functions for debugging over Serial.</div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a536f1579f3c3216e432bb8c90af908f3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3\">ha_state_opening</a></div><div class=\"ttdeci\">constexpr auto ha_state_opening</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00039\">haEntity.h:39</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">DEVICE_TRIGGER</a></div><div class=\"ttdeci\">@ DEVICE_TRIGGER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00060\">haEntity.h:60</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\">sensor_timestamp</a></div><div class=\"ttdeci\">@ sensor_timestamp</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00128\">haEntity.h:128</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762\">ALARM_PANEL</a></div><div class=\"ttdeci\">@ ALARM_PANEL</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00055\">haEntity.h:55</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6\">bs_gas</a></div><div class=\"ttdeci\">@ bs_gas</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00081\">haEntity.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a2b81d38a3d72a0848b81f6d240b781da\"><div class=\"ttname\"><a href=\"classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da\">HAEntity::allowSendAttributes</a></div><div class=\"ttdeci\">void allowSendAttributes()</div><div class=\"ttdoc\">Enables registering entity attributes as a json object.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00209\">haEntity.h:209</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a\">bs_window</a></div><div class=\"ttdeci\">@ bs_window</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00099\">haEntity.h:98</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_af29b583e27925f5bb557695a24e34874\"><div class=\"ttname\"><a href=\"haEntity_8h.html#af29b583e27925f5bb557695a24e34874\">ha_set_position_template</a></div><div class=\"ttdeci\">constexpr auto ha_set_position_template</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00033\">haEntity.h:33</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html\"><div class=\"ttname\"><a href=\"classHAEntity.html\">HAEntity</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00132\">haEntity.h:132</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7\">bs_opening</a></div><div class=\"ttdeci\">@ bs_opening</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00089\">haEntity.h:89</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a510b5d3df2d7a28a54196b2441fdb270\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270\">ha_off_delay</a></div><div class=\"ttdeci\">constexpr auto ha_off_delay</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00045\">haEntity.h:45</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1\">cover_garage</a></div><div class=\"ttdeci\">@ cover_garage</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00109\">haEntity.h:109</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd\">bs_heat</a></div><div class=\"ttdeci\">@ bs_heat</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00082\">haEntity.h:82</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d\">bs_moving</a></div><div class=\"ttdeci\">@ bs_moving</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00087\">haEntity.h:87</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73\">FAN</a></div><div class=\"ttdeci\">@ FAN</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00061\">haEntity.h:61</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770\">cover_gate</a></div><div class=\"ttdeci\">@ cover_gate</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00110\">haEntity.h:110</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a55797940423863b288e6c60755873026\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a></div><div class=\"ttdeci\">constexpr auto ha_value_key</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00027\">haEntity.h:27</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haSensor_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haSensor.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haSensor.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Home Assistant sensor integration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"haSensor_8h_source.html\">haSensor.h</a>&quot;</code><br />\n</div>\n<p><a href=\"haSensor_8cpp_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Home Assistant sensor integration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haSensor_8cpp_source.html\">haSensor.cpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haSensor_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haSensor.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haSensor.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haSensor_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haSensor_8h.html\">haSensor.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">   13</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">HASensor::setDeviceClass</a> (<a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a> devClass) {</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;    <span class=\"keywordflow\">if</span> (devClass &gt; <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\">sensor_none</a>) {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        <span class=\"comment\">// DEBUG_WARN (&quot;Set device class to %d&quot;, devClass);</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a>] = devClass;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">   20</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">HASensor::setExpireTime</a> (uint payload) {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">   26</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">HASensor::setUnitOfMeasurement</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#af69343b9e51fbd195d5964407594f653\">ha_unit_of_measurement</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">   32</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">HASensor::setValueField</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160; </div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASensor.html#a41e55b745b034127a7d7a98cb50d4559\">   38</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASensor.html#a41e55b745b034127a7d7a98cb50d4559\">HASensor::setValueTemplate</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160; </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"comment\">/* Discovery JSON template for binary sensor</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"comment\">    &quot;dev_cla&quot;:&lt;device_class&gt;,</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"comment\">    &quot;exp_aft&quot;:&lt;expire_time&gt;,</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"comment\">    &quot;unit_of_meas&quot;:&lt;unit_of_measurement&gt;,</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"comment\">    &quot;val&quot;:&lt;value_field&gt;,</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"comment\">    &quot;nmsfx&quot;:&lt;name_suffix&gt;</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">}</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"comment\">    &quot;name&quot;:&lt;node_name&gt;_&lt;name_suffix&gt;,</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"comment\">    &quot;unique_id&quot;:&lt;node_name&gt;_&lt;name_suffix&gt;,</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"comment\">    &quot;device_class&quot;: &lt;device_class&gt;,</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"comment\">    &quot;expire_after&quot;:&lt;expire_time&gt;,</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"comment\">    &quot;json_attributes_template&quot;:&quot;{{value_json | tojson}}&quot;,</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"comment\">    &quot;json_attributes_topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;,</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"comment\">    &quot;state_topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;,</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"comment\">    &quot;unit_of_measurement&quot;:&lt;unit_of_measurement&gt;,</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"comment\">    &quot;value_template&quot;:&quot;{{value_json.&lt;value_field&gt;}}&quot;</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"comment\">}</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160; </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">   65</a></span>&#160;<span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">HASensor::getDiscoveryJson</a> (<span class=\"keywordtype\">char</span>* buffer, <span class=\"keywordtype\">size_t</span> buflen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, DynamicJsonDocument* inputJSON) {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    <span class=\"comment\">//DynamicJsonDocument inputJSON (1024);</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    DynamicJsonDocument outputJSON (1300);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160; </div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    <span class=\"comment\">//deserializeMsgPack (inputJSON, msgPack, len);</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160; </div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;    <span class=\"keywordflow\">if</span> (!nodeName || !networkName || !inputJSON ) {</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Whrong parameters&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>)) {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;name&quot;</span>] = String (nodeName) + <span class=\"stringliteral\">&quot;_&quot;</span> + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;name&quot;</span>] = nodeName;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>)) {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;unique_id&quot;</span>] = String (nodeName) + <span class=\"stringliteral\">&quot;_&quot;</span> + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;unique_id&quot;</span>] = nodeName;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a>)) {</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;device_class&quot;</span>] = <a class=\"code\" href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">deviceClassStr</a> ((*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a>]);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a>) &amp;&amp; (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a>].is&lt;<span class=\"keywordtype\">int</span>&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;expire_after&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a>].as&lt;<span class=\"keywordtype\">int</span>&gt;();</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;state_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#af69343b9e51fbd195d5964407594f653\">ha_unit_of_measurement</a>)) {</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;unit_of_measurement&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#af69343b9e51fbd195d5964407594f653\">ha_unit_of_measurement</a>];</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a>)) {</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        String templ = ((*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a>]).as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        templ.replace (<span class=\"stringliteral\">&quot;***&quot;</span>, nodeName);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;value_template&quot;</span>].set&lt;String&gt; (templ);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>)) {</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;value_template&quot;</span>] = String (<span class=\"stringliteral\">&quot;{{value_json.&quot;</span>) + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>].as&lt;String&gt; () + String (<span class=\"stringliteral\">&quot;}}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;value_template&quot;</span>] = <span class=\"stringliteral\">&quot;{{value_json.value}}&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a>) &amp;&amp; (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a>].as&lt;<span class=\"keywordtype\">bool</span>&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;json_attributes_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;json_attributes_template&quot;</span>] = <span class=\"stringliteral\">&quot;{{value_json | tojson}}&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160; </div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    <span class=\"keywordtype\">size_t</span> jsonLen = measureJson (outputJSON);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160; </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    <span class=\"keywordflow\">if</span> (jsonLen &gt; buflen) {</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Too small buffer. Required %u Has %u&quot;</span>, jsonLen, buflen);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160; </div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"comment\">//buffer[jsonLen - 1] = &#39;\\0&#39;;</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    serializeJson (outputJSON, buffer, 1024);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160; </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"keywordflow\">return</span> jsonLen;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160; </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">  123</a></span>&#160;String <a class=\"code\" href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">HASensor::deviceClassStr</a> (<a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a> sensorClass) {</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;    <span class=\"keywordflow\">switch</span> (sensorClass) {</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\">sensor_battery</a>:</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;battery&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\">sensor_current</a>:</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;current&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\">sensor_energy</a>:</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;energy&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\">sensor_humidity</a>:</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;humidity&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\">sensor_illuminance</a>:</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;illuminance&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\">sensor_signal_strength</a>:</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;signal_strength&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\">sensor_temperature</a>:</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;temperature&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\">sensor_power</a>:</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;power&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\">sensor_power_factor</a>:</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;power_factor&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\">sensor_pressure</a>:</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;pressure&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\">sensor_timestamp</a>:</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;timestamp&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    <span class=\"keywordflow\">case</span> <a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\">sensor_voltage</a>:</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;voltage&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    <span class=\"keywordflow\">default</span>:</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"stringliteral\">&quot;&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160; </div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321\">sensor_power_factor</a></div><div class=\"ttdeci\">@ sensor_power_factor</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00126\">haEntity.h:126</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aebdcd9a166f413152e13a2d85d47d3a3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3\">ha_device_class</a></div><div class=\"ttdeci\">constexpr auto ha_device_class</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00024\">haEntity.h:24</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_a61e3c5e250794fc2c8ad2f96da1be6dc\"><div class=\"ttname\"><a href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">HASensor::setValueField</a></div><div class=\"ttdeci\">void setValueField(const char *payload)</div><div class=\"ttdoc\">Defines a json key that defines sensor value. When setting this, setValueTemplate () should not be ca...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00032\">haSensor.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_acdd930c6953bd7383eac0d58b3693f71\"><div class=\"ttname\"><a href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">HASensor::setDeviceClass</a></div><div class=\"ttdeci\">void setDeviceClass(haSensorClass_t devClass)</div><div class=\"ttdoc\">Define sensor class as haSensorClass_t https://www.home-assistant.io/integrations/sensor....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00013\">haSensor.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6\">sensor_none</a></div><div class=\"ttdeci\">@ sensor_none</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00117\">haEntity.h:117</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_aa79457154d1e06cfa9ffe11d0d5bcd40\"><div class=\"ttname\"><a href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">HASensor::deviceClassStr</a></div><div class=\"ttdeci\">static String deviceClassStr(haSensorClass_t sensorClass)</div><div class=\"ttdoc\">Gets sensor class name from haSensorClass_t https://www.home-assistant.io/integrations/sensor....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00123\">haSensor.cpp:123</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a1af598a0ee0d299624cef6b4b61b6ba6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a></div><div class=\"ttdeci\">constexpr auto ha_allow_attrib</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00048\">haEntity.h:48</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a03ffb2c860c7276dca38abdca4423f16\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a></div><div class=\"ttdeci\">constexpr auto ha_name_sufix</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00047\">haEntity.h:47</a></div></div>\n<div class=\"ttc\" id=\"ahaSensor_8h_html\"><div class=\"ttname\"><a href=\"haSensor_8h.html\">haSensor.h</a></div><div class=\"ttdoc\">Home Assistant sensor integration.</div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e\">sensor_temperature</a></div><div class=\"ttdeci\">@ sensor_temperature</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00124\">haEntity.h:124</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a6cdc4acd13954859318b6f95243d5694\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694\">ha_expiration</a></div><div class=\"ttdeci\">constexpr auto ha_expiration</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00029\">haEntity.h:29</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284\">sensor_pressure</a></div><div class=\"ttdeci\">@ sensor_pressure</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00127\">haEntity.h:127</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73\">sensor_battery</a></div><div class=\"ttdeci\">@ sensor_battery</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00118\">haEntity.h:118</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537\">sensor_signal_strength</a></div><div class=\"ttdeci\">@ sensor_signal_strength</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00123\">haEntity.h:123</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818\">sensor_illuminance</a></div><div class=\"ttdeci\">@ sensor_illuminance</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00122\">haEntity.h:122</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_ad04e2a8059ebfefb02e98fb3524276c2\"><div class=\"ttname\"><a href=\"haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2\">ha_value_template</a></div><div class=\"ttdeci\">constexpr auto ha_value_template</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00028\">haEntity.h:28</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c\">sensor_voltage</a></div><div class=\"ttdeci\">@ sensor_voltage</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00129\">haEntity.h:129</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_adad5ecbe11d2c2fcdc62be14acc8b89e\"><div class=\"ttname\"><a href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">HASensor::setUnitOfMeasurement</a></div><div class=\"ttdeci\">void setUnitOfMeasurement(const char *payload)</div><div class=\"ttdoc\">Set unit of measure https://www.home-assistant.io/integrations/sensor.mqtt/#unit_of_measurement.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00026\">haSensor.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_af69343b9e51fbd195d5964407594f653\"><div class=\"ttname\"><a href=\"haEntity_8h.html#af69343b9e51fbd195d5964407594f653\">ha_unit_of_measurement</a></div><div class=\"ttdeci\">constexpr auto ha_unit_of_measurement</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00046\">haEntity.h:46</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293\">sensor_energy</a></div><div class=\"ttdeci\">@ sensor_energy</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00120\">haEntity.h:120</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_a4e1eb68bd22273bc33e60c01f703e08f\"><div class=\"ttname\"><a href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">HASensor::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Sensor template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00065\">haSensor.cpp:65</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a></div><div class=\"ttdeci\">haSensorClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00116\">haEntity.h:116</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736\">sensor_humidity</a></div><div class=\"ttdeci\">@ sensor_humidity</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00121\">haEntity.h:121</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3\">sensor_current</a></div><div class=\"ttdeci\">@ sensor_current</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00119\">haEntity.h:119</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29\">sensor_power</a></div><div class=\"ttdeci\">@ sensor_power</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00125\">haEntity.h:125</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82\">sensor_timestamp</a></div><div class=\"ttdeci\">@ sensor_timestamp</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00128\">haEntity.h:128</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_afcb6f12671331f88f5bc2b940be9221f\"><div class=\"ttname\"><a href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">HASensor::setExpireTime</a></div><div class=\"ttdeci\">void setExpireTime(uint payload)</div><div class=\"ttdoc\">Defines the number of seconds after the sensor’s state expires, if it’s not updated....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00020\">haSensor.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_a41e55b745b034127a7d7a98cb50d4559\"><div class=\"ttname\"><a href=\"classHASensor.html#a41e55b745b034127a7d7a98cb50d4559\">HASensor::setValueTemplate</a></div><div class=\"ttdeci\">void setValueTemplate(const char *payload)</div><div class=\"ttdoc\">Defines a template that defines sensor value. When setting this you should not call setValueField () ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00038\">haSensor.cpp:38</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a55797940423863b288e6c60755873026\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a></div><div class=\"ttdeci\">constexpr auto ha_value_key</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00027\">haEntity.h:27</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haSensor_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haSensor.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">haSensor.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Home Assistant sensor integration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>&quot;</code><br />\n</div>\n<p><a href=\"haSensor_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASensor.html\">HASensor</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Home Assistant sensor integration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haSensor_8h_source.html\">haSensor.h</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haSensor_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haSensor.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haSensor.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haSensor_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _HA_SENSOR_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _HA_SENSOR_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haEntity_8h.html\">haEntity.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160; </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASensor.html\">   81</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classHASensor.html\">HASensor</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classHAEntity.html\">HAEntity</a> {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160; </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASensor.html#a07979a82942d08d6f24db5b76e6fe269\">   87</a></span>&#160;    <a class=\"code\" href=\"classHASensor.html#a07979a82942d08d6f24db5b76e6fe269\">HASensor</a> () {</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a> = 1024; <span class=\"comment\">//JSON_OBJECT_SIZE (15) + 512;</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a> = <span class=\"keyword\">new</span> DynamicJsonDocument (<a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a>);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">SENSOR</a>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a>] = <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a>;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;    };</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160; </div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">setDeviceClass</a> (<a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a> devClass);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160; </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">setExpireTime</a> (uint payload);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160; </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">setUnitOfMeasurement</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">setValueField</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160; </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASensor.html#a41e55b745b034127a7d7a98cb50d4559\">setValueTemplate</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160; </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">getDiscoveryJson</a> (<span class=\"keywordtype\">char</span>* buffer, <span class=\"keywordtype\">size_t</span> buflen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, DynamicJsonDocument* inputJSON);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160; </div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;    <span class=\"keyword\">static</span> String <a class=\"code\" href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">deviceClassStr</a> (<a class=\"code\" href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a> sensorClass);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160; </div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160; </div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160; </div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">#endif // _HA_COVER_h</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassHAEntity_html_aadb3c5676c00fc0c8b3939888e408d2b\"><div class=\"ttname\"><a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">HAEntity::entityConfig</a></div><div class=\"ttdeci\">DynamicJsonDocument * entityConfig</div><div class=\"ttdoc\">JSON object to be sent to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00138\">haEntity.h:138</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html\"><div class=\"ttname\"><a href=\"haEntity_8h.html\">haEntity.h</a></div><div class=\"ttdoc\">Defines an entity for Home Assistant autodiscovery.</div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_a61e3c5e250794fc2c8ad2f96da1be6dc\"><div class=\"ttname\"><a href=\"classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc\">HASensor::setValueField</a></div><div class=\"ttdeci\">void setValueField(const char *payload)</div><div class=\"ttdoc\">Defines a json key that defines sensor value. When setting this, setValueTemplate () should not be ca...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00032\">haSensor.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_acdd930c6953bd7383eac0d58b3693f71\"><div class=\"ttname\"><a href=\"classHASensor.html#acdd930c6953bd7383eac0d58b3693f71\">HASensor::setDeviceClass</a></div><div class=\"ttdeci\">void setDeviceClass(haSensorClass_t devClass)</div><div class=\"ttdoc\">Define sensor class as haSensorClass_t https://www.home-assistant.io/integrations/sensor....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00013\">haSensor.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_aa79457154d1e06cfa9ffe11d0d5bcd40\"><div class=\"ttname\"><a href=\"classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40\">HASensor::deviceClassStr</a></div><div class=\"ttdeci\">static String deviceClassStr(haSensorClass_t sensorClass)</div><div class=\"ttdoc\">Gets sensor class name from haSensorClass_t https://www.home-assistant.io/integrations/sensor....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00123\">haSensor.cpp:123</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_aeff41e84aaa1b70df8137cbd05d8ddbe\"><div class=\"ttname\"><a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">HAEntity::capacity</a></div><div class=\"ttdeci\">size_t capacity</div><div class=\"ttdoc\">JSON object memory reservation length.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00134\">haEntity.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_adad5ecbe11d2c2fcdc62be14acc8b89e\"><div class=\"ttname\"><a href=\"classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e\">HASensor::setUnitOfMeasurement</a></div><div class=\"ttdeci\">void setUnitOfMeasurement(const char *payload)</div><div class=\"ttdoc\">Set unit of measure https://www.home-assistant.io/integrations/sensor.mqtt/#unit_of_measurement.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00026\">haSensor.cpp:26</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a375fbbd60c980937a4d80c1156fb9d33\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a></div><div class=\"ttdeci\">constexpr auto ha_device_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00023\">haEntity.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a8c9d02fb762b3af1739ba632479473d5\"><div class=\"ttname\"><a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">HAEntity::deviceType</a></div><div class=\"ttdeci\">haDeviceType_t deviceType</div><div class=\"ttdoc\">HomeAssistant entity device type.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00135\">haEntity.h:135</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558\">SENSOR</a></div><div class=\"ttdeci\">@ SENSOR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00066\">haEntity.h:66</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_a4e1eb68bd22273bc33e60c01f703e08f\"><div class=\"ttname\"><a href=\"classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f\">HASensor::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Sensor template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00065\">haSensor.cpp:65</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a69d83255396b1bd9a325fffa797f77c2\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2\">haSensorClass_t</a></div><div class=\"ttdeci\">haSensorClass_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00116\">haEntity.h:116</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html\"><div class=\"ttname\"><a href=\"classHASensor.html\">HASensor</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8h_source.html#l00081\">haSensor.h:81</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_a07979a82942d08d6f24db5b76e6fe269\"><div class=\"ttname\"><a href=\"classHASensor.html#a07979a82942d08d6f24db5b76e6fe269\">HASensor::HASensor</a></div><div class=\"ttdeci\">HASensor()</div><div class=\"ttdoc\">Sensor constructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8h_source.html#l00087\">haSensor.h:87</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html\"><div class=\"ttname\"><a href=\"classHAEntity.html\">HAEntity</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00132\">haEntity.h:132</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_afcb6f12671331f88f5bc2b940be9221f\"><div class=\"ttname\"><a href=\"classHASensor.html#afcb6f12671331f88f5bc2b940be9221f\">HASensor::setExpireTime</a></div><div class=\"ttdeci\">void setExpireTime(uint payload)</div><div class=\"ttdoc\">Defines the number of seconds after the sensor’s state expires, if it’s not updated....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00020\">haSensor.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassHASensor_html_a41e55b745b034127a7d7a98cb50d4559\"><div class=\"ttname\"><a href=\"classHASensor.html#a41e55b745b034127a7d7a98cb50d4559\">HASensor::setValueTemplate</a></div><div class=\"ttdeci\">void setValueTemplate(const char *payload)</div><div class=\"ttdoc\">Defines a template that defines sensor value. When setting this you should not call setValueField () ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSensor_8cpp_source.html#l00038\">haSensor.cpp:38</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haSwitch_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haSwitch.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haSwitch.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Home Assistant switch integration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"haSwitch_8h_source.html\">haSwitch.h</a>&quot;</code><br />\n</div>\n<p><a href=\"haSwitch_8cpp_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Home Assistant switch integration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haSwitch_8cpp_source.html\">haSwitch.cpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haSwitch_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haSwitch.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haSwitch.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haSwitch_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haSwitch_8h.html\">haSwitch.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">   14</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">HASwitch::setPayloadOn</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">   20</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">HASwitch::setPayloadOff</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#adb657f3c1e7a6d0dd201ae1ae58c4c61\">   26</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">HASwitch::setPayloadOn</a> (<span class=\"keywordtype\">int</span> payload) {</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a>].set&lt;<span class=\"keywordtype\">int</span>&gt; (payload);</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160; </div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#ad87f7ed8d117684176195abb75de10fd\">   30</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">HASwitch::setPayloadOff</a> (<span class=\"keywordtype\">int</span> payload) {</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;    (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a>].set&lt;<span class=\"keywordtype\">int</span>&gt; (payload);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">   34</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">HASwitch::setStateOn</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">ha_state_on</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">   40</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">HASwitch::setStateOff</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">ha_state_off</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160; </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#a8a83e4675f294b203737539245e13c34\">   46</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">HASwitch::setStateOn</a> (<span class=\"keywordtype\">int</span> payload) {</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">ha_state_on</a>].set&lt;<span class=\"keywordtype\">int</span>&gt; (payload);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160; </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#a92d97f25fd24278191e3ded747f1eac9\">   50</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">HASwitch::setStateOff</a> (<span class=\"keywordtype\">int</span> payload) {</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;    (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">ha_state_off</a>].set&lt;<span class=\"keywordtype\">int</span>&gt;(payload);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160; </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">   54</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">HASwitch::setValueField</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"comment\">/* Discovery JSON template for binary sensor</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"comment\">    &quot;nmsfx&quot;:&lt;name_suffix&gt;,</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"comment\">    &quot;pl_on&quot;:&lt;cmd_payload_on&gt;,</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"comment\">    &quot;pl_off&quot;:&lt;cmd_payload_off&gt;,</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"comment\">    &quot;stat_on&quot;:&lt;state_on&gt;,</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"comment\">    &quot;stat_off&quot;:&lt;state_off&gt;,</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"comment\">    &quot;val&quot;:&lt;value_field&gt;</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"comment\">}</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"comment\"></span> </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"comment\">    &quot;name&quot;:&quot;&lt;node_name&gt;_&lt;name_suffix&gt;&quot;,</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"comment\">    &quot;unique_id&quot;:&quot;&lt;node_name&gt;_&lt;name_suffix&gt;&quot;,</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"comment\">    &quot;command_topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/set/data&quot;</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"comment\">    &quot;payload_off&quot;:&quot;&lt;cmd_payload_on&gt;&quot;,</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"comment\">    &quot;payload_on&quot;:&quot;&lt;cmd_payload_off&gt;&quot;</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"comment\">    &quot;state_topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;,</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"comment\">    &quot;state_off&quot;:&quot;&lt;state_off&gt;&quot;,</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"comment\">    &quot;state_on&quot;:&quot;&lt;state_on&gt;&quot;,</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"comment\">    &quot;value_template&quot;:&quot;{{value_json.&lt;value_field&gt;}}&quot;</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"comment\">    &quot;json_attributes_template&quot;:&quot;{{value_json | tojson}}&quot;,</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"comment\">    &quot;json_attributes_topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;,</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"comment\">}</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">   85</a></span>&#160;<span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">HASwitch::getDiscoveryJson</a> (<span class=\"keywordtype\">char</span>* buffer, <span class=\"keywordtype\">size_t</span> buflen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, DynamicJsonDocument* inputJSON) {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    <span class=\"comment\">//DynamicJsonDocument inputJSON (1024);</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    DynamicJsonDocument outputJSON (1024);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160; </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    <span class=\"comment\">//deserializeMsgPack (inputJSON, msgPack, len);</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    <span class=\"keywordflow\">if</span> (!nodeName || !networkName || !inputJSON ) {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Whrong parameters&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>)) {</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;name&quot;</span>] = String (nodeName) + <span class=\"stringliteral\">&quot;_&quot;</span> + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;name&quot;</span>] = nodeName;    </div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>)) {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;unique_id&quot;</span>] = String (nodeName) + <span class=\"stringliteral\">&quot;_&quot;</span> + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;unique_id&quot;</span>] = nodeName;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;command_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/set/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a>)) {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;payload_on&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a>];</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a>)) {</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;payload_off&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a>];</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;state_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">ha_state_on</a>)) {</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;state_on&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">ha_state_on</a>];</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">ha_state_off</a>)) {</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;state_off&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">ha_state_off</a>];</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    } </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>) &amp;&amp; (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>].is&lt;String&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;value_template&quot;</span>] = String (<span class=\"stringliteral\">&quot;{{value_json.&quot;</span>) + (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a>].as&lt;String&gt; () + String (<span class=\"stringliteral\">&quot;}}&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a>) &amp;&amp; (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a>].as&lt;<span class=\"keywordtype\">bool</span>&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;json_attributes_topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;json_attributes_template&quot;</span>] = <span class=\"stringliteral\">&quot;{{value_json | tojson}}&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;    <span class=\"keywordtype\">size_t</span> jsonLen = measureJson (outputJSON);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160; </div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;    <span class=\"keywordflow\">if</span> (jsonLen &gt; buflen) {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Too small buffer. Required %u Has %u&quot;</span>, jsonLen, buflen);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;    <span class=\"comment\">//buffer[jsonLen - 1] = &#39;\\0&#39;;</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;    serializeJson (outputJSON, buffer, 1024);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160; </div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;    <span class=\"keywordflow\">return</span> jsonLen;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160; </div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"ahaSwitch_8h_html\"><div class=\"ttname\"><a href=\"haSwitch_8h.html\">haSwitch.h</a></div><div class=\"ttdoc\">Home Assistant switch integration.</div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a9f73e9dfb1de4078c76f6670d1c8b46a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a\">ha_state_on</a></div><div class=\"ttdeci\">constexpr auto ha_state_on</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00043\">haEntity.h:43</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_aa59604bf62e63caaf3dcd6a2ad67814f\"><div class=\"ttname\"><a href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">HASwitch::setStateOn</a></div><div class=\"ttdeci\">void setStateOn(const char *payload)</div><div class=\"ttdoc\">The payload that represents the on state. Used when value that represents on state in the state_topic...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00034\">haSwitch.cpp:34</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a1af598a0ee0d299624cef6b4b61b6ba6\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6\">ha_allow_attrib</a></div><div class=\"ttdeci\">constexpr auto ha_allow_attrib</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00048\">haEntity.h:48</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a03ffb2c860c7276dca38abdca4423f16\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16\">ha_name_sufix</a></div><div class=\"ttdeci\">constexpr auto ha_name_sufix</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00047\">haEntity.h:47</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a401afaae50f1f853db98f8398b921d5a\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a\">ha_payload_off</a></div><div class=\"ttdeci\">constexpr auto ha_payload_off</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00026\">haEntity.h:26</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a8498809d5a4ba56039c8397e1c22f272\"><div class=\"ttname\"><a href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">HASwitch::setStateOff</a></div><div class=\"ttdeci\">void setStateOff(const char *payload)</div><div class=\"ttdoc\">The payload that represents the off state. Used when value that represents off state in the state_top...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00040\">haSwitch.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_ad34555ca78f7d9c9ccd49139751ed831\"><div class=\"ttname\"><a href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">HASwitch::setPayloadOff</a></div><div class=\"ttdeci\">void setPayloadOff(const char *payload)</div><div class=\"ttdoc\">The payload that represents off state. If specified, will be used for both comparing to the value in ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00020\">haSwitch.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a6f1fba7f12792a5a622de9db17cd2bc9\"><div class=\"ttname\"><a href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">HASwitch::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Switch template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00085\">haSwitch.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a2fe6fbc4270c94da4cafb0cbb9378230\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230\">ha_state_off</a></div><div class=\"ttdeci\">constexpr auto ha_state_off</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00044\">haEntity.h:44</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_ae7ffd524cbd915c942359b0f6abe1df5\"><div class=\"ttname\"><a href=\"haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5\">ha_payload_on</a></div><div class=\"ttdeci\">constexpr auto ha_payload_on</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00025\">haEntity.h:25</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a58d4755d08863514f81805d29d96605b\"><div class=\"ttname\"><a href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">HASwitch::setPayloadOn</a></div><div class=\"ttdeci\">void setPayloadOn(const char *payload)</div><div class=\"ttdoc\">The payload that represents on state. If specified, will be used for both comparing to the value in t...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00014\">haSwitch.cpp:14</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a237b5b70434642df1031dac738955634\"><div class=\"ttname\"><a href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">HASwitch::setValueField</a></div><div class=\"ttdeci\">void setValueField(const char *payload)</div><div class=\"ttdoc\">Defines a json key to extract device’s state from the state_topic. To determine the switches’s state ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00054\">haSwitch.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a55797940423863b288e6c60755873026\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a55797940423863b288e6c60755873026\">ha_value_key</a></div><div class=\"ttdeci\">constexpr auto ha_value_key</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00027\">haEntity.h:27</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haSwitch_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haSwitch.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">haSwitch.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Home Assistant switch integration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>&quot;</code><br />\n</div>\n<p><a href=\"haSwitch_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHASwitch.html\">HASwitch</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Home Assistant switch integration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haSwitch_8h_source.html\">haSwitch.h</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haSwitch_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haSwitch.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haSwitch.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haSwitch_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _SWITCH_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _SWITCH_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haEntity_8h.html\">haEntity.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160; </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html\">   94</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classHASwitch.html\">HASwitch</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classHAEntity.html\">HAEntity</a> {</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160; </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHASwitch.html#a282ac7ec44e7fc43d0d6493808e68ba3\">  100</a></span>&#160;    <a class=\"code\" href=\"classHASwitch.html#a282ac7ec44e7fc43d0d6493808e68ba3\">HASwitch</a> () {</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a> = JSON_OBJECT_SIZE (10) + 250;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a> = <span class=\"keyword\">new</span> DynamicJsonDocument (<a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a>);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">SWITCH</a>;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a>] = <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a>;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    };</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160; </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">setPayloadOn</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160; </div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">setPayloadOff</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160; </div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">setPayloadOn</a> (<span class=\"keywordtype\">int</span> payload);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160; </div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">setPayloadOff</a> (<span class=\"keywordtype\">int</span> payload);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160; </div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">setStateOn</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160; </div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">setStateOff</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160; </div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">setStateOn</a> (<span class=\"keywordtype\">int</span> payload);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160; </div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">setStateOff</a> (<span class=\"keywordtype\">int</span> payload);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160; </div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">setValueField</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160; </div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">getDiscoveryJson</a> (<span class=\"keywordtype\">char</span>* buffer, <span class=\"keywordtype\">size_t</span> buflen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, DynamicJsonDocument* inputJSON);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160; </div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160; </div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160; </div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\">#endif // _SWITCH_h</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassHAEntity_html_aadb3c5676c00fc0c8b3939888e408d2b\"><div class=\"ttname\"><a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">HAEntity::entityConfig</a></div><div class=\"ttdeci\">DynamicJsonDocument * entityConfig</div><div class=\"ttdoc\">JSON object to be sent to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00138\">haEntity.h:138</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b\">SWITCH</a></div><div class=\"ttdeci\">@ SWITCH</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00067\">haEntity.h:67</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html\"><div class=\"ttname\"><a href=\"haEntity_8h.html\">haEntity.h</a></div><div class=\"ttdoc\">Defines an entity for Home Assistant autodiscovery.</div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_aeff41e84aaa1b70df8137cbd05d8ddbe\"><div class=\"ttname\"><a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">HAEntity::capacity</a></div><div class=\"ttdeci\">size_t capacity</div><div class=\"ttdoc\">JSON object memory reservation length.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00134\">haEntity.h:134</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_aa59604bf62e63caaf3dcd6a2ad67814f\"><div class=\"ttname\"><a href=\"classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f\">HASwitch::setStateOn</a></div><div class=\"ttdeci\">void setStateOn(const char *payload)</div><div class=\"ttdoc\">The payload that represents the on state. Used when value that represents on state in the state_topic...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00034\">haSwitch.cpp:34</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html\"><div class=\"ttname\"><a href=\"classHASwitch.html\">HASwitch</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8h_source.html#l00094\">haSwitch.h:94</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a8498809d5a4ba56039c8397e1c22f272\"><div class=\"ttname\"><a href=\"classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272\">HASwitch::setStateOff</a></div><div class=\"ttdeci\">void setStateOff(const char *payload)</div><div class=\"ttdoc\">The payload that represents the off state. Used when value that represents off state in the state_top...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00040\">haSwitch.cpp:40</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_ad34555ca78f7d9c9ccd49139751ed831\"><div class=\"ttname\"><a href=\"classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831\">HASwitch::setPayloadOff</a></div><div class=\"ttdeci\">void setPayloadOff(const char *payload)</div><div class=\"ttdoc\">The payload that represents off state. If specified, will be used for both comparing to the value in ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00020\">haSwitch.cpp:20</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a6f1fba7f12792a5a622de9db17cd2bc9\"><div class=\"ttname\"><a href=\"classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9\">HASwitch::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Switch template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00085\">haSwitch.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a282ac7ec44e7fc43d0d6493808e68ba3\"><div class=\"ttname\"><a href=\"classHASwitch.html#a282ac7ec44e7fc43d0d6493808e68ba3\">HASwitch::HASwitch</a></div><div class=\"ttdeci\">HASwitch()</div><div class=\"ttdoc\">Switch constructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8h_source.html#l00100\">haSwitch.h:100</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a375fbbd60c980937a4d80c1156fb9d33\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a></div><div class=\"ttdeci\">constexpr auto ha_device_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00023\">haEntity.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a8c9d02fb762b3af1739ba632479473d5\"><div class=\"ttname\"><a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">HAEntity::deviceType</a></div><div class=\"ttdeci\">haDeviceType_t deviceType</div><div class=\"ttdoc\">HomeAssistant entity device type.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00135\">haEntity.h:135</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a58d4755d08863514f81805d29d96605b\"><div class=\"ttname\"><a href=\"classHASwitch.html#a58d4755d08863514f81805d29d96605b\">HASwitch::setPayloadOn</a></div><div class=\"ttdeci\">void setPayloadOn(const char *payload)</div><div class=\"ttdoc\">The payload that represents on state. If specified, will be used for both comparing to the value in t...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00014\">haSwitch.cpp:14</a></div></div>\n<div class=\"ttc\" id=\"aclassHASwitch_html_a237b5b70434642df1031dac738955634\"><div class=\"ttname\"><a href=\"classHASwitch.html#a237b5b70434642df1031dac738955634\">HASwitch::setValueField</a></div><div class=\"ttdeci\">void setValueField(const char *payload)</div><div class=\"ttdoc\">Defines a json key to extract device’s state from the state_topic. To determine the switches’s state ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haSwitch_8cpp_source.html#l00054\">haSwitch.cpp:54</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html\"><div class=\"ttname\"><a href=\"classHAEntity.html\">HAEntity</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00132\">haEntity.h:132</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haTrigger_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haTrigger.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haTrigger.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Home Assistant trigger integration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>&quot;</code><br />\n</div>\n<p><a href=\"haTrigger_8cpp_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Home Assistant trigger integration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haTrigger_8cpp_source.html\">haTrigger.cpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haTrigger_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haTrigger.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haTrigger.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haTrigger_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">  #include &quot;<a class=\"code\" href=\"haTrigger_8h.html\">haTrigger.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160; </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">   13</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">HATrigger::setPayload</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload) {</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;    <span class=\"keywordflow\">if</span> (payload) {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14\">ha_payload</a>] = payload;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160; </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">/* Discovery JSON template for trigger</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"comment\">    &quot;pl&quot;:&lt;payload_value&gt;,</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">    &quot;type&quot;:&lt;type&gt;,</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">    &quot;stype&quot;:&lt;subtype&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"comment\">}</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"comment\"></span> </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"comment\">{</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">    &quot;automation_type&quot;:&quot;trigger&quot;,</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\">    &quot;topic&quot;:&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;,</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"comment\">    &quot;payload&quot;:&lt;payload_value&gt;,</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"comment\">    &quot;type&quot;:&lt;type&gt;,</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"comment\">    &quot;subtype&quot;:&lt;subtype&gt;,</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"comment\">    &quot;device&quot;:{</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"comment\">        &quot;name&quot;:&lt;node_name&gt;_&lt;type&gt;_&lt;subtype&gt;,</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"comment\">        &quot;identifiers&quot;:&lt;node_name&gt;_&lt;type&gt;_&lt;subtype&gt;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"comment\">    }</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"comment\">}</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160; </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">   39</a></span>&#160;<span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">HATrigger::getDiscoveryJson</a> (<span class=\"keywordtype\">char</span>* buffer, <span class=\"keywordtype\">size_t</span> buflen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, DynamicJsonDocument* inputJSON) {</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    <span class=\"comment\">//DynamicJsonDocument inputJSON (1024);</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    DynamicJsonDocument outputJSON (1024);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;    String type;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    String subtype;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <span class=\"comment\">//deserializeMsgPack (inputJSON, msgPack, len);</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160; </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    <span class=\"keywordflow\">if</span> (!nodeName || !networkName || !inputJSON || !buffer) {</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Whrong parameters&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160; </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;automation_type&quot;</span>] = <span class=\"stringliteral\">&quot;trigger&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    outputJSON[<span class=\"stringliteral\">&quot;topic&quot;</span>] = String (networkName) + <span class=\"stringliteral\">&quot;/&quot;</span> + String (nodeName) + <span class=\"stringliteral\">&quot;/data&quot;</span>;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14\">ha_payload</a>)) {</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        outputJSON[<span class=\"stringliteral\">&quot;payload&quot;</span>] = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14\">ha_payload</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    } </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a>)) {</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keywordflow\">if</span> ((*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a>].is&lt;<span class=\"keywordtype\">int</span>&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;            type = <a class=\"code\" href=\"classHATrigger.html#a25585b365d726848d22ad5c4f299d803\">getTriggerTypeStr</a> ((*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a>].as&lt;int&gt; ());</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;            outputJSON[<span class=\"stringliteral\">&quot;type&quot;</span>] = type;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;            type = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a>].as&lt;String&gt;();</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;            outputJSON[<span class=\"stringliteral\">&quot;type&quot;</span>] = type;        </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;    <span class=\"keywordflow\">if</span> (inputJSON-&gt;containsKey (<a class=\"code\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a>)) {</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keywordflow\">if</span> ((*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a>].is&lt;<span class=\"keywordtype\">int</span>&gt; ()) {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;            subtype = <a class=\"code\" href=\"classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b\">getTriggerSubtypeStr</a> ((*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a>].as&lt;int&gt; ());</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;            outputJSON[<span class=\"stringliteral\">&quot;subtype&quot;</span>] = subtype;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;            subtype = (*inputJSON)[<a class=\"code\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a>].as&lt;String&gt; ();</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;            outputJSON[<span class=\"stringliteral\">&quot;subtype&quot;</span>] = subtype;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    JsonObject device = outputJSON.createNestedObject (<span class=\"stringliteral\">&quot;device&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    device[<span class=\"stringliteral\">&quot;name&quot;</span>] = String (nodeName) + (type != <span class=\"stringliteral\">&quot;&quot;</span> ? (<span class=\"stringliteral\">&quot;_&quot;</span> + type) : <span class=\"stringliteral\">&quot;&quot;</span>) + (subtype != <span class=\"stringliteral\">&quot;&quot;</span> ? (<span class=\"stringliteral\">&quot;_&quot;</span> + subtype) : <span class=\"stringliteral\">&quot;&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    device[<span class=\"stringliteral\">&quot;identifiers&quot;</span>] = device[<span class=\"stringliteral\">&quot;name&quot;</span>];</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;    <span class=\"keywordtype\">size_t</span> jsonLen = measureJson (outputJSON);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160; </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;    <span class=\"keywordflow\">if</span> (jsonLen &gt; buflen) {</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        DEBUG_WARN (<span class=\"stringliteral\">&quot;Too small buffer. Required %u Has %u&quot;</span>, jsonLen, buflen);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keywordflow\">return</span> 0;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160; </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    <span class=\"comment\">//buffer[jsonLen - 1] = &#39;\\0&#39;;</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    serializeJson (outputJSON, buffer, buflen);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160; </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    <span class=\"keywordflow\">return</span> jsonLen;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160; </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassHATrigger_html_a2886663fe1bc9b03ecb7024e646eab0b\"><div class=\"ttname\"><a href=\"classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b\">HATrigger::getTriggerSubtypeStr</a></div><div class=\"ttdeci\">static const char * getTriggerSubtypeStr(int subtype)</div><div class=\"ttdoc\">Returns string that correspond with trigger subtype in ha_triggerSubtype_t format https://www....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00158\">haTrigger.h:158</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a42e581722e8a914238bf0d06d8f8f51b\"><div class=\"ttname\"><a href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">HATrigger::setPayload</a></div><div class=\"ttdeci\">void setPayload(const char *payload)</div><div class=\"ttdoc\">Optional payload to match the payload being sent over the topic https://www.home-assistant....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8cpp_source.html#l00013\">haTrigger.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a6353607c8cf0175f0c64dde2848e8d14\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14\">ha_payload</a></div><div class=\"ttdeci\">constexpr auto ha_payload</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00037\">haEntity.h:37</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a79b008a5a9f249d1e6fd72a710636ca7\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a></div><div class=\"ttdeci\">constexpr auto ha_subtype</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00050\">haEntity.h:50</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html\"><div class=\"ttname\"><a href=\"haTrigger_8h.html\">haTrigger.h</a></div><div class=\"ttdoc\">Home Assistant trigger integration.</div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0102b90994b2b8c9c461faf7a13d453\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a></div><div class=\"ttdeci\">constexpr auto ha_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00049\">haEntity.h:49</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a09bed6e6ead886a7b0389afe7470835c\"><div class=\"ttname\"><a href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">HATrigger::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Trigger template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8cpp_source.html#l00039\">haTrigger.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a25585b365d726848d22ad5c4f299d803\"><div class=\"ttname\"><a href=\"classHATrigger.html#a25585b365d726848d22ad5c4f299d803\">HATrigger::getTriggerTypeStr</a></div><div class=\"ttdeci\">static const char * getTriggerTypeStr(int type)</div><div class=\"ttdoc\">Returns string that correspond with trigger type in ha_triggerType_t format https://www....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00145\">haTrigger.h:145</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haTrigger_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haTrigger.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">haTrigger.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Home Assistant trigger integration.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"haEntity_8h_source.html\">haEntity.h</a>&quot;</code><br />\n</div>\n<p><a href=\"haTrigger_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classHATrigger.html\">HATrigger</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr class=\"memitem:ada6f3c61fe343e74af1f533d73d3c72c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c\">ha_triggerType_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a> = 0, \n<a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca6ba5b8432af7d558ba016c02ee898712\">button_short_release</a> = 1, \n<a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cadc63942310d712596e55a8f04680fa60\">button_long_press</a> = 2, \n<a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca762074f9733bc47a3bc38344c36d1a29\">button_long_release</a> = 3, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca9cfbd94dabbbdcb25bdff5a9fbcead58\">button_double_press</a> = 4, \n<a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae310001a87f47b0d5398c055f0dac403\">button_triple_press</a> = 5, \n<a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca000c3a771115a30a1c497a9cb8a19014\">button_quadruple_press</a> = 6, \n<a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6\">button_quintuple_press</a> = 7\n<br />\n }</td></tr>\n<tr class=\"separator:ada6f3c61fe343e74af1f533d73d3c72c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4f9c1c9c9344d12ea72582134ba7421b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b\">ha_triggerSubtype_t</a> { <br />\n&#160;&#160;<a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">turn_on</a> = 0, \n<a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba83ee6b65c9abe8a11ed4d9692b0a5ae7\">turn_off</a> = 1, \n<a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\">button_1</a> = 2, \n<a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9482c259cff58c7784eed9f35f927400\">button_2</a> = 3, \n<br />\n&#160;&#160;<a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba791944b6979069dd5f7d962556ddc604\">button_3</a> = 4, \n<a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9db0c27b13d686faf831f1515a9a5340\">button_4</a> = 5, \n<a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba45efbed920db6ce550810ced085e9b18\">button_5</a> = 6, \n<a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8\">button_6</a> = 7\n<br />\n }</td></tr>\n<tr class=\"separator:a4f9c1c9c9344d12ea72582134ba7421b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a98aa5d190f3afda4339a9f35a8f59eef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haTrigger_8h.html#a98aa5d190f3afda4339a9f35a8f59eef\">ha_triggerTypeStr</a> []</td></tr>\n<tr class=\"separator:a98aa5d190f3afda4339a9f35a8f59eef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a291e753178ee4e52fb182fc2af9cd566\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">static const char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"haTrigger_8h.html#a291e753178ee4e52fb182fc2af9cd566\">ha_triggerSubtypeStr</a> []</td></tr>\n<tr class=\"separator:a291e753178ee4e52fb182fc2af9cd566\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Home Assistant trigger integration. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n</div><h2 class=\"groupheader\">Enumeration Type Documentation</h2>\n<a id=\"a4f9c1c9c9344d12ea72582134ba7421b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4f9c1c9c9344d12ea72582134ba7421b\">&#9670;&nbsp;</a></span>ha_triggerSubtype_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b\">ha_triggerSubtype_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\"></a>turn_on&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4f9c1c9c9344d12ea72582134ba7421ba83ee6b65c9abe8a11ed4d9692b0a5ae7\"></a>turn_off&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\"></a>button_1&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4f9c1c9c9344d12ea72582134ba7421ba9482c259cff58c7784eed9f35f927400\"></a>button_2&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4f9c1c9c9344d12ea72582134ba7421ba791944b6979069dd5f7d962556ddc604\"></a>button_3&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4f9c1c9c9344d12ea72582134ba7421ba9db0c27b13d686faf831f1515a9a5340\"></a>button_4&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4f9c1c9c9344d12ea72582134ba7421ba45efbed920db6ce550810ced085e9b18\"></a>button_5&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8\"></a>button_6&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00104\">104</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ada6f3c61fe343e74af1f533d73d3c72c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ada6f3c61fe343e74af1f533d73d3c72c\">&#9670;&nbsp;</a></span>ha_triggerType_t</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c\">ha_triggerType_t</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>The mqtt device trigger platform uses an MQTT message payload to generate device trigger events. An MQTT device trigger is a better option than a binary sensor for buttons, remote controls etc.</p>\n<p>MQTT device triggers are only supported through MQTT discovery, manual setup through configuration.yaml is not supported.</p>\n<p><a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/\">https://www.home-assistant.io/integrations/device_trigger.mqtt/</a></p>\n<p>An example of trigger discovery message may be like this:</p>\n<p>Topic: homeassistant/device-trigger/button_button_short_press_button_1/config</p>\n<p>Payload:</p>\n<p>{ \"automation_type\":\"trigger\", // string REQUIRED The type of automation, must be ‘trigger’ \"topic\":\"EnigmaTest/button/data\", // string REQUIRED The MQTT topic subscribed to receive trigger events \"payload\":\"{\\\"button\":1}\",       // string (optional) Optional payload to match the payload being sent over the topic\n   \"type\":\"button_short_press\", // string REQUIRED The type of the trigger, e.g. button_short_press. // Entries supported by the frontend: button_short_press, button_short_release, button_long_press, button_long_release, // button_double_press, button_triple_press, button_quadruple_press, button_quintuple_press. // If set to an unsupported value, will render as subtype type, e.g. First button spammed with type set to spammed and subtype set to button_1 \"subtype\":\"button_1\", // string REQUIRED The subtype of the trigger, e.g. button_1. // Entries supported by the frontend: turn_on, turn_off, button_1, button_2, button_3, button_4, button_5, button_6. // If set to an unsupported value, will render as subtype type, e.g. left_button pressed with type set to button_short_press and subtype set to left_button \"device\":{ // Information about the device this device trigger is a part of to tie it into the device registry \"name\":\"button\", // string (optional) The name of the device \"identifiers\":\"button\" // list | string (optional) A list of IDs that uniquely identify the device. For example a serial number } }</p>\n<p>Template message for switch is this</p>\n<p>Topic: homeassistant/device-trigger/&lt;node_name&gt;_&lt;type&gt;_&lt;subtype&gt;/config</p>\n<p>Payload</p>\n<div class=\"fragment\"><div class=\"line\"> {</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;automation_type&quot;</span>:<span class=\"stringliteral\">&quot;trigger&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;topic&quot;</span>:<span class=\"stringliteral\">&quot;&lt;network_name&gt;/&lt;node_name&gt;/data&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;payload&quot;</span>:&lt;payload_value&gt;,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;type&quot;</span>:&lt;type&gt;,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;subtype&quot;</span>:&lt;subtype&gt;,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;device&quot;</span>:{</div>\n<div class=\"line\">        <span class=\"stringliteral\">&quot;name&quot;</span>:&lt;node_name&gt;_&lt;type&gt;_&lt;subtype&gt;,</div>\n<div class=\"line\">        <span class=\"stringliteral\">&quot;identifiers&quot;</span>:&lt;node_name&gt;_&lt;type&gt;_&lt;subtype&gt;</div>\n<div class=\"line\">    }</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><p>Message to gateway is like following</p>\n<div class=\"fragment\"><div class=\"line\">{</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;pl&quot;</span>:&lt;payload_value&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;type&quot;</span>:&lt;type&gt;,</div>\n<div class=\"line\">   <span class=\"stringliteral\">&quot;stype&quot;</span>:&lt;subtype&gt;</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --> <table class=\"fieldtable\">\n<tr><th colspan=\"2\">Enumerator</th></tr><tr><td class=\"fieldname\"><a id=\"ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\"></a>button_short_press&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"ada6f3c61fe343e74af1f533d73d3c72ca6ba5b8432af7d558ba016c02ee898712\"></a>button_short_release&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"ada6f3c61fe343e74af1f533d73d3c72cadc63942310d712596e55a8f04680fa60\"></a>button_long_press&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"ada6f3c61fe343e74af1f533d73d3c72ca762074f9733bc47a3bc38344c36d1a29\"></a>button_long_release&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"ada6f3c61fe343e74af1f533d73d3c72ca9cfbd94dabbbdcb25bdff5a9fbcead58\"></a>button_double_press&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"ada6f3c61fe343e74af1f533d73d3c72cae310001a87f47b0d5398c055f0dac403\"></a>button_triple_press&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"ada6f3c61fe343e74af1f533d73d3c72ca000c3a771115a30a1c497a9cb8a19014\"></a>button_quadruple_press&#160;</td><td class=\"fielddoc\"></td></tr>\n<tr><td class=\"fieldname\"><a id=\"ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6\"></a>button_quintuple_press&#160;</td><td class=\"fielddoc\"></td></tr>\n</table>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00082\">82</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a291e753178ee4e52fb182fc2af9cd566\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a291e753178ee4e52fb182fc2af9cd566\">&#9670;&nbsp;</a></span>ha_triggerSubtypeStr</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* ha_triggerSubtypeStr[]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<b>Initial value:</b><div class=\"fragment\"><div class=\"line\">= {</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;turn_on&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;turn_off&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_1&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_2&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_3&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_4&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_5&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_6&quot;</span></div>\n<div class=\"line\">}</div>\n</div><!-- fragment -->\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00115\">115</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a98aa5d190f3afda4339a9f35a8f59eef\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a98aa5d190f3afda4339a9f35a8f59eef\">&#9670;&nbsp;</a></span>ha_triggerTypeStr</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* ha_triggerTypeStr[]</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">static</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n<b>Initial value:</b><div class=\"fragment\"><div class=\"line\">= {</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_short_press&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_short_release&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_long_press&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_long_release&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_double_press&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_triple_press&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_quadruple_press&quot;</span>,</div>\n<div class=\"line\">    <span class=\"stringliteral\">&quot;button_quintuple_press&quot;</span></div>\n<div class=\"line\">}</div>\n</div><!-- fragment -->\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"haTrigger_8h_source.html#l00093\">93</a> of file <a class=\"el\" href=\"haTrigger_8h_source.html\">haTrigger.h</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/haTrigger_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/haTrigger.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">haTrigger.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"haTrigger_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#ifndef _HA_TRIGGER_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#define _HA_TRIGGER_h</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"haEntity_8h.html\">haEntity.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160; </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c\">   82</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> {</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">   83</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a>     = 0,</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca6ba5b8432af7d558ba016c02ee898712\">   84</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca6ba5b8432af7d558ba016c02ee898712\">button_short_release</a>   = 1,</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cadc63942310d712596e55a8f04680fa60\">   85</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cadc63942310d712596e55a8f04680fa60\">button_long_press</a>      = 2, </div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca762074f9733bc47a3bc38344c36d1a29\">   86</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca762074f9733bc47a3bc38344c36d1a29\">button_long_release</a>    = 3,</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca9cfbd94dabbbdcb25bdff5a9fbcead58\">   87</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca9cfbd94dabbbdcb25bdff5a9fbcead58\">button_double_press</a>    = 4,</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae310001a87f47b0d5398c055f0dac403\">   88</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae310001a87f47b0d5398c055f0dac403\">button_triple_press</a>    = 5,</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca000c3a771115a30a1c497a9cb8a19014\">   89</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca000c3a771115a30a1c497a9cb8a19014\">button_quadruple_press</a> = 6,</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6\">button_quintuple_press</a> = 7</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6\">   91</a></span>&#160;} <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c\">ha_triggerType_t</a>;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160; </div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a98aa5d190f3afda4339a9f35a8f59eef\">   93</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"haTrigger_8h.html#a98aa5d190f3afda4339a9f35a8f59eef\">ha_triggerTypeStr</a>[] = {</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    <span class=\"stringliteral\">&quot;button_short_press&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    <span class=\"stringliteral\">&quot;button_short_release&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;    <span class=\"stringliteral\">&quot;button_long_press&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;    <span class=\"stringliteral\">&quot;button_long_release&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;    <span class=\"stringliteral\">&quot;button_double_press&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;    <span class=\"stringliteral\">&quot;button_triple_press&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    <span class=\"stringliteral\">&quot;button_quadruple_press&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    <span class=\"stringliteral\">&quot;button_quintuple_press&quot;</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b\">  104</a></span>&#160;<span class=\"keyword\">typedef</span> <span class=\"keyword\">enum</span> {</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">  105</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">turn_on</a>  = 0,</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba83ee6b65c9abe8a11ed4d9692b0a5ae7\">  106</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba83ee6b65c9abe8a11ed4d9692b0a5ae7\">turn_off</a> = 1,</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\">  107</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\">button_1</a> = 2,</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9482c259cff58c7784eed9f35f927400\">  108</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9482c259cff58c7784eed9f35f927400\">button_2</a> = 3,</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba791944b6979069dd5f7d962556ddc604\">  109</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba791944b6979069dd5f7d962556ddc604\">button_3</a> = 4,</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9db0c27b13d686faf831f1515a9a5340\">  110</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9db0c27b13d686faf831f1515a9a5340\">button_4</a> = 5,</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba45efbed920db6ce550810ced085e9b18\">  111</a></span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba45efbed920db6ce550810ced085e9b18\">button_5</a> = 6,</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;    <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8\">button_6</a> = 7</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8\">  113</a></span>&#160;} <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b\">ha_triggerSubtype_t</a>;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"haTrigger_8h.html#a291e753178ee4e52fb182fc2af9cd566\">  115</a></span>&#160;<span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"haTrigger_8h.html#a291e753178ee4e52fb182fc2af9cd566\">ha_triggerSubtypeStr</a>[] = {</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;    <span class=\"stringliteral\">&quot;turn_on&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;    <span class=\"stringliteral\">&quot;turn_off&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;    <span class=\"stringliteral\">&quot;button_1&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;    <span class=\"stringliteral\">&quot;button_2&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;    <span class=\"stringliteral\">&quot;button_3&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;    <span class=\"stringliteral\">&quot;button_4&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;    <span class=\"stringliteral\">&quot;button_5&quot;</span>,</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;    <span class=\"stringliteral\">&quot;button_6&quot;</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160; </div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHATrigger.html\">  126</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classHATrigger.html\">HATrigger</a> : <span class=\"keyword\">public</span> <a class=\"code\" href=\"classHAEntity.html\">HAEntity</a> {</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160; </div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHATrigger.html#a91af9e612da244483b5704c4ed835d0f\">  132</a></span>&#160;    <a class=\"code\" href=\"classHATrigger.html#a91af9e612da244483b5704c4ed835d0f\">HATrigger</a> () {</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a> = JSON_OBJECT_SIZE (10) + 250;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">entityConfig</a> = <span class=\"keyword\">new</span> DynamicJsonDocument (<a class=\"code\" href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">capacity</a>);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a> = <a class=\"code\" href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">DEVICE_TRIGGER</a>;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a>] = <a class=\"code\" href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">deviceType</a>;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;    };</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160; </div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160; </div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHATrigger.html#a25585b365d726848d22ad5c4f299d803\">  145</a></span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classHATrigger.html#a25585b365d726848d22ad5c4f299d803\">getTriggerTypeStr</a> (<span class=\"keywordtype\">int</span> type) {</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keywordflow\">if</span> (type &gt;= <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a> || type &lt;= <a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6\">button_quintuple_press</a>) {</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;            <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"haTrigger_8h.html#a98aa5d190f3afda4339a9f35a8f59eef\">ha_triggerTypeStr</a>[type];</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;            <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160; </div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b\">  158</a></span>&#160;    <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b\">getTriggerSubtypeStr</a> (<span class=\"keywordtype\">int</span> subtype) {</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <span class=\"keywordflow\">if</span> (subtype &gt;= <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">turn_on</a> || subtype &lt;= <a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8\">button_6</a>) {</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;            <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"haTrigger_8h.html#a291e753178ee4e52fb182fc2af9cd566\">ha_triggerSubtypeStr</a>[subtype];</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;            <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160; </div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">setPayload</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* payload);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160; </div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">  178</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">setType</a> (<a class=\"code\" href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c\">ha_triggerType_t</a> type) {</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a>] = type;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHATrigger.html#af86406b876cfddbe13ef433582600658\">  187</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHATrigger.html#af86406b876cfddbe13ef433582600658\">setType</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* type) {</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a>] = type;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160; </div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">  196</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">setSubtype</a> (<a class=\"code\" href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b\">ha_triggerSubtype_t</a> subtype) {</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a>] = subtype;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160; </div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"classHATrigger.html#ab16d63fc344bac17dd99834be15585aa\">  205</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classHATrigger.html#ab16d63fc344bac17dd99834be15585aa\">setSubtype</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* subtype) {</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;        (*entityConfig)[<a class=\"code\" href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a>] = subtype;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160; </div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">size_t</span> <a class=\"code\" href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">getDiscoveryJson</a> (<span class=\"keywordtype\">char</span>* buffer, <span class=\"keywordtype\">size_t</span> buflen, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* nodeName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, DynamicJsonDocument* inputJSON);</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160; </div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160; </div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"preprocessor\">#endif // SUPPORT_HA_DISCOVERY</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160; </div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;<span class=\"preprocessor\">#endif // _HA_TRIGGER_h</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72ca762074f9733bc47a3bc38344c36d1a29\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca762074f9733bc47a3bc38344c36d1a29\">button_long_release</a></div><div class=\"ttdeci\">@ button_long_release</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00086\">haTrigger.h:86</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a2886663fe1bc9b03ecb7024e646eab0b\"><div class=\"ttname\"><a href=\"classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b\">HATrigger::getTriggerSubtypeStr</a></div><div class=\"ttdeci\">static const char * getTriggerSubtypeStr(int subtype)</div><div class=\"ttdoc\">Returns string that correspond with trigger subtype in ha_triggerSubtype_t format https://www....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00158\">haTrigger.h:158</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421ba791944b6979069dd5f7d962556ddc604\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba791944b6979069dd5f7d962556ddc604\">button_3</a></div><div class=\"ttdeci\">@ button_3</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00109\">haTrigger.h:109</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a42e581722e8a914238bf0d06d8f8f51b\"><div class=\"ttname\"><a href=\"classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b\">HATrigger::setPayload</a></div><div class=\"ttdeci\">void setPayload(const char *payload)</div><div class=\"ttdoc\">Optional payload to match the payload being sent over the topic https://www.home-assistant....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8cpp_source.html#l00013\">haTrigger.cpp:13</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8\">button_6</a></div><div class=\"ttdeci\">@ button_6</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00113\">haTrigger.h:112</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_aadb3c5676c00fc0c8b3939888e408d2b\"><div class=\"ttname\"><a href=\"classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b\">HAEntity::entityConfig</a></div><div class=\"ttdeci\">DynamicJsonDocument * entityConfig</div><div class=\"ttdoc\">JSON object to be sent to gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00138\">haEntity.h:138</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421ba83ee6b65c9abe8a11ed4d9692b0a5ae7\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba83ee6b65c9abe8a11ed4d9692b0a5ae7\">turn_off</a></div><div class=\"ttdeci\">@ turn_off</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00106\">haTrigger.h:106</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6\">button_quintuple_press</a></div><div class=\"ttdeci\">@ button_quintuple_press</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00091\">haTrigger.h:90</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html\"><div class=\"ttname\"><a href=\"haEntity_8h.html\">haEntity.h</a></div><div class=\"ttdoc\">Defines an entity for Home Assistant autodiscovery.</div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421ba45efbed920db6ce550810ced085e9b18\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba45efbed920db6ce550810ced085e9b18\">button_5</a></div><div class=\"ttdeci\">@ button_5</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00111\">haTrigger.h:111</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_ab16d63fc344bac17dd99834be15585aa\"><div class=\"ttname\"><a href=\"classHATrigger.html#ab16d63fc344bac17dd99834be15585aa\">HATrigger::setSubtype</a></div><div class=\"ttdeci\">void setSubtype(const char *subtype)</div><div class=\"ttdoc\">Set trigger subtype as char string https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00205\">haTrigger.h:205</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a4fb9c73855aba7474fb26e13bd74f3cf\"><div class=\"ttname\"><a href=\"classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf\">HATrigger::setSubtype</a></div><div class=\"ttdeci\">void setSubtype(ha_triggerSubtype_t subtype)</div><div class=\"ttdoc\">Set trigger subtype as ha_triggerSubtype_t https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00196\">haTrigger.h:196</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a98aa5d190f3afda4339a9f35a8f59eef\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a98aa5d190f3afda4339a9f35a8f59eef\">ha_triggerTypeStr</a></div><div class=\"ttdeci\">static const char * ha_triggerTypeStr[]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00093\">haTrigger.h:93</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72c\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c\">ha_triggerType_t</a></div><div class=\"ttdeci\">ha_triggerType_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00082\">haTrigger.h:82</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_aeff41e84aaa1b70df8137cbd05d8ddbe\"><div class=\"ttname\"><a href=\"classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe\">HAEntity::capacity</a></div><div class=\"ttdeci\">size_t capacity</div><div class=\"ttdoc\">JSON object memory reservation length.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00134\">haEntity.h:134</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72ca6ba5b8432af7d558ba016c02ee898712\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca6ba5b8432af7d558ba016c02ee898712\">button_short_release</a></div><div class=\"ttdeci\">@ button_short_release</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00084\">haTrigger.h:84</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72cadc63942310d712596e55a8f04680fa60\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cadc63942310d712596e55a8f04680fa60\">button_long_press</a></div><div class=\"ttdeci\">@ button_long_press</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00085\">haTrigger.h:85</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421ba9db0c27b13d686faf831f1515a9a5340\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9db0c27b13d686faf831f1515a9a5340\">button_4</a></div><div class=\"ttdeci\">@ button_4</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00110\">haTrigger.h:110</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7\">button_1</a></div><div class=\"ttdeci\">@ button_1</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00107\">haTrigger.h:107</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a79b008a5a9f249d1e6fd72a710636ca7\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7\">ha_subtype</a></div><div class=\"ttdeci\">constexpr auto ha_subtype</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00050\">haEntity.h:50</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421b\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b\">ha_triggerSubtype_t</a></div><div class=\"ttdeci\">ha_triggerSubtype_t</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00104\">haTrigger.h:104</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_a375fbbd60c980937a4d80c1156fb9d33\"><div class=\"ttname\"><a href=\"haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33\">ha_device_type</a></div><div class=\"ttdeci\">constexpr auto ha_device_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00023\">haEntity.h:23</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html_a8c9d02fb762b3af1739ba632479473d5\"><div class=\"ttname\"><a href=\"classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5\">HAEntity::deviceType</a></div><div class=\"ttdeci\">haDeviceType_t deviceType</div><div class=\"ttdoc\">HomeAssistant entity device type.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00135\">haEntity.h:135</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421ba9482c259cff58c7784eed9f35f927400\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9482c259cff58c7784eed9f35f927400\">button_2</a></div><div class=\"ttdeci\">@ button_2</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00108\">haTrigger.h:108</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0102b90994b2b8c9c461faf7a13d453\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453\">ha_type</a></div><div class=\"ttdeci\">constexpr auto ha_type</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00049\">haEntity.h:49</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1\">turn_on</a></div><div class=\"ttdeci\">@ turn_on</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00105\">haTrigger.h:105</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a09bed6e6ead886a7b0389afe7470835c\"><div class=\"ttname\"><a href=\"classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c\">HATrigger::getDiscoveryJson</a></div><div class=\"ttdeci\">static size_t getDiscoveryJson(char *buffer, size_t buflen, const char *nodeName, const char *networkName, DynamicJsonDocument *inputJSON)</div><div class=\"ttdoc\">Allows Gateway to get Home Assistant discovery message using Trigger template.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8cpp_source.html#l00039\">haTrigger.cpp:39</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2\">button_short_press</a></div><div class=\"ttdeci\">@ button_short_press</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00083\">haTrigger.h:83</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_af86406b876cfddbe13ef433582600658\"><div class=\"ttname\"><a href=\"classHATrigger.html#af86406b876cfddbe13ef433582600658\">HATrigger::setType</a></div><div class=\"ttdeci\">void setType(const char *type)</div><div class=\"ttdoc\">Set trigger type as char string https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00187\">haTrigger.h:187</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html\"><div class=\"ttname\"><a href=\"classHATrigger.html\">HATrigger</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00126\">haTrigger.h:126</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a91af9e612da244483b5704c4ed835d0f\"><div class=\"ttname\"><a href=\"classHATrigger.html#a91af9e612da244483b5704c4ed835d0f\">HATrigger::HATrigger</a></div><div class=\"ttdeci\">HATrigger()</div><div class=\"ttdoc\">Trigger constructor.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00132\">haTrigger.h:132</a></div></div>\n<div class=\"ttc\" id=\"ahaEntity_8h_html_aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\"><div class=\"ttname\"><a href=\"haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e\">DEVICE_TRIGGER</a></div><div class=\"ttdeci\">@ DEVICE_TRIGGER</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00060\">haEntity.h:60</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_a25585b365d726848d22ad5c4f299d803\"><div class=\"ttname\"><a href=\"classHATrigger.html#a25585b365d726848d22ad5c4f299d803\">HATrigger::getTriggerTypeStr</a></div><div class=\"ttdeci\">static const char * getTriggerTypeStr(int type)</div><div class=\"ttdoc\">Returns string that correspond with trigger type in ha_triggerType_t format https://www....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00145\">haTrigger.h:145</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72ca000c3a771115a30a1c497a9cb8a19014\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca000c3a771115a30a1c497a9cb8a19014\">button_quadruple_press</a></div><div class=\"ttdeci\">@ button_quadruple_press</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00089\">haTrigger.h:89</a></div></div>\n<div class=\"ttc\" id=\"aclassHAEntity_html\"><div class=\"ttname\"><a href=\"classHAEntity.html\">HAEntity</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haEntity_8h_source.html#l00132\">haEntity.h:132</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_a291e753178ee4e52fb182fc2af9cd566\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#a291e753178ee4e52fb182fc2af9cd566\">ha_triggerSubtypeStr</a></div><div class=\"ttdeci\">static const char * ha_triggerSubtypeStr[]</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00115\">haTrigger.h:115</a></div></div>\n<div class=\"ttc\" id=\"aclassHATrigger_html_adda48fb69d4ad6c9f95dfb7f7f92b79c\"><div class=\"ttname\"><a href=\"classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c\">HATrigger::setType</a></div><div class=\"ttdeci\">void setType(ha_triggerType_t type)</div><div class=\"ttdoc\">Set trigger type as ha_triggerType_t https://www.home-assistant.io/integrations/device_trigger....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00178\">haTrigger.h:178</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72ca9cfbd94dabbbdcb25bdff5a9fbcead58\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca9cfbd94dabbbdcb25bdff5a9fbcead58\">button_double_press</a></div><div class=\"ttdeci\">@ button_double_press</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00087\">haTrigger.h:87</a></div></div>\n<div class=\"ttc\" id=\"ahaTrigger_8h_html_ada6f3c61fe343e74af1f533d73d3c72cae310001a87f47b0d5398c055f0dac403\"><div class=\"ttname\"><a href=\"haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae310001a87f47b0d5398c055f0dac403\">button_triple_press</a></div><div class=\"ttdeci\">@ button_triple_press</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"haTrigger_8h_source.html#l00088\">haTrigger.h:88</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/helperFunctions_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/helperFunctions.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Macros</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">helperFunctions.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Auxiliary function definition.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>&quot;</code><br />\n</div>\n<p><a href=\"helperFunctions_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"define-members\"></a>\nMacros</h2></td></tr>\n<tr class=\"memitem:a58ce36916c399104e18d32ff090f21c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6\">MAX_STR_LEN</a>&#160;&#160;&#160;1000</td></tr>\n<tr class=\"memdesc:a58ce36916c399104e18d32ff090f21c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Key length used by selected crypto algorythm.  <a href=\"helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6\">More...</a><br /></td></tr>\n<tr class=\"separator:a58ce36916c399104e18d32ff090f21c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad6e69a2870c8f219cc679677af110849\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a>&#160;&#160;&#160;&quot;%02X:%02X:%02X:%02X:%02X:%02X&quot;</td></tr>\n<tr class=\"separator:ad6e69a2870c8f219cc679677af110849\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a34002f0936dac45b08bba5436ddc8a09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (const uint8_t *buffer, uint16_t len)</td></tr>\n<tr class=\"memdesc:a34002f0936dac45b08bba5436ddc8a09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug helper function that generates a string that represent a buffer hexadecimal values.  <a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">More...</a><br /></td></tr>\n<tr class=\"separator:a34002f0936dac45b08bba5436ddc8a09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad22aae6146b9da40aa95e2acfe12f6d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3\">initWiFi</a> (uint8_t channel, const char *networkName, const char *networkKey, uint8_t role)</td></tr>\n<tr class=\"memdesc:ad22aae6146b9da40aa95e2acfe12f6d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initalizes WiFi interfaces on ESP8266 or ESP32.  <a href=\"helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3\">More...</a><br /></td></tr>\n<tr class=\"separator:ad22aae6146b9da40aa95e2acfe12f6d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81e44efba216f1a0a981219616eeb8f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t length)</td></tr>\n<tr class=\"memdesc:a81e44efba216f1a0a981219616eeb8f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calculates CRC32 of a buffer.  <a href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">More...</a><br /></td></tr>\n<tr class=\"separator:a81e44efba216f1a0a981219616eeb8f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4aa65746e6dd83962165de3c3191c41f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (const uint8_t *mac, char *extBuffer)</td></tr>\n<tr class=\"memdesc:a4aa65746e6dd83962165de3c3191c41f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug helper function that generates a string that represent a MAC address.  <a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">More...</a><br /></td></tr>\n<tr class=\"separator:a4aa65746e6dd83962165de3c3191c41f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a02961b325403161b54533152d242696a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a> (const char *macAddrString, uint8_t *macBytes)</td></tr>\n<tr class=\"memdesc:a02961b325403161b54533152d242696a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug helper function that creates MAC address byte array from text representation.  <a href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">More...</a><br /></td></tr>\n<tr class=\"separator:a02961b325403161b54533152d242696a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa76d044529f5f932eb6014b50047c02b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a> (const char *input)</td></tr>\n<tr class=\"memdesc:aa76d044529f5f932eb6014b50047c02b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if input string is numeric.  <a href=\"helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b\">More...</a><br /></td></tr>\n<tr class=\"separator:aa76d044529f5f932eb6014b50047c02b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a26eaeecca0f44f0e5cf47b1f044a1306\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html#a26eaeecca0f44f0e5cf47b1f044a1306\">isNumber</a> (const char *input, size_t len)</td></tr>\n<tr class=\"memdesc:a26eaeecca0f44f0e5cf47b1f044a1306\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if input string is numeric.  <a href=\"helperFunctions_8cpp.html#a26eaeecca0f44f0e5cf47b1f044a1306\">More...</a><br /></td></tr>\n<tr class=\"separator:a26eaeecca0f44f0e5cf47b1f044a1306\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d64848792adcc6a1094ea0eef6bed51\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8cpp.html#a8d64848792adcc6a1094ea0eef6bed51\">isNumber</a> (String input)</td></tr>\n<tr class=\"memdesc:a8d64848792adcc6a1094ea0eef6bed51\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if input string is numeric.  <a href=\"helperFunctions_8cpp.html#a8d64848792adcc6a1094ea0eef6bed51\">More...</a><br /></td></tr>\n<tr class=\"separator:a8d64848792adcc6a1094ea0eef6bed51\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Auxiliary function definition. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n<a id=\"ad6e69a2870c8f219cc679677af110849\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad6e69a2870c8f219cc679677af110849\">&#9670;&nbsp;</a></span>MACSTR</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define MACSTR&#160;&#160;&#160;&quot;%02X:%02X:%02X:%02X:%02X:%02X&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00083\">83</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a58ce36916c399104e18d32ff090f21c6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a58ce36916c399104e18d32ff090f21c6\">&#9670;&nbsp;</a></span>MAX_STR_LEN</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define MAX_STR_LEN&#160;&#160;&#160;1000</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Key length used by selected crypto algorythm. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00014\">14</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a81e44efba216f1a0a981219616eeb8f3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81e44efba216f1a0a981219616eeb8f3\">&#9670;&nbsp;</a></span>calculateCRC32()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint32_t calculateCRC32 </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Calculates CRC32 of a buffer. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Input buffer </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Input length </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>CRC32 value </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00064\">64</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"ad22aae6146b9da40aa95e2acfe12f6d3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad22aae6146b9da40aa95e2acfe12f6d3\">&#9670;&nbsp;</a></span>initWiFi()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void initWiFi </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>channel</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>networkName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>networkKey</em> = <code>NULL</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>role</em> = <code>0</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Initalizes WiFi interfaces on ESP8266 or ESP32. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">channel</td><td>WiFi channel for interface initialization </td></tr>\n    <tr><td class=\"paramname\">role</td><td>0 for node, 1 for gateway </td></tr>\n    <tr><td class=\"paramname\">networkName</td><td>Name that gateway AP will take </td></tr>\n    <tr><td class=\"paramname\">networkKey</td><td>Network key. This is not required normally as this is provided using configuration web portal </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00032\">32</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa76d044529f5f932eb6014b50047c02b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa76d044529f5f932eb6014b50047c02b\">&#9670;&nbsp;</a></span>isNumber() <span class=\"overload\">[1/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool isNumber </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>input</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Checks if input string is numeric. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">input</td><td>String to check </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if string is a number </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00169\">169</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a26eaeecca0f44f0e5cf47b1f044a1306\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a26eaeecca0f44f0e5cf47b1f044a1306\">&#9670;&nbsp;</a></span>isNumber() <span class=\"overload\">[2/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool isNumber </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>input</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Checks if input string is numeric. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">input</td><td>String to check </td></tr>\n    <tr><td class=\"paramname\">len</td><td>String length </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if string is a number </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00186\">186</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a8d64848792adcc6a1094ea0eef6bed51\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8d64848792adcc6a1094ea0eef6bed51\">&#9670;&nbsp;</a></span>isNumber() <span class=\"overload\">[3/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool isNumber </td>\n          <td>(</td>\n          <td class=\"paramtype\">String&#160;</td>\n          <td class=\"paramname\"><em>input</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Checks if input string is numeric. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">input</td><td>String to check </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if string is a number </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00202\">202</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a4aa65746e6dd83962165de3c3191c41f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4aa65746e6dd83962165de3c3191c41f\">&#9670;&nbsp;</a></span>mac2str()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char* mac2str </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>extBuffer</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug helper function that generates a string that represent a MAC address. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Pointer to the MAC address </td></tr>\n    <tr><td class=\"paramname\">extBuffer</td><td>Buffer that will store resulting address. It must be 18 bytes long at least. If it is NULL a static buffer will be used </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a pointer to input buffer after writting MAC address on human readable format </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00085\">85</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a34002f0936dac45b08bba5436ddc8a09\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a34002f0936dac45b08bba5436ddc8a09\">&#9670;&nbsp;</a></span>printHexBuffer()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char* printHexBuffer </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug helper function that generates a string that represent a buffer hexadecimal values. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">buffer</td><td>Pointer to the buffer </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Buffer length in number of bytes </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a pointer to the generated string.</dd></dl>\n<p>String has to be used inmediatelly. At least before calling <code><a class=\"el\" href=\"helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09\" title=\"Debug helper function that generates a string that represent a buffer hexadecimal values.\">printHexBuffer()</a></code> again as it uses a static buffer to hold string. It will be overwritten on next call. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00016\">16</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a02961b325403161b54533152d242696a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a02961b325403161b54533152d242696a\">&#9670;&nbsp;</a></span>str2mac()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t* str2mac </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>values</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug helper function that creates MAC address byte array from text representation. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Pointer to the MAC address string </td></tr>\n    <tr><td class=\"paramname\">values</td><td>Buffer that will store byte array. It must be 6 bytes long at least </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a pointer to <code>values</code> input buffer after writting MAC address </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00104\">104</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/helperFunctions_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/helperFunctions.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">helperFunctions.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"helperFunctions_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"helperFunctions_8h.html\">helperFunctions.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &lt;esp_wifi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160; </div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\"><a class=\"line\" href=\"helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6\">   14</a></span>&#160;<span class=\"preprocessor\">#define MAX_STR_LEN 1000 </span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\"></span> </div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09\">   16</a></span>&#160;<span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<span class=\"keyword\">const</span> uint8_t* buffer, uint16_t len) {</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">char</span> tempStr[<a class=\"code\" href=\"helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6\">MAX_STR_LEN</a>];</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;    <span class=\"keywordtype\">int</span> charIndex = 0;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;    memset (tempStr, 0, <a class=\"code\" href=\"helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6\">MAX_STR_LEN</a>);</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160; </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;    <span class=\"keywordflow\">if</span> (buffer) {</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; len; i++) {</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;            <span class=\"keywordflow\">if</span> (charIndex &lt; <a class=\"code\" href=\"helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6\">MAX_STR_LEN</a> - 2) {</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                charIndex += sprintf (tempStr + charIndex, <span class=\"stringliteral\">&quot;%02X &quot;</span>, buffer[i]);</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    <span class=\"keywordflow\">return</span> tempStr;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160; </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"helperFunctions_8h.html#a5efcbae54fb852b8a9b23a25931e3f7a\">   32</a></span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3\">initWiFi</a> (uint8_t channel, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkKey, uint8_t role) {</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;initWifi&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;    <span class=\"keywordflow\">if</span> (role == 0) { <span class=\"comment\">// Node</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        WiFi.mode (WIFI_STA);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#ifdef ESP32</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        esp_err_t err_ok;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keywordflow\">if</span> ((err_ok = esp_wifi_set_promiscuous (<span class=\"keyword\">true</span>))) {</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting promiscuous mode: %s&quot;</span>, esp_err_to_name (err_ok));</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keywordflow\">if</span> ((err_ok = esp_wifi_set_channel (channel, WIFI_SECOND_CHAN_NONE))) {</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting wifi channel: %s&quot;</span>, esp_err_to_name (err_ok));</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keywordflow\">if</span> ((err_ok = esp_wifi_set_promiscuous (<span class=\"keyword\">false</span>))) {</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;            DEBUG_ERROR (<span class=\"stringliteral\">&quot;Error setting promiscuous mode off: %s&quot;</span>, esp_err_to_name (err_ok));</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        WiFi.disconnect ();</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        wifi_set_channel (channel);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Mode set to STA. Channel %u&quot;</span>, channel);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    } <span class=\"keywordflow\">else</span> { <span class=\"comment\">// Gateway</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        WiFi.mode (WIFI_AP);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        WiFi.softAP (networkName, networkKey, channel);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        DEBUG_DBG (<span class=\"stringliteral\">&quot;Mode set to AP in channel %u&quot;</span>, channel);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160; </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;AP MAC address of this device is %s&quot;</span>, WiFi.softAPmacAddress ().c_str ());</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;    DEBUG_INFO (<span class=\"stringliteral\">&quot;STA MAC address of this device is %s&quot;</span>, WiFi.macAddress ().c_str ());</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160; </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"helperFunctions_8h.html#a81e44efba216f1a0a981219616eeb8f3\">   64</a></span>&#160;uint32_t <a class=\"code\" href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length) {</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;    uint32_t crc = 0xffffffff;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;    <span class=\"keywordflow\">while</span> (length--) {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        uint8_t c = *<a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>++;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keywordflow\">for</span> (uint32_t i = 0x80; i &gt; 0; i &gt;&gt;= 1) {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;            <span class=\"keywordtype\">bool</span> bit = crc &amp; 0x80000000;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;            <span class=\"keywordflow\">if</span> (c &amp; i) {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                bit = !bit;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;            crc &lt;&lt;= 1;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;            <span class=\"keywordflow\">if</span> (bit) {</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                crc ^= 0x04c11db7;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;    <span class=\"keywordflow\">return</span> crc;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#undef MACSTR</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">   83</a></span>&#160;<span class=\"preprocessor\">#define MACSTR &quot;%02X:%02X:%02X:%02X:%02X:%02X&quot;</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"helperFunctions_8h.html#aa4d5213c3c8ecf522b12f0469ffbe840\">   85</a></span>&#160;<span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keywordtype\">char</span>* extBuffer) {</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;    <span class=\"keywordtype\">char</span>* buffer;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;    <span class=\"keyword\">static</span> <span class=\"keywordtype\">char</span> staticBuffer[<a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3];</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;    <span class=\"keywordflow\">if</span> (!extBuffer){</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        buffer = staticBuffer;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;    } <span class=\"keywordflow\">else</span> {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        buffer = extBuffer;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;    <span class=\"keywordflow\">if</span> (mac &amp;&amp; buffer) {</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"comment\">//DEBUG_DBG (&quot;mac2str %02x:%02x:%02x:%02x:%02x:%02x&quot;,mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        snprintf (buffer, <a class=\"code\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a> * 3, <a class=\"code\" href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a>, MAC2STR (mac));</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        <span class=\"comment\">//DEBUG_DBG (&quot;Address: %s&quot;, buffer);</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"keywordflow\">return</span> buffer;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;    <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160; </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"helperFunctions_8h.html#a0fdf837000194d53f0d019f024e0f4a1\">  104</a></span>&#160;uint8_t* <a class=\"code\" href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* macAddrString, uint8_t* macBytes) {</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;    <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span> cSep = <span class=\"charliteral\">&#39;:&#39;</span>;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160; </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;    <span class=\"keywordflow\">if</span> (!macBytes) {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160; </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;    <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; 6; ++i) {</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> iNumber = 0;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        <span class=\"keywordtype\">char</span> ch;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160; </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"comment\">//Convert letter into lower case.</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        ch = tolower (*macAddrString++);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160; </div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keywordflow\">if</span> ((ch &lt; &#39;0&#39; || ch &gt; <span class=\"charliteral\">&#39;9&#39;</span>) &amp;&amp; (ch &lt; &#39;a&#39; || ch &gt; <span class=\"charliteral\">&#39;f&#39;</span>)) {</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;            <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160; </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        <span class=\"comment\">//Convert into number. </span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"comment\">//  a. If character is digit then ch - &#39;0&#39;</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"comment\">//  b. else (ch - &#39;a&#39; + 10) it is done </span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        <span class=\"comment\">//        because addition of 10 takes correct value.</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        iNumber = isdigit (ch) ? (ch - <span class=\"charliteral\">&#39;0&#39;</span>) : (ch - <span class=\"charliteral\">&#39;a&#39;</span> + 10);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        ch = tolower (*macAddrString);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160; </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keywordflow\">if</span> ((i &lt; 5 &amp;&amp; ch != cSep) ||</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;            (i == 5 &amp;&amp; ch != <span class=\"charliteral\">&#39;\\0&#39;</span> &amp;&amp; !isspace (ch))) {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;            ++macAddrString;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160; </div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;            <span class=\"keywordflow\">if</span> ((ch &lt; &#39;0&#39; || ch &gt; <span class=\"charliteral\">&#39;9&#39;</span>) &amp;&amp; (ch &lt; &#39;a&#39; || ch &gt; <span class=\"charliteral\">&#39;f&#39;</span>)) {</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160; </div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;            iNumber &lt;&lt;= 4;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;            iNumber += isdigit (ch) ? (ch - <span class=\"charliteral\">&#39;0&#39;</span>) : (ch - <span class=\"charliteral\">&#39;a&#39;</span> + 10);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;            ch = *macAddrString;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160; </div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;            <span class=\"keywordflow\">if</span> (i &lt; 5 &amp;&amp; ch != cSep) {</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                <span class=\"keywordflow\">return</span> NULL;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;            }</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        <span class=\"comment\">/* Store result.  */</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        macBytes[i] = (<span class=\"keywordtype\">unsigned</span> char)iNumber;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        <span class=\"comment\">/* Skip cSep.  */</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        ++macAddrString;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;    <span class=\"keywordflow\">return</span> macBytes;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160; </div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;<span class=\"preprocessor\">#ifdef ESP8266</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* IRAM_ATTR extractFileName (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* path) {</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;    <span class=\"keywordtype\">size_t</span> i = 0;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;    <span class=\"keywordtype\">size_t</span> pos = 0;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;    <span class=\"keywordtype\">char</span>* p = (<span class=\"keywordtype\">char</span>*)path;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;    <span class=\"keywordflow\">while</span> (*p) {</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        i++;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        <span class=\"keywordflow\">if</span> (*p == <span class=\"charliteral\">&#39;/&#39;</span> || *p == <span class=\"charliteral\">&#39;\\\\&#39;</span>) {</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;            pos = i;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        p++;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;    <span class=\"keywordflow\">return</span> path + pos;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160; </div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b\">  169</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* input) {</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;    <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> index = 0;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;    <span class=\"keywordtype\">size_t</span> len = strlen (input);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160; </div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;    <span class=\"keywordflow\">if</span> (!len) {</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160; </div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;    <span class=\"keywordflow\">while</span> (index &lt; len) {</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <span class=\"keywordflow\">if</span> (!isDigit (input[index])) {</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        index++;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160; </div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\"><a class=\"line\" href=\"helperFunctions_8h.html#a26eaeecca0f44f0e5cf47b1f044a1306\">  186</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* input, <span class=\"keywordtype\">size_t</span> len) {</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;    <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> index = 0;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160; </div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;    <span class=\"keywordflow\">if</span> (!len) {</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160; </div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;    <span class=\"keywordflow\">while</span> (input[index] != <span class=\"charliteral\">&#39;\\0&#39;</span> &amp;&amp; index &lt; len) {</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        <span class=\"keywordflow\">if</span> (!isDigit (input[index])) {</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        index++;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160; </div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"helperFunctions_8h.html#a8d64848792adcc6a1094ea0eef6bed51\">  202</a></span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a> (String input) {</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;    <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> index = 0;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;    <span class=\"keywordtype\">size_t</span> len = input.length ();</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160; </div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;    <span class=\"keywordflow\">if</span> (!len) {</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160; </div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;    <span class=\"keywordflow\">while</span> (index &lt; len) {</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        <span class=\"keywordflow\">if</span> (!isDigit (input[index])) {</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;            <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        index++;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;    <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160; </div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"comment\">//int str2mac (const char* mac, uint8_t* values) {</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;<span class=\"comment\">//  int error = std::sscanf (mac, &quot;%02x:%02x:%02x:%02x:%02x:%02x&quot;, &amp;values[0], &amp;values[1], &amp;values[2], &amp;values[3], &amp;values[4], &amp;values[5]);</span></div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"comment\">//  Serial.printf (&quot;Error: %d&quot;, error);</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"comment\">//  if (error == 6) {</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;<span class=\"comment\">//      for (int i = 0; i &lt; 6; i++) {</span></div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;<span class=\"comment\">//          Serial.println (values[i]);</span></div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"comment\">//      }</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"comment\">//      return 1;</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"comment\">//  }</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;<span class=\"comment\">//  else {</span></div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;<span class=\"comment\">//      return 0;</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"comment\">//  }</span></div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"comment\">//}</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aEnigmaIoTconfigAdvanced_8h_html_a479714978e5c2a44dce41ae3be800ffd\"><div class=\"ttname\"><a href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a></div><div class=\"ttdeci\">static const size_t ENIGMAIOT_ADDR_LEN</div><div class=\"ttdoc\">Address size. Mac address = 6 bytes.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"EnigmaIoTconfigAdvanced_8h_source.html#l00023\">EnigmaIoTconfigAdvanced.h:23</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_ad22aae6146b9da40aa95e2acfe12f6d3\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3\">initWiFi</a></div><div class=\"ttdeci\">void initWiFi(uint8_t channel, const char *networkName, const char *networkKey, uint8_t role)</div><div class=\"ttdoc\">Initalizes WiFi interfaces on ESP8266 or ESP32.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00032\">helperFunctions.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a02961b325403161b54533152d242696a\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a02961b325403161b54533152d242696a\">str2mac</a></div><div class=\"ttdeci\">uint8_t * str2mac(const char *macAddrString, uint8_t *macBytes)</div><div class=\"ttdoc\">Debug helper function that creates MAC address byte array from text representation.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00104\">helperFunctions.cpp:104</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a58ce36916c399104e18d32ff090f21c6\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6\">MAX_STR_LEN</a></div><div class=\"ttdeci\">#define MAX_STR_LEN</div><div class=\"ttdoc\">Key length used by selected crypto algorythm.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00014\">helperFunctions.cpp:14</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_ad6e69a2870c8f219cc679677af110849\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849\">MACSTR</a></div><div class=\"ttdeci\">#define MACSTR</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00083\">helperFunctions.cpp:83</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a4aa65746e6dd83962165de3c3191c41f\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html\">helperFunctions.h</a></div><div class=\"ttdoc\">Auxiliary function definition.</div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_a81e44efba216f1a0a981219616eeb8f3\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a></div><div class=\"ttdeci\">uint32_t calculateCRC32(const uint8_t *data, size_t length)</div><div class=\"ttdoc\">Calculates CRC32 of a buffer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00064\">helperFunctions.cpp:64</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8cpp_html_aa76d044529f5f932eb6014b50047c02b\"><div class=\"ttname\"><a href=\"helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a></div><div class=\"ttdeci\">bool isNumber(const char *input)</div><div class=\"ttdoc\">Checks if input string is numeric.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00169\">helperFunctions.cpp:169</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/helperFunctions_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/helperFunctions.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">helperFunctions.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Auxiliary function definition.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;WProgram.h&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIoTconfig_8h_source.html\">EnigmaIoTconfig.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>&quot;</code><br />\n</div>\n<p><a href=\"helperFunctions_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a34002f0936dac45b08bba5436ddc8a09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (const uint8_t *buffer, uint16_t len)</td></tr>\n<tr class=\"memdesc:a34002f0936dac45b08bba5436ddc8a09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug helper function that generates a string that represent a buffer hexadecimal values.  <a href=\"helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09\">More...</a><br /></td></tr>\n<tr class=\"separator:a34002f0936dac45b08bba5436ddc8a09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa4d5213c3c8ecf522b12f0469ffbe840\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8h.html#aa4d5213c3c8ecf522b12f0469ffbe840\">mac2str</a> (const uint8_t *mac, char *extBuffer=NULL)</td></tr>\n<tr class=\"memdesc:aa4d5213c3c8ecf522b12f0469ffbe840\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug helper function that generates a string that represent a MAC address.  <a href=\"helperFunctions_8h.html#aa4d5213c3c8ecf522b12f0469ffbe840\">More...</a><br /></td></tr>\n<tr class=\"separator:aa4d5213c3c8ecf522b12f0469ffbe840\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0fdf837000194d53f0d019f024e0f4a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t *&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8h.html#a0fdf837000194d53f0d019f024e0f4a1\">str2mac</a> (const char *mac, uint8_t *values)</td></tr>\n<tr class=\"memdesc:a0fdf837000194d53f0d019f024e0f4a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Debug helper function that creates MAC address byte array from text representation.  <a href=\"helperFunctions_8h.html#a0fdf837000194d53f0d019f024e0f4a1\">More...</a><br /></td></tr>\n<tr class=\"separator:a0fdf837000194d53f0d019f024e0f4a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5efcbae54fb852b8a9b23a25931e3f7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8h.html#a5efcbae54fb852b8a9b23a25931e3f7a\">initWiFi</a> (uint8_t channel, const char *networkName, const char *networkKey=NULL, uint8_t role=0)</td></tr>\n<tr class=\"memdesc:a5efcbae54fb852b8a9b23a25931e3f7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Initalizes WiFi interfaces on ESP8266 or ESP32.  <a href=\"helperFunctions_8h.html#a5efcbae54fb852b8a9b23a25931e3f7a\">More...</a><br /></td></tr>\n<tr class=\"separator:a5efcbae54fb852b8a9b23a25931e3f7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a81e44efba216f1a0a981219616eeb8f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8h.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a> (const uint8_t *<a class=\"el\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, size_t length)</td></tr>\n<tr class=\"memdesc:a81e44efba216f1a0a981219616eeb8f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Calculates CRC32 of a buffer.  <a href=\"helperFunctions_8h.html#a81e44efba216f1a0a981219616eeb8f3\">More...</a><br /></td></tr>\n<tr class=\"separator:a81e44efba216f1a0a981219616eeb8f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa76d044529f5f932eb6014b50047c02b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a> (const char *input)</td></tr>\n<tr class=\"memdesc:aa76d044529f5f932eb6014b50047c02b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if input string is numeric.  <a href=\"helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b\">More...</a><br /></td></tr>\n<tr class=\"separator:aa76d044529f5f932eb6014b50047c02b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a26eaeecca0f44f0e5cf47b1f044a1306\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8h.html#a26eaeecca0f44f0e5cf47b1f044a1306\">isNumber</a> (const char *input, size_t len)</td></tr>\n<tr class=\"memdesc:a26eaeecca0f44f0e5cf47b1f044a1306\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if input string is numeric.  <a href=\"helperFunctions_8h.html#a26eaeecca0f44f0e5cf47b1f044a1306\">More...</a><br /></td></tr>\n<tr class=\"separator:a26eaeecca0f44f0e5cf47b1f044a1306\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a8d64848792adcc6a1094ea0eef6bed51\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"helperFunctions_8h.html#a8d64848792adcc6a1094ea0eef6bed51\">isNumber</a> (String input)</td></tr>\n<tr class=\"memdesc:a8d64848792adcc6a1094ea0eef6bed51\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Checks if input string is numeric.  <a href=\"helperFunctions_8h.html#a8d64848792adcc6a1094ea0eef6bed51\">More...</a><br /></td></tr>\n<tr class=\"separator:a8d64848792adcc6a1094ea0eef6bed51\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Auxiliary function definition. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"helperFunctions_8h_source.html\">helperFunctions.h</a>.</p>\n</div><h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a81e44efba216f1a0a981219616eeb8f3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a81e44efba216f1a0a981219616eeb8f3\">&#9670;&nbsp;</a></span>calculateCRC32()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint32_t calculateCRC32 </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>data</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>length</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Calculates CRC32 of a buffer. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">data</td><td>Input buffer </td></tr>\n    <tr><td class=\"paramname\">length</td><td>Input length </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>CRC32 value </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00064\">64</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a5efcbae54fb852b8a9b23a25931e3f7a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5efcbae54fb852b8a9b23a25931e3f7a\">&#9670;&nbsp;</a></span>initWiFi()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void initWiFi </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>channel</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>networkName</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>networkKey</em> = <code>NULL</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t&#160;</td>\n          <td class=\"paramname\"><em>role</em> = <code>0</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Initalizes WiFi interfaces on ESP8266 or ESP32. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">channel</td><td>WiFi channel for interface initialization </td></tr>\n    <tr><td class=\"paramname\">role</td><td>0 for node, 1 for gateway </td></tr>\n    <tr><td class=\"paramname\">networkName</td><td>Name that gateway AP will take </td></tr>\n    <tr><td class=\"paramname\">networkKey</td><td>Network key. This is not required normally as this is provided using configuration web portal </td></tr>\n  </table>\n  </dd>\n</dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00032\">32</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa76d044529f5f932eb6014b50047c02b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa76d044529f5f932eb6014b50047c02b\">&#9670;&nbsp;</a></span>isNumber() <span class=\"overload\">[1/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool isNumber </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>input</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Checks if input string is numeric. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">input</td><td>String to check </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if string is a number </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00169\">169</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a26eaeecca0f44f0e5cf47b1f044a1306\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a26eaeecca0f44f0e5cf47b1f044a1306\">&#9670;&nbsp;</a></span>isNumber() <span class=\"overload\">[2/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool isNumber </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>input</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Checks if input string is numeric. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">input</td><td>String to check </td></tr>\n    <tr><td class=\"paramname\">len</td><td>String length </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if string is a number </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00186\">186</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a8d64848792adcc6a1094ea0eef6bed51\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a8d64848792adcc6a1094ea0eef6bed51\">&#9670;&nbsp;</a></span>isNumber() <span class=\"overload\">[3/3]</span></h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool isNumber </td>\n          <td>(</td>\n          <td class=\"paramtype\">String&#160;</td>\n          <td class=\"paramname\"><em>input</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Checks if input string is numeric. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">input</td><td>String to check </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd><code>true</code> if string is a number </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00202\">202</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"aa4d5213c3c8ecf522b12f0469ffbe840\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa4d5213c3c8ecf522b12f0469ffbe840\">&#9670;&nbsp;</a></span>mac2str()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char* mac2str </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">char *&#160;</td>\n          <td class=\"paramname\"><em>extBuffer</em> = <code>NULL</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug helper function that generates a string that represent a MAC address. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Pointer to the MAC address </td></tr>\n    <tr><td class=\"paramname\">extBuffer</td><td>Buffer that will store resulting address. It must be 18 bytes long at least. If it is NULL a static buffer will be used </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a pointer to input buffer after writting MAC address on human readable format </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00085\">85</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a34002f0936dac45b08bba5436ddc8a09\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a34002f0936dac45b08bba5436ddc8a09\">&#9670;&nbsp;</a></span>printHexBuffer()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char* printHexBuffer </td>\n          <td>(</td>\n          <td class=\"paramtype\">const uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>buffer</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint16_t&#160;</td>\n          <td class=\"paramname\"><em>len</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug helper function that generates a string that represent a buffer hexadecimal values. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">buffer</td><td>Pointer to the buffer </td></tr>\n    <tr><td class=\"paramname\">len</td><td>Buffer length in number of bytes </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a pointer to the generated string.</dd></dl>\n<p>String has to be used inmediatelly. At least before calling <code><a class=\"el\" href=\"helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09\" title=\"Debug helper function that generates a string that represent a buffer hexadecimal values.\">printHexBuffer()</a></code> again as it uses a static buffer to hold string. It will be overwritten on next call. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00016\">16</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n<a id=\"a0fdf837000194d53f0d019f024e0f4a1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0fdf837000194d53f0d019f024e0f4a1\">&#9670;&nbsp;</a></span>str2mac()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t* str2mac </td>\n          <td>(</td>\n          <td class=\"paramtype\">const char *&#160;</td>\n          <td class=\"paramname\"><em>mac</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint8_t *&#160;</td>\n          <td class=\"paramname\"><em>values</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Debug helper function that creates MAC address byte array from text representation. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">mac</td><td>Pointer to the MAC address string </td></tr>\n    <tr><td class=\"paramname\">values</td><td>Buffer that will store byte array. It must be 6 bytes long at least </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns a pointer to <code>values</code> input buffer after writting MAC address </dd></dl>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"helperFunctions_8cpp_source.html#l00104\">104</a> of file <a class=\"el\" href=\"helperFunctions_8cpp_source.html\">helperFunctions.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/helperFunctions_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/helperFunctions.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">helperFunctions.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"helperFunctions_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _HELPERFUNCTIONS_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _HELPERFUNCTIONS_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160; </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;Arduino.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;WProgram.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if defined(ESP8266)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;ESP8266WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#elif defined(ESP32)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;WiFi.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a> (<span class=\"keyword\">const</span> uint8_t* buffer, uint16_t len);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160; </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"keywordtype\">char</span>* <a class=\"code\" href=\"helperFunctions_8h.html#aa4d5213c3c8ecf522b12f0469ffbe840\">mac2str</a> (<span class=\"keyword\">const</span> uint8_t* mac, <span class=\"keywordtype\">char</span>* extBuffer = NULL);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;uint8_t* <a class=\"code\" href=\"helperFunctions_8h.html#a0fdf837000194d53f0d019f024e0f4a1\">str2mac</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* mac, uint8_t* values);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"keywordtype\">void</span> <a class=\"code\" href=\"helperFunctions_8h.html#a5efcbae54fb852b8a9b23a25931e3f7a\">initWiFi</a> (uint8_t channel, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkName, <span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* networkKey = NULL, uint8_t role = 0);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160; </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;uint32_t <a class=\"code\" href=\"helperFunctions_8h.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a> (<span class=\"keyword\">const</span> uint8_t* <a class=\"code\" href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a>, <span class=\"keywordtype\">size_t</span> length);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160; </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* input);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160; </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a> (<span class=\"keyword\">const</span> <span class=\"keywordtype\">char</span>* input, <span class=\"keywordtype\">size_t</span> len);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160; </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a> (String input);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aEnigmaIoTconfig_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIoTconfig_8h.html\">EnigmaIoTconfig.h</a></div><div class=\"ttdoc\">Parameter configuration.</div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html_aa4d5213c3c8ecf522b12f0469ffbe840\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html#aa4d5213c3c8ecf522b12f0469ffbe840\">mac2str</a></div><div class=\"ttdeci\">char * mac2str(const uint8_t *mac, char *extBuffer=NULL)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a MAC address.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00085\">helperFunctions.cpp:85</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html_a5efcbae54fb852b8a9b23a25931e3f7a\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html#a5efcbae54fb852b8a9b23a25931e3f7a\">initWiFi</a></div><div class=\"ttdeci\">void initWiFi(uint8_t channel, const char *networkName, const char *networkKey=NULL, uint8_t role=0)</div><div class=\"ttdoc\">Initalizes WiFi interfaces on ESP8266 or ESP32.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00032\">helperFunctions.cpp:32</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html_a81e44efba216f1a0a981219616eeb8f3\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html#a81e44efba216f1a0a981219616eeb8f3\">calculateCRC32</a></div><div class=\"ttdeci\">uint32_t calculateCRC32(const uint8_t *data, size_t length)</div><div class=\"ttdoc\">Calculates CRC32 of a buffer.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00064\">helperFunctions.cpp:64</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html_a34002f0936dac45b08bba5436ddc8a09\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09\">printHexBuffer</a></div><div class=\"ttdeci\">char * printHexBuffer(const uint8_t *buffer, uint16_t len)</div><div class=\"ttdoc\">Debug helper function that generates a string that represent a buffer hexadecimal values.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00016\">helperFunctions.cpp:16</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html_a0fdf837000194d53f0d019f024e0f4a1\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html#a0fdf837000194d53f0d019f024e0f4a1\">str2mac</a></div><div class=\"ttdeci\">uint8_t * str2mac(const char *mac, uint8_t *values)</div><div class=\"ttdoc\">Debug helper function that creates MAC address byte array from text representation.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00104\">helperFunctions.cpp:104</a></div></div>\n<div class=\"ttc\" id=\"aGwOutput__generic_8h_html_a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\"><div class=\"ttname\"><a href=\"GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b\">data</a></div><div class=\"ttdeci\">@ data</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"GwOutput__generic_8h_source.html#l00023\">GwOutput_generic.h:23</a></div></div>\n<div class=\"ttc\" id=\"ahelperFunctions_8h_html_aa76d044529f5f932eb6014b50047c02b\"><div class=\"ttname\"><a href=\"helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b\">isNumber</a></div><div class=\"ttdeci\">bool isNumber(const char *input)</div><div class=\"ttdoc\">Checks if input string is numeric.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"helperFunctions_8cpp_source.html#l00169\">helperFunctions.cpp:169</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTdebug_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a></div><div class=\"ttdoc\">Auxiliary functions for debugging over Serial.</div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/hierarchy.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Class Hierarchy</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Class Hierarchy</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class=\"directory\">\n<div class=\"levels\">[detail level <span onclick=\"javascript:toggleLevel(1);\">1</span><span onclick=\"javascript:toggleLevel(2);\">2</span>]</div><table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_0_\" class=\"arrow\" onclick=\"toggleFolder('0_')\">&#9660;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classComms__halClass.html\" target=\"_self\">Comms_halClass</a></td><td class=\"desc\">Interface for communication subsystem abstraction layer definition </td></tr>\n<tr id=\"row_0_0_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEspnow__halClass.html\" target=\"_self\">Espnow_halClass</a></td><td class=\"desc\">Definition for ESP-NOW hardware abstraction layer </td></tr>\n<tr id=\"row_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structcomms__queue__item__t.html\" target=\"_self\">comms_queue_item_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classCryptModule.html\" target=\"_self\">CryptModule</a></td><td class=\"desc\">EnigmaIoT Crypto module. Wraps Arduino CryptoLib classes and methods </td></tr>\n<tr id=\"row_3_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTGatewayClass.html\" target=\"_self\">EnigmaIOTGatewayClass</a></td><td class=\"desc\">Main gateway class. Manages communication with nodes and sends data to upper layer </td></tr>\n<tr id=\"row_4_\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_4_\" class=\"arrow\" onclick=\"toggleFolder('4_')\">&#9660;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTjsonController.html\" target=\"_self\">EnigmaIOTjsonController</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_4_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\" target=\"_self\">CONTROLLER_CLASS_NAME</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_5_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTNodeClass.html\" target=\"_self\">EnigmaIOTNodeClass</a></td><td class=\"desc\">Main node class. Manages communication with gateway and allows sending and receiving user data </td></tr>\n<tr id=\"row_6_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\" target=\"_self\">EnigmaIOTRingBuffer&lt; Telement &gt;</a></td><td class=\"desc\">Ring buffer class. Used to implement message buffer </td></tr>\n<tr id=\"row_7_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\" target=\"_self\">EnigmaIOTRingBuffer&lt; comms_queue_item_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_8_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\" target=\"_self\">EnigmaIOTRingBuffer&lt; mqtt_queue_item_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_9_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classEnigmaIOTRingBuffer.html\" target=\"_self\">EnigmaIOTRingBuffer&lt; msg_queue_item_t &gt;</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_10_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classFilterClass.html\" target=\"_self\">FilterClass</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structgateway__config__t.html\" target=\"_self\">gateway_config_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_12_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classGatewayAPI.html\" target=\"_self\">GatewayAPI</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_13_\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_13_\" class=\"arrow\" onclick=\"toggleFolder('13_')\">&#9660;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classGatewayOutput__generic.html\" target=\"_self\">GatewayOutput_generic</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_13_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classGatewayOutput__dummy.html\" target=\"_self\">GatewayOutput_dummy</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_13_1_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classGwOutput__MQTT.html\" target=\"_self\">GwOutput_MQTT</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_14_\" class=\"even\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_14_\" class=\"arrow\" onclick=\"toggleFolder('14_')\">&#9660;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHAEntity.html\" target=\"_self\">HAEntity</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_14_0_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHABinarySensor.html\" target=\"_self\">HABinarySensor</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_14_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHACover.html\" target=\"_self\">HACover</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_14_2_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHASensor.html\" target=\"_self\">HASensor</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_14_3_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHASwitch.html\" target=\"_self\">HASwitch</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_14_4_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classHATrigger.html\" target=\"_self\">HATrigger</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_15_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structmqtt__queue__item__t.html\" target=\"_self\">mqtt_queue_item_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_16_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structmqttgw__config__t.html\" target=\"_self\">mqttgw_config_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_17_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structmsg__queue__item__t.html\" target=\"_self\">msg_queue_item_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_18_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classNode.html\" target=\"_self\">Node</a></td><td class=\"desc\">Class definition for a single sensor <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> </td></tr>\n<tr id=\"row_19_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structnode__instance.html\" target=\"_self\">node_instance</a></td><td class=\"desc\">Struct that define node fields. Used for long term storage needs </td></tr>\n<tr id=\"row_20_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classNodeList.html\" target=\"_self\">NodeList</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_21_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structrtcmem__data__t.html\" target=\"_self\">rtcmem_data_t</a></td><td class=\"desc\">Context data to be stored con persistent storage to be used after wake from sleep mode </td></tr>\n<tr id=\"row_22_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\" target=\"_self\">smartSwitchControllerHw_t</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_23_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">C</span></span><a class=\"el\" href=\"classTimeManagerClass.html\" target=\"_self\">TimeManagerClass</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/howto_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: docs/howto.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">docs/howto.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIoT</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIoT </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p><a class=\"anchor\" id=\"md_readme\"></a> <img src=\"https://github.com/gmag11/EnigmaIOT/raw/master/logo/logo%20text%20under.svg?sanitize=true\" alt=\"EnigmaIoT Logo\" style=\"pointer-events: none;\" width=\"50%\" class=\"inline\"/></p>\n<p><a href=\"https://github.com/gmag11/EnigmaIOT/actions?query=workflow%3AESP8266\"><img src=\"https://github.com/gmag11/EnigmaIOT/workflows/ESP8266/badge.svg\" alt=\"ESP8266\" style=\"pointer-events: none;\" class=\"inline\"/></a></p>\n<p><a href=\"https://github.com/gmag11/EnigmaIOT/actions?query=workflow%3AESP32\"><img src=\"https://github.com/gmag11/EnigmaIOT/workflows/ESP32/badge.svg\" alt=\"ESP32\" style=\"pointer-events: none;\" class=\"inline\"/></a></p>\n<h1>Introduction</h1>\n<p><b>EnigmaIoT</b> is an open source solution for wireless multi sensor systems. It has two main components, multiple <b>nodes</b> and one <b>gateway</b>.</p>\n<p>A number of nodes with one or more sensors each one communicate in a <b>secure</b> way to a central gateway in a star network using EnigmaIoT protocol.</p>\n<p>This protocol has been designed with security on mind. All node data is encrypted with a random key that changes periodically. Key is unique for each node and dynamically negotiated, so user do not have to enter any key. Indeed, all encryption and key agreement is transparent to user.</p>\n<p>I designed this because I was searching for a way to have a relatively high number of nodes at home. I thought about using WiFi but it would overload my home router. So I looked for an alternative. I evaluated LoRa or cheap nRF24 modules but I wanted the simplest solution in terms of hardware.</p>\n<p>ESP8266 and ESP32 microcontrollers implement a protocol known as ESP-NOW. It is a point to point protocol, based on vendor specific <a href=\"https://mrncciew.com/2014/09/29/cwap-802-11-mgmt-frame-types/\">WiFi management action frames</a>, that works in a connectionless fashion and every packet is a few milliseconds long. Because of this, it eases to have a battery powered node so that it enables designing totally wireless sensors.</p>\n<p>But use of encryption on ESP-NOW limits the number of nodes to only 6 nodes. So I thought that I could implement encryption on payload but I found many problems I should solve to grade this as \"secure enough\".</p>\n<p>Find library documentation on <a href=\"https://gmag11.github.io/EnigmaIOT\">https://gmag11.github.io/EnigmaIOT</a></p>\n<h1>Quick start</h1>\n<p>It you are courious to quickly test how does EnigmaIOT performs you can follow this <a class=\"el\" href=\"md_docs_howto.html\">howto guide</a>. This will guide you on how to:</p>\n<ul>\n<li>Setup your gateway</li>\n<li>Build simplest EnigmaIOT node</li>\n<li>Configure your first node</li>\n<li>Develop custom nodes with advanced features</li>\n</ul>\n<h1>Project requirements</h1>\n<p>During this project conception I decided that it should fulfil this list of requirements.</p>\n<ul>\n<li>Use the simplest hardware, based on ESP8266 and/or ESP32.</li>\n<li>Secure by design. Make use of a secure channel for data transmission.</li>\n<li>Automatic dynamic key agreement.</li>\n<li>Do not require connection to the Internet.</li>\n<li>Do not overload my home WiFi infrastructure. Only Gateway will be connected to LAN.</li>\n<li>Able to use deep sleep to run on batteries.</li>\n<li>Enough wireless range for a house.</li>\n<li>Support for a high number of nodes.</li>\n</ul>\n<h1>Features</h1>\n<ul>\n<li>[x] Encrypted communication using <a href=\"https://tools.ietf.org/html/rfc7539\"><b>ChaCha20/Poly1305</b></a></li>\n<li>[x] Dynamic key, shared between one node and gateway. Keys are independent for each node</li>\n<li>[x] Shared keys are expired after a certain (configurable) time.</li>\n<li>[x] Number of nodes is only limited by memory on gateway (60 bytes per node)</li>\n<li>[x] Key is never on air so it is cannot be captured</li>\n<li>[x] Key expiration and renewal is managed transparently</li>\n<li>[x] Avoid repeatability attack having a new random initialization vector on every message. This is mandatory for ChaCha20/Poly1305 in order to keep cipher secure</li>\n<li>[x] Automatic and transparent node attachment</li>\n<li>[x] Avoid rogue node, rogue gateway and man-in-the-middle attack</li>\n</ul>\n<p>Notice that network key used to implement this feature is stored on flash. ESP8266 do not allow flash encryption so network key may be recovered reading flash.</p>\n<ul>\n<li>[x] Pluggable physical layer communication. Right now only ESP-NOW protocol is developed but you can easily add more communication alternatives</li>\n<li>[x] When using ESP-NOW only ESP8266 or ESP32 is needed. No more electronics apart from sensor</li>\n<li>[x] Data message counter to detect lost or repeated messages</li>\n<li>[x] Designed as two libraries (one for gateway, one for node) for easier use</li>\n<li>[x] Crypto algorithm could be changed with low effort</li>\n<li>[x] <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> and Gateway do store shared keys only on RAM. They are lost on power cycle. This protects system against flash reading attack. All nodes attach automatically with a new shared key after gateway is switched on</li>\n<li>[x] Downlink available. If deep sleep is used on sensor nodes, it is queued and sent just after node send a data message</li>\n<li>[x] Optional sleep mode management. In this case key and context has to be stored temporally. Normally RTC memory is the recommended place, and it is the one currently implemented. <b>Note</b>: There is the alternative to store context on flash memory so that node can be completely switched off between massages without requiring a new registering. Notice that on every received or sent message node updates this context so consider that a high number of writes in flash may degrade it in the medium term. If messages counters are disabled in configuration the number of writes is decreased drastically but this reduces security level as it makes possible to repeat messages.</li>\n<li>[x] Initial configuration over WiFi portal on each device</li>\n<li>[x] <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> configuration while in service using control downlink commands</li>\n<li>[ ] OTA over WiFi. Question: Is it really useful? Place an issue explaining an use case.</li>\n<li>[x] OTA over MQTT/ESP-NOW. Check <a class=\"el\" href=\"md_docs_node-ota-update.html\">OTA script guide</a>.</li>\n<li>[x] <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identification by using a flashing LED. This is useful when you have a bunch of nodes together :D</li>\n<li><p class=\"startli\">[x] Broadcast messages that go to all nodes. This is implemented by sending messages to broadcast address (ff:ff:ff:ff:ff:ff in esp-now). Only nodes that are always listening are able to receive these messages, they are not queued. In order to send a broadcast message using EnigmaIOTGatewayMQTT you may use <code>&lt;network name&gt;/broadcast/...</code> as topi beginning. Any control or data message will arrive all nodes that have broadcast enabled. Control messages are processed normally except OTA and SET NAME, which are ignored. Data messages are passed to user code for processing.</p>\n<p class=\"startli\">A shared encryption key is used to encrypt broadcast messages. It is generated automatically by Gateway on every restart.</p>\n<p class=\"startli\">If a node registers with broadcast flag active, gateway sends broadcast key using this message just after successful registration. Broadcast key is automatically generated on gateway on boot, so it will be different after every restart. Nodes will be synchronized as soon they register again.</p>\n<p class=\"startli\">A node may not send broadcast messages, only gateway can.</p>\n</li>\n<li>[x] Both gateway or nodes may run on ESP32 or ESP8266</li>\n<li>[x] Simple REST API to get information and send commands to gateway and nodes. Check <a class=\"el\" href=\"md_docs_api.html\">api.md</a></li>\n<li>[x] <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> library includes methods to configure <a href=\"https://www.home-assistant.io\">Home Assistant</a> automatic integration using <a href=\"https://www.home-assistant.io/docs/mqtt/discovery/\">MQTT discovery</a></li>\n</ul>\n<h1>Technical background</h1>\n<p>If you want to know the internals about EnigmaIOT check <a class=\"el\" href=\"md_docs_technical-background.html\">Technical Background Guide</a>. </p>\n</div></div><!-- PageDoc -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/jquery.js",
    "content": "/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!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<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],\"__proto__\"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==o.call(e))&&(!(t=r(e))||\"function\"==typeof(n=v.call(t,\"constructor\")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(p,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,\"string\"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),\"function\"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){n[\"[object \"+t+\"]\"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k=\"sizzle\"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",I=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",W=\"\\\\[\"+M+\"*(\"+I+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+I+\"))|)\"+M+\"*\\\\]\",$=\":(\"+I+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+W+\")*)|.*)\\\\)|)\",F=new RegExp(M+\"+\",\"g\"),B=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),_=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),z=new RegExp(\"^\"+M+\"*([>+~]|\"+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=\"<a id='\"+k+\"'></a><select id='\"+k+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",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=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";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<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+\"\").replace(re,ie)},se.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{\">\":{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<t.indexOf(i):\"$=\"===r?i&&t.slice(-i.length)===i:\"~=\"===r?-1<(\" \"+t.replace(F,\" \")+\" \").indexOf(i):\"|=\"===r&&(t===i||t.slice(0,i.length+1)===i+\"-\"))}},CHILD:function(h,e,t,g,v){var y=\"nth\"!==h.slice(0,3),m=\"last\"!==h.slice(-4),x=\"of-type\"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?\"nextSibling\":\"previousSibling\",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l=\"only\"===h&&!u&&\"nextSibling\"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error(\"unsupported pseudo: \"+e);return a[k]?a(o):1<a.length?(t=[e,e,\"\",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,\"$1\"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||\"\")||se.error(\"unsupported lang: \"+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(t=t.toLowerCase())===n||0===t.indexOf(n+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&\"parentNode\"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||\"*\",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[\" \"],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace(B,\"$1\"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+\" \"];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B,\" \")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+\" \"];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l=\"0\",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG(\"*\",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l=\"function\"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&\"ID\"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split(\"\").sort(D).join(\"\")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement(\"fieldset\"))}),ce(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||fe(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||fe(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute(\"disabled\")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[\":\"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\\/\\0>:\\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<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\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<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,\"parentNode\")},parentsUntil:function(e,t,n){return T(e,\"parentNode\",n)},next:function(e){return P(e,\"nextSibling\")},prev:function(e){return P(e,\"previousSibling\")},nextAll:function(e){return T(e,\"nextSibling\")},prevAll:function(e){return T(e,\"previousSibling\")},nextUntil:function(e,t,n){return T(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return T(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return\"undefined\"!=typeof e.contentDocument?e.contentDocument:(A(e,\"template\")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return\"Until\"!==r.slice(-5)&&(t=e),t&&\"string\"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\\x20\\t\\r\\n\\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r=\"string\"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:\"\")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&\"string\"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t=\"\",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=\"\"),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[[\"notify\",\"progress\",k.Callbacks(\"memory\"),k.Callbacks(\"memory\"),2],[\"resolve\",\"done\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),1,\"rejected\"]],i=\"pending\",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},\"catch\":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+\"With\"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError(\"Thenable self-resolution\");t=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+\"With\"](this===s?void 0:this,arguments),this},s[t[0]+\"With\"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),\"pending\"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener(\"DOMContentLoaded\",B),C.removeEventListener(\"load\",B),k.ready()}k.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,\"complete\"===E.readyState||\"loading\"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener(\"DOMContentLoaded\",B),C.addEventListener(\"load\",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,\"ms-\").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(Z,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=\"true\"===(i=n)||\"false\"!==i&&(\"null\"===i?null:i===+i+\"\"?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,\"hasDataAttrs\"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf(\"data-\")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks(\"once memory\").add(function(){Q.remove(e,[t+\"queue\",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return\"string\"!=typeof t&&(n=t,t=\"fx\",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=Q.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ne=new RegExp(\"^(?:([+-])=|)(\"+te+\")([a-z%]*)$\",\"i\"),re=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&oe(e)&&\"none\"===k.css(e,\"display\")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,\"\")},u=s(),l=n&&n[3]||(k.cssNumber[t]?\"\":\"px\"),c=e.nodeType&&(k.cssNumber[t]||\"px\"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?(\"none\"===n&&(l[c]=Q.get(r,\"display\")||null,l[c]||(r.style.display=\"\")),\"\"===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,\"display\"),o.parentNode.removeChild(o),\"none\"===u&&(u=\"block\"),ce[s]=u)))):\"none\"!==n&&(l[c]=\"none\",Q.set(r,\"display\",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_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;n<r;n++)Q.set(e[n],\"globalEval\",!t||Q.get(t[n],\"globalEval\"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),\"script\"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement(\"div\")),(xe=E.createElement(\"input\")).setAttribute(\"type\",\"radio\"),xe.setAttribute(\"checked\",\"checked\"),xe.setAttribute(\"name\",\"t\"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML=\"<textarea>x</textarea>\",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<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&De(t,\"click\",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&De(t,\"click\"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Q.get(t,\"click\")||A(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,qe=/<script|<style|<link/i,Le=/checked\\s*(?:[^=]|=\\s*.checked.)/i,He=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\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<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&\"string\"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,\"script\"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,\"script\"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||\"\")&&!Q.access(u,\"globalEval\")&&k.contains(l,u)&&(u.src&&\"module\"!==(u.type||\"\").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute(\"nonce\")}):b(u.textContent.replace(He,\"\"),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,\"script\")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,\"<$1></$2>\")},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<i;r++)s=o[r],u=a[r],void 0,\"input\"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:\"input\"!==l&&\"textarea\"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,\"script\")).length&&ye(a,!f&&ve(e,\"script\")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp(\"^(\"+te+\")(?!px)[a-z%]+$\",\"i\"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join(\"|\"),\"i\");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",u.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n=\"1%\"!==e.top,a=12===t(e.marginLeft),u.style.right=\"60%\",o=36===t(e.right),r=36===t(e.width),u.style.position=\"absolute\",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement(\"div\"),u=E.createElement(\"div\");u.style&&(u.style.backgroundClip=\"content-box\",u.cloneNode(!0).style.backgroundClip=\"\",y.clearCloneStyle=\"content-box\"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=[\"Webkit\",\"Moz\",\"ms\"],Xe=E.createElement(\"div\").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ke={letterSpacing:\"0\",fontWeight:\"400\"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function et(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=k.css(e,n+re[a],!0,i)),r?(\"content\"===n&&(u-=k.css(e,\"padding\"+re[a],!0,i)),\"margin\"!==n&&(u-=k.css(e,\"border\"+re[a]+\"Width\",!0,i))):(u+=k.css(e,\"padding\"+re[a],!0,i),\"padding\"!==n?u+=k.css(e,\"border\"+re[a]+\"Width\",!0,i):s+=k.css(e,\"border\"+re[a]+\"Width\",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&\"border-box\"===k.css(e,\"boxSizing\",!1,r),o=i,a=_e(e,t,r),s=\"offset\"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a=\"auto\"}return(!y.boxSizingReliable()&&i||\"auto\"===a||!parseFloat(a)&&\"inline\"===k.css(e,\"display\",!1,r))&&e.getClientRects().length&&(i=\"border-box\"===k.css(e,\"boxSizing\",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?\"border\":\"content\"),o,r,a)+\"px\"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?\"\":\"px\")),y.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),\"normal\"===i&&t in Ke&&(i=Ke[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each([\"height\",\"width\"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&\"absolute\"===i.position,a=(o||n)&&\"border-box\"===k.css(e,\"boxSizing\",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e[\"offset\"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,\"border\",!1,i)-.5)),s&&(r=ne.exec(t))&&\"px\"!==(r[3]||\"px\")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,\"marginLeft\"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),k.each({margin:\"\",padding:\"\",border:\"Width\"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r=\"string\"==typeof e?e.split(\" \"):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},\"margin\"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?\"\":\"px\")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=re[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&\"expand\"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=[\"*\"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,\"fxshow\");for(r in n.queue||(null==(a=k._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,\"fx\").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,\"display\")),\"none\"===(c=k.css(e,\"display\"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,\"display\"),fe([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===k.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?\"hidden\"in v&&(g=v.hidden):v=Q.access(e,\"fxshow\",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,\"fxshow\"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&\"object\"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,\"finish\"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return\"string\"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||\"fx\",[]),this.each(function(){var e=!0,t=null!=i&&i+\"queueHooks\",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||\"fx\"),this.each(function(){var e,t=Q.get(this),n=t[a+\"queue\"],r=t[a+\"queueHooks\"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each([\"toggle\",\"show\",\"hide\"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||\"boolean\"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft(\"show\"),slideUp:ft(\"hide\"),slideToggle:ft(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||\"fx\",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement(\"input\"),at=E.createElement(\"select\").appendChild(E.createElement(\"option\")),ot.type=\"checkbox\",y.checkOn=\"\"!==ot.value,y.optSelected=at.selected,(ot=E.createElement(\"input\")).value=\"t\",ot.type=\"radio\",y.radioValue=\"t\"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&\"radio\"===t&&A(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(\" \")}function xt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function bt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,\"tabindex\");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&\" \"+mt(i)+\" \"){a=0;while(o=e[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=mt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&\" \"+mt(i)+\" \"){a=0;while(o=e[a++])while(-1<r.indexOf(\" \"+o+\" \"))r=r.replace(\" \"+o+\" \",\" \");i!==(s=mt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(i,t){var o=typeof i,a=\"string\"===o||Array.isArray(i);return\"boolean\"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&\"boolean\"!==o||((e=xt(this))&&Q.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===i?\"\":Q.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&-1<(\" \"+mt(xt(n))+\" \").indexOf(t))return!0;return!1}});var wt=/\\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t=\"\":\"number\"==typeof t?t+=\"\":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?\"\":e+\"\"})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&\"set\"in r&&void 0!==r.set(this,t,\"value\")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&\"get\"in r&&void 0!==(e=r.get(t,\"value\"))?e:\"string\"==typeof(e=t.value)?e.replace(wt,\"\"):null==e?\"\":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,\"value\");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,\"optgroup\"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each([\"radio\",\"checkbox\"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),y.focusin=\"onfocusin\"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,\"type\")?e.type:e,h=v.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(\".\")&&(d=(h=d.split(\".\")).shift(),h.sort()),u=d.indexOf(\":\")<0&&\"on\"+d,(e=e[k.expando]?e:new k.Event(d,\"object\"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,\"events\")||{})[e.type]&&Q.get(o,\"handle\"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:\"focusin\",blur:\"focusout\"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\\?/;k.parseXML=function(e){var t;if(!e||\"string\"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,\"text/xml\")}catch(e){t=void 0}return t&&!t.getElementsByTagName(\"parsererror\").length||k.error(\"Invalid XML: \"+e),t};var Nt=/\\[\\]$/,At=/\\r?\\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+\"[\"+(\"object\"==typeof t&&null!=t?e:\"\")+\"]\",t,r,i)});else if(r||\"object\"!==w(e))i(n,e);else for(t in e)qt(n+\"[\"+t+\"]\",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join(\"&\")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,\"elements\");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(\":disabled\")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,\"\\r\\n\")}}):{name:t.name,value:n.replace(At,\"\\r\\n\")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\\/\\//,It={},Wt={},$t=\"*/\".concat(\"*\"),Ft=E.createElement(\"a\");function Bt(o){return function(e,t){\"string\"!=typeof e&&(t=e,e=\"*\");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])\"+\"===n[0]?(n=n.slice(1)||\"*\",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return\"string\"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s[\"*\"]&&l(\"*\")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks(\"once memory\"),w=v.statusCode||{},a={},s={},u=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+\" \"]=(n[t[1].toLowerCase()+\" \"]||[]).concat(t[2])}t=n[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+\"\").replace(Mt,Et.protocol+\"//\"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||\"*\").toLowerCase().match(R)||[\"\"],null==v.crossDomain){r=E.createElement(\"a\");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+\"//\"+Ft.host!=r.protocol+\"//\"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&\"string\"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger(\"ajaxStart\"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,\"\"),v.hasContent?v.data&&v.processData&&0===(v.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(v.data=v.data.replace(Lt,\"+\")):(o=v.url.slice(f.length),v.data&&(v.processData||\"string\"==typeof v.data)&&(f+=(St.test(f)?\"&\":\"?\")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,\"$1\"),o=(St.test(f)?\"&\":\"?\")+\"_=\"+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader(\"If-Modified-Since\",k.lastModified[f]),k.etag[f]&&T.setRequestHeader(\"If-None-Match\",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader(\"Content-Type\",v.contentType),T.setRequestHeader(\"Accept\",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+(\"*\"!==v.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):v.accepts[\"*\"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u=\"abort\",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger(\"ajaxSend\",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort(\"timeout\")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,\"No Transport\");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||\"\",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader(\"Last-Modified\"))&&(k.lastModified[f]=u),(u=T.getResponseHeader(\"etag\"))&&(k.etag[f]=u)),204===e||\"HEAD\"===v.type?l=\"nocontent\":304===e?l=\"notmodified\":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l=\"error\",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+\"\",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?\"ajaxSuccess\":\"ajaxError\",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger(\"ajaxComplete\",[T,v]),--k.active||k.event.trigger(\"ajaxStop\")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,\"json\")},getScript:function(e,t){return k.get(e,void 0,t,\"script\")}}),k.each([\"get\",\"post\"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&\"withCredentials\"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,\"abort\"===e?r.abort():\"error\"===e?\"number\"!=typeof r.status?t(0,\"error\"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,\"text\"!==(r.responseType||\"text\")||\"string\"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o(\"error\"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o(\"abort\");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),k.ajaxTransport(\"script\",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k(\"<script>\").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=\"<form></form><form></form>\",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<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),0<a.length&&k.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?k(\"<div>\").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 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),k.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k});\n/*! jQuery UI - v1.12.1 - 2019-01-27\n* http://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n(function(t){\"function\"==typeof define&&define.amd?define([\"jquery\"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css(\"visibility\");\"inherit\"===e;)t=t.parent(),e=t.css(\"visibility\");return\"hidden\"!==e}t.ui=t.ui||{},t.ui.version=\"1.12.1\";var i=0,s=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,\"events\"),s&&s.remove&&t(n).triggerHandler(\"remove\")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(\".\")[0];e=e.split(\".\")[1];var l=h+\"-\"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[\":\"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+\".\"+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,o=s.call(arguments,1),a=0,r=o.length;r>a;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:\"<div>\",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(\"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\"),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.width<e.element[0].scrollWidth,o=\"scroll\"===s||\"auto\"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,m,g,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||\"flip\").split(\" \"),x={};return _=s(v),v[0].preventDefault&&(n.at=\"left top\"),p=_.width,f=_.height,m=_.offset,g=t.extend({},m),t.each([\"my\",\"at\"],function(){var t,e,i=(n[this]||\"\").split(\" \");1===i.length&&(i=r.test(i[0])?i.concat([\"center\"]):h.test(i[0])?[\"center\"].concat(i):[\"center\",\"center\"]),i[0]=r.test(i[0])?i[0]:\"center\",i[1]=h.test(i[1])?i[1]:\"center\",t=l.exec(i[0]),e=l.exec(i[1]),x[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),\"right\"===n.at[0]?g.left+=p:\"center\"===n.at[0]&&(g.left+=p/2),\"bottom\"===n.at[1]?g.top+=f:\"center\"===n.at[1]&&(g.top+=f/2),u=e(x.at,p,f),g.left+=u[0],g.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,\"marginLeft\"),_=i(this,\"marginTop\"),k=l+d+i(this,\"marginRight\")+y.width,C=c+_+i(this,\"marginBottom\")+y.height,D=t.extend({},g),T=e(x.my,h.outerWidth(),h.outerHeight());\"right\"===n.my[0]?D.left-=l:\"center\"===n.my[0]&&(D.left-=l/2),\"bottom\"===n.my[1]?D.top-=c:\"center\"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each([\"left\",\"top\"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:k,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=m.left-D.left,i=e+p-l,s=m.top-D.top,r=s+f-c,u={target:{element:v,left:m.left,top:m.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?\"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(\"<div class='ui-wrapper' style='overflow: hidden;'></div>\").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(\"<div>\"),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.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.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(\"<div style='overflow:hidden;'></div>\"),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\n},_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});/**\n * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler\n * Licensed under MIT\n * @author Ariel Flesler\n * @version 2.1.2\n */\n;(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<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case \"number\":case \"string\":if(/^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case \"object\":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(\"\"),function(a,c){var d=\"x\"===c?\"Left\":\"Top\",m=d.toLowerCase(),g=\"scroll\"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css(\"margin\"+d),10)||0,f[g]-=parseInt(e.css(\"border\"+d+\"Width\"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e[\"x\"===c?\"width\":\"height\"]()*b.over[m])):(d=e[m],f[g]=d.slice&& \"%\"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b=\"x\"===d?\"Width\":\"Height\",h=\"scroll\"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b=\"client\"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});\n/*!\n PowerTip v1.3.1 (2018-04-15)\n https://stevenbenner.github.io/jquery-powertip/\n Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).\n Released under MIT license.\n https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt\n*/\n(function(root,factory){if(typeof define===\"function\"&&define.amd){define([\"jquery\"],factory)}else if(typeof module===\"object\"&&module.exports){module.exports=factory(require(\"jquery\"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$(\"body\");var DATA_DISPLAYCONTROLLER=\"displayController\",DATA_HASACTIVEHOVER=\"hasActiveHover\",DATA_FORCEDOPEN=\"forcedOpen\",DATA_HASMOUSEMOVE=\"hasMouseMove\",DATA_MOUSEONTOTIP=\"mouseOnToPopup\",DATA_ORIGINALTITLE=\"originalTitle\",DATA_POWERTIP=\"powertip\",DATA_POWERTIPJQ=\"powertipjq\",DATA_POWERTIPTARGET=\"powertiptarget\",EVENT_NAMESPACE=\".powertip\",RAD2DEG=180/Math.PI,MOUSE_EVENTS=[\"click\",\"dblclick\",\"mousedown\",\"mouseup\",\"mousemove\",\"mouseover\",\"mouseout\",\"mouseenter\",\"mouseleave\",\"contextmenu\"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)===\"string\"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr(\"title\");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr(\"title\")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-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<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split(\"-\")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case\"n\":coords.set(\"left\",position.left-tipWidth/2);coords.set(\"bottom\",session.windowHeight-position.top+offset);break;case\"e\":coords.set(\"left\",position.left+offset);coords.set(\"top\",position.top-tipHeight/2);break;case\"s\":coords.set(\"left\",position.left-tipWidth/2);coords.set(\"top\",position.top+offset);break;case\"w\":coords.set(\"top\",position.top-tipHeight/2);coords.set(\"right\",session.windowWidth-position.left+offset);break;case\"nw\":coords.set(\"bottom\",session.windowHeight-position.top+offset);coords.set(\"right\",session.windowWidth-position.left-20);break;case\"nw-alt\":coords.set(\"left\",position.left);coords.set(\"bottom\",session.windowHeight-position.top+offset);break;case\"ne\":coords.set(\"left\",position.left-20);coords.set(\"bottom\",session.windowHeight-position.top+offset);break;case\"ne-alt\":coords.set(\"bottom\",session.windowHeight-position.top+offset);coords.set(\"right\",session.windowWidth-position.left);break;case\"sw\":coords.set(\"top\",position.top+offset);coords.set(\"right\",session.windowWidth-position.left-20);break;case\"sw-alt\":coords.set(\"left\",position.left);coords.set(\"top\",position.top+offset);break;case\"se\":coords.set(\"left\",position.left-20);coords.set(\"top\",position.top+offset);break;case\"se-alt\":coords.set(\"top\",position.top+offset);coords.set(\"right\",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case\"n\":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case\"e\":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case\"s\":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case\"w\":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case\"nw\":left=objectOffset.left;top=objectOffset.top;break;case\"ne\":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case\"sw\":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case\"se\":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest(\"svg\")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=[\"nw\",\"n\",\"ne\",\"e\",\"se\",\"s\",\"sw\",\"w\"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$(\"#\"+options.popupId);if(tipElement.length===0){tipElement=$(\"<div/>\",{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.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});/*!\n * jQuery UI Touch Punch 0.2.3\n *\n * Copyright 2011–2014, Dave Furfero\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Depends:\n *  jquery.ui.widget.js\n *  jquery.ui.mouse.js\n */\n!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){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\n * http://www.smartmenus.org/\n * 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=$(\"<span/>\").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=$('<div class=\"sm-jquery-disable-overlay\"/>').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\",$([$('<span class=\"scroll-up\"><span class=\"scroll-up-arrow\"></span></span>')[0],$('<span class=\"scroll-down\"><span class=\"scroll-down-arrow\"></span></span>')[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.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(e.wheelDelta||-e.detail)>0;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\"},$});"
  },
  {
    "path": "docs/html/md_LICENSE.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: LICENSE</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">LICENSE </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</p>\n<p>Copyright (C) 2007 Free Software Foundation, Inc. <a href=\"https://fsf.org/\">https://fsf.org/</a> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. </p><pre class=\"fragment\">                       Preamble\n</pre><p>The GNU General Public License is a free, copyleft license for software and other kinds of works.</p>\n<p>The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program&ndash;to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.</p>\n<p>When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.</p>\n<p>To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.</p>\n<p>For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.</p>\n<p>Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.</p>\n<p>For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.</p>\n<p>Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.</p>\n<p>Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.</p>\n<p>The precise terms and conditions for copying, distribution and modification follow. </p><pre class=\"fragment\">                   TERMS AND CONDITIONS\n</pre><p>0. Definitions.</p>\n<p>\"This License\" refers to version 3 of the GNU General Public License.</p>\n<p>\"Copyright\" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.</p>\n<p>\"The Program\" refers to any copyrightable work licensed under this License. Each licensee is addressed as \"you\". \"Licensees\" and \"recipients\" may be individuals or organizations.</p>\n<p>To \"modify\" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a \"modified version\" of the earlier work or a work \"based on\" the earlier work.</p>\n<p>A \"covered work\" means either the unmodified Program or a work based on the Program.</p>\n<p>To \"propagate\" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.</p>\n<p>To \"convey\" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.</p>\n<p>An interactive user interface displays \"Appropriate Legal Notices\" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.</p>\n<ol type=\"1\">\n<li>Source Code.</li>\n</ol>\n<p>The \"source code\" for a work means the preferred form of the work for making modifications to it. \"Object code\" means any non-source form of a work.</p>\n<p>A \"Standard Interface\" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.</p>\n<p>The \"System Libraries\" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A \"Major Component\", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.</p>\n<p>The \"Corresponding Source\" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.</p>\n<p>The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.</p>\n<p>The Corresponding Source for a work in source code form is that same work.</p>\n<ol type=\"1\">\n<li>Basic Permissions.</li>\n</ol>\n<p>All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.</p>\n<p>You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.</p>\n<p>Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.</p>\n<ol type=\"1\">\n<li>Protecting Users' Legal Rights From Anti-Circumvention Law.</li>\n</ol>\n<p>No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.</p>\n<p>When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.</p>\n<ol type=\"1\">\n<li>Conveying Verbatim Copies.</li>\n</ol>\n<p>You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.</p>\n<p>You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.</p>\n<ol type=\"1\">\n<li>Conveying Modified Source Versions.</li>\n</ol>\n<p>You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: </p><pre class=\"fragment\">a) The work must carry prominent notices stating that you modified\nit, and giving a relevant date.\n\nb) The work must carry prominent notices stating that it is\nreleased under this License and any conditions added under section\n7.  This requirement modifies the requirement in section 4 to\n\"keep intact all notices\".\n\nc) You must license the entire work, as a whole, under this\nLicense to anyone who comes into possession of a copy.  This\nLicense will therefore apply, along with any applicable section 7\nadditional terms, to the whole of the work, and all its parts,\nregardless of how they are packaged.  This License gives no\npermission to license the work in any other way, but it does not\ninvalidate such permission if you have separately received it.\n\nd) If the work has interactive user interfaces, each must display\nAppropriate Legal Notices; however, if the Program has interactive\ninterfaces that do not display Appropriate Legal Notices, your\nwork need not make them do so.\n</pre><p>A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an \"aggregate\" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.</p>\n<ol type=\"1\">\n<li>Conveying Non-Source Forms.</li>\n</ol>\n<p>You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: </p><pre class=\"fragment\">a) Convey the object code in, or embodied in, a physical product\n(including a physical distribution medium), accompanied by the\nCorresponding Source fixed on a durable physical medium\ncustomarily used for software interchange.\n\nb) Convey the object code in, or embodied in, a physical product\n(including a physical distribution medium), accompanied by a\nwritten offer, valid for at least three years and valid for as\nlong as you offer spare parts or customer support for that product\nmodel, to give anyone who possesses the object code either (1) a\ncopy of the Corresponding Source for all the software in the\nproduct that is covered by this License, on a durable physical\nmedium customarily used for software interchange, for a price no\nmore than your reasonable cost of physically performing this\nconveying of source, or (2) access to copy the\nCorresponding Source from a network server at no charge.\n\nc) Convey individual copies of the object code with a copy of the\nwritten offer to provide the Corresponding Source.  This\nalternative is allowed only occasionally and noncommercially, and\nonly if you received the object code with such an offer, in accord\nwith subsection 6b.\n\nd) Convey the object code by offering access from a designated\nplace (gratis or for a charge), and offer equivalent access to the\nCorresponding Source in the same way through the same place at no\nfurther charge.  You need not require recipients to copy the\nCorresponding Source along with the object code.  If the place to\ncopy the object code is a network server, the Corresponding Source\nmay be on a different server (operated by you or a third party)\nthat supports equivalent copying facilities, provided you maintain\nclear directions next to the object code saying where to find the\nCorresponding Source.  Regardless of what server hosts the\nCorresponding Source, you remain obligated to ensure that it is\navailable for as long as needed to satisfy these requirements.\n\ne) Convey the object code using peer-to-peer transmission, provided\nyou inform other peers where the object code and Corresponding\nSource of the work are being offered to the general public at no\ncharge under subsection 6d.\n</pre><p>A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.</p>\n<p>A \"User Product\" is either (1) a \"consumer product\", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, \"normally used\" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.</p>\n<p>\"Installation Information\" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.</p>\n<p>If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).</p>\n<p>The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.</p>\n<p>Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.</p>\n<ol type=\"1\">\n<li>Additional Terms.</li>\n</ol>\n<p>\"Additional permissions\" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.</p>\n<p>When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.</p>\n<p>Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: </p><pre class=\"fragment\">a) Disclaiming warranty or limiting liability differently from the\nterms of sections 15 and 16 of this License; or\n\nb) Requiring preservation of specified reasonable legal notices or\nauthor attributions in that material or in the Appropriate Legal\nNotices displayed by works containing it; or\n\nc) Prohibiting misrepresentation of the origin of that material, or\nrequiring that modified versions of such material be marked in\nreasonable ways as different from the original version; or\n\nd) Limiting the use for publicity purposes of names of licensors or\nauthors of the material; or\n\ne) Declining to grant rights under trademark law for use of some\ntrade names, trademarks, or service marks; or\n\nf) Requiring indemnification of licensors and authors of that\nmaterial by anyone who conveys the material (or modified versions of\nit) with contractual assumptions of liability to the recipient, for\nany liability that these contractual assumptions directly impose on\nthose licensors and authors.\n</pre><p>All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.</p>\n<p>If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.</p>\n<p>Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.</p>\n<ol type=\"1\">\n<li>Termination.</li>\n</ol>\n<p>You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).</p>\n<p>However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.</p>\n<p>Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.</p>\n<p>Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.</p>\n<ol type=\"1\">\n<li>Acceptance Not Required for Having Copies.</li>\n</ol>\n<p>You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.</p>\n<ol type=\"1\">\n<li>Automatic Licensing of Downstream Recipients.</li>\n</ol>\n<p>Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.</p>\n<p>An \"entity transaction\" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.</p>\n<p>You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.</p>\n<ol type=\"1\">\n<li>Patents.</li>\n</ol>\n<p>A \"contributor\" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's \"contributor version\".</p>\n<p>A contributor's \"essential patent claims\" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, \"control\" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.</p>\n<p>Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.</p>\n<p>In the following three paragraphs, a \"patent license\" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To \"grant\" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.</p>\n<p>If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. \"Knowingly relying\" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.</p>\n<p>If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.</p>\n<p>A patent license is \"discriminatory\" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.</p>\n<p>Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.</p>\n<ol type=\"1\">\n<li>No Surrender of Others' Freedom.</li>\n</ol>\n<p>If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.</p>\n<ol type=\"1\">\n<li>Use with the GNU Affero General Public License.</li>\n</ol>\n<p>Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.</p>\n<ol type=\"1\">\n<li>Revised Versions of this License.</li>\n</ol>\n<p>The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.</p>\n<p>Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License \"or any later version\" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.</p>\n<p>If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.</p>\n<p>Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.</p>\n<ol type=\"1\">\n<li>Disclaimer of Warranty.</li>\n</ol>\n<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>\n<ol type=\"1\">\n<li>Limitation of Liability.</li>\n</ol>\n<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>\n<ol type=\"1\">\n<li>Interpretation of Sections 15 and 16.</li>\n</ol>\n<p>If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. </p><pre class=\"fragment\">                 END OF TERMS AND CONDITIONS\n\n        How to Apply These Terms to Your New Programs\n</pre><p>If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.</p>\n<p>To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the \"copyright\" line and a pointer to where the full notice is found. </p><pre class=\"fragment\">&lt;one line to give the program's name and a brief idea of what it does.&gt;\nCopyright (C) &lt;year&gt;  &lt;name of author&gt;\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see &lt;https://www.gnu.org/licenses/&gt;.\n</pre><p>Also add information on how to contact you by electronic and paper mail.</p>\n<p>If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: </p><pre class=\"fragment\">&lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;\nThis program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\nThis is free software, and you are welcome to redistribute it\nunder certain conditions; type `show c' for details.\n</pre><p>The hypothetical commands &lsquo;show w&rsquo; and &lsquo;show c&rsquo; should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an \"about box\".</p>\n<p>You should also get your employer (if you work as a programmer) or school, if any, to sign a \"copyright disclaimer\" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <a href=\"https://www.gnu.org/licenses/\">https://www.gnu.org/licenses/</a>.</p>\n<p>The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <a href=\"https://www.gnu.org/licenses/why-not-lgpl.html\">https://www.gnu.org/licenses/why-not-lgpl.html</a>. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_docs_api.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Server API</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Server API </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>Since version 0.9.6 of EnigmaIOT, network connected Gateways may include a REST API to get information and manage nodes.</p>\n<p>This enables future development of a web frontend for EnigmaIOT Gateways.</p>\n<p>All requests parameters are sent as URL encoded.</p>\n<p>All responses are given in JSON format</p>\n<h2>Gateway information</h2>\n<table class=\"markdownTable\">\n<tr class=\"markdownTableHead\">\n<th class=\"markdownTableHeadNone\">Entry point  </th><th class=\"markdownTableHeadNone\">Parameters  </th><th class=\"markdownTableHeadNone\">Method  </th><th class=\"markdownTableHeadNone\">Response  </th><th class=\"markdownTableHeadNone\">Comments   </th></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\"><code>/api/gw/info</code>  </td><td class=\"markdownTableBodyNone\"></td><td class=\"markdownTableBodyNone\">GET  </td><td class=\"markdownTableBodyNone\"><b>version</b>: EnigmaIOT library version<br  />\n<b>network</b>: EnigmaIOT network name<br  />\n<b>addresses</b>: <br  />\n <b>AP</b>: Gateway AP mac address<br  />\n <b>STA</b>: Gateway STA mac address<br  />\n<b>channel</b>: WiFi channel used<br  />\n<b>ap</b>: AP name<br  />\n<b>bssid</b>: AP mac address<br  />\n<b>rssi</b>: AP RSSI (dBm)<br  />\n<b>txpower</b>: Gateway WiFi power (dBm)<br  />\n<b>dns</b>: DNS Address  </td><td class=\"markdownTableBodyNone\">Gets gateway network information   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">/api/gw/nodenumber  </td><td class=\"markdownTableBodyNone\"></td><td class=\"markdownTableBodyNone\">GET  </td><td class=\"markdownTableBodyNone\"><b>nodeNumber</b>: Number of registered nodes  </td><td class=\"markdownTableBodyNone\">Gets current number of registered nodes   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">/api/gw/maxnodes  </td><td class=\"markdownTableBodyNone\"></td><td class=\"markdownTableBodyNone\">GET  </td><td class=\"markdownTableBodyNone\"><b>maxNodes</b>: Maximum number of nodes allowed  </td><td class=\"markdownTableBodyNone\">Gets the maximum number of nodes that can be registered in gateway   </td></tr>\n</table>\n<h2>Gateway commands</h2>\n<table class=\"markdownTable\">\n<tr class=\"markdownTableHead\">\n<th class=\"markdownTableHeadNone\">Entry point  </th><th class=\"markdownTableHeadNone\">Parameters  </th><th class=\"markdownTableHeadNone\">Method  </th><th class=\"markdownTableHeadNone\">Response  </th><th class=\"markdownTableHeadNone\">Comments   </th></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">api/gw/restart  </td><td class=\"markdownTableBodyNone\">confirm=1  </td><td class=\"markdownTableBodyNone\">PUT  </td><td class=\"markdownTableBodyNone\"><b>gw_restart</b>: &lt;processed | fail&gt;  </td><td class=\"markdownTableBodyNone\">Restarts gateway software. Confirm must be 1   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">api/gw/reset  </td><td class=\"markdownTableBodyNone\">confirm=1  </td><td class=\"markdownTableBodyNone\">PUT  </td><td class=\"markdownTableBodyNone\"><b>gw_reset</b>: &lt;processed | fail&gt;  </td><td class=\"markdownTableBodyNone\">Resets gateway configuration. Confirm must be 1   </td></tr>\n</table>\n<h2><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> information</h2>\n<table class=\"markdownTable\">\n<tr class=\"markdownTableHead\">\n<th class=\"markdownTableHeadNone\">Entry point  </th><th class=\"markdownTableHeadNone\">Parameters  </th><th class=\"markdownTableHeadNone\">Method  </th><th class=\"markdownTableHeadNone\">Response  </th><th class=\"markdownTableHeadNone\">Comments   </th></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">/api/gw/nodes  </td><td class=\"markdownTableBodyNone\"></td><td class=\"markdownTableBodyNone\">GET  </td><td class=\"markdownTableBodyNone\"><b>nodes</b>: <code>&lt;list&gt;</code><br  />\n <b>nodeId</b>: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identifier assigned by gateway<br  />\n <b>address</b>: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> mac address<br  />\n <b>name</b>: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name  </td><td class=\"markdownTableBodyNone\">Gets a list of registered nodes with nodeId, address and name   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">/api/node/node  </td><td class=\"markdownTableBodyNone\">nodeid  </td><td class=\"markdownTableBodyNone\">GET  </td><td class=\"markdownTableBodyNone\"><b>version</b>: EnigmaIOT library version<br  />\n<b>node_id</b>: NodeID<br  />\naddress: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> mac address<br  />\n<b>Name</b>: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name<br  />\n<b>keyValidSince</b>: Time since session key was last refreshed (seconds)<br  />\n<b>lastMessageTime</b>: Time since last message (seconds)<br  />\n<b>sleepy</b>: True | False<br  />\n<b>broadcast</b>: True | False<br  />\n<b>rssi</b>: Received gateway power from node<br  />\n<b>packetsHour</b>: Packet rate (pkt/h)<br  />\n<b>per</b>: Packet error rate (%)  </td><td class=\"markdownTableBodyNone\">Gets node information given its nodeID   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">/api/node/node  </td><td class=\"markdownTableBodyNone\">nodename  </td><td class=\"markdownTableBodyNone\">GET  </td><td class=\"markdownTableBodyNone\"><b>version</b>: EnigmaIOT library version<br  />\n<b>node_id</b>: NodeID<br  />\naddress: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> mac address<br  />\n<b>Name</b>: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name<br  />\n<b>keyValidSince</b>: Time since session key was last refreshed (seconds)<br  />\n<b>lastMessageTime</b>: Time since last message (seconds)<br  />\n<b>sleepy</b>: True | False<br  />\n<b>broadcast</b>: True | False<br  />\n<b>rssi</b>: Received gateway power from node<br  />\n<b>packetsHour</b>: Packet rate (pkt/h)<br  />\n<b>per</b>: Packet error rate (%)  </td><td class=\"markdownTableBodyNone\">Gets node information given its name   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">/api/node/node  </td><td class=\"markdownTableBodyNone\">nodeaddr  </td><td class=\"markdownTableBodyNone\">GET  </td><td class=\"markdownTableBodyNone\"><b>version</b>: EnigmaIOT library version<br  />\n<b>node_id</b>: NodeID<br  />\naddress: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> mac address<br  />\n<b>Name</b>: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name<br  />\n<b>keyValidSince</b>: Time since session key was last refreshed (seconds)<br  />\n<b>lastMessageTime</b>: Time since last message (seconds)<br  />\n<b>sleepy</b>: True | False<br  />\n<b>broadcast</b>: True | False<br  />\n<b>rssi</b>: Received gateway power from node<br  />\n<b>packetsHour</b>: Packet rate (pkt/h)<br  />\n<b>per</b>: Packet error rate (%)  </td><td class=\"markdownTableBodyNone\">Gets node information given its mac address   </td></tr>\n</table>\n<h2><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> commands</h2>\n<table class=\"markdownTable\">\n<tr class=\"markdownTableHead\">\n<th class=\"markdownTableHeadNone\">Entry point  </th><th class=\"markdownTableHeadNone\">Parameters  </th><th class=\"markdownTableHeadNone\">Method  </th><th class=\"markdownTableHeadNone\">Response  </th><th class=\"markdownTableHeadNone\">Comments   </th></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">/api/node/node  </td><td class=\"markdownTableBodyNone\">nodeid  </td><td class=\"markdownTableBodyNone\">DEL  </td><td class=\"markdownTableBodyNone\"><b>result</b>: Error string  </td><td class=\"markdownTableBodyNone\">Unregisters node given its nodeID   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">/api/node/node  </td><td class=\"markdownTableBodyNone\">nodename  </td><td class=\"markdownTableBodyNone\">DEL  </td><td class=\"markdownTableBodyNone\"><b>result</b>: Error string  </td><td class=\"markdownTableBodyNone\">Unregisters node given its name   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">/api/node/node  </td><td class=\"markdownTableBodyNone\">nodeaddr  </td><td class=\"markdownTableBodyNone\">DEL  </td><td class=\"markdownTableBodyNone\"><b>result</b>: Error string  </td><td class=\"markdownTableBodyNone\">Unregisters node given its mac address   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">/api/node/restart  </td><td class=\"markdownTableBodyNone\">nodename  </td><td class=\"markdownTableBodyNone\">PUT  </td><td class=\"markdownTableBodyNone\"><b>node_restart</b>: Error string  </td><td class=\"markdownTableBodyNone\">Triggers node restart   </td></tr>\n</table>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_docs_howto.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: howto</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">howto </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This document will serve as a guide to start working with EnigmaIOT, enabling you to develop your own secure sensor network easily, with a few additional lines of code compared with a regular Arduino program.</p>\n<h1>What you need</h1>\n<h3>Gateway</h3>\n<p>Any ESP32 or ESP8266 will do the job. Anyway, it is always recommended to use an <b>ESP32</b> board because having much more RAM it will be more stable along time.</p>\n<p><b>Notice that it is not possible to configure any node if you don't have a gateway working nearby.</b></p>\n<h3>MQTT broker</h3>\n<p>You need to use a MQTT broker (or server). Any public or private will do the job. As EnigmaIOT is focused on privacy I advise to install your own MQTT private broker. You can do it on any home server or Raspberry Pi, or even in a virtual private server. Installing and configuring a broker is out of scope of this guide but there are plenty of good and easy guides online.</p>\n<p>A good choice for a MQTT broker is <a href=\"https://mosquitto.org\">Eclipse Mosquitto</a>.</p>\n<p>Don't forget to add a user and password to broker at least. EnigmaIOT supports MQTT brokers with TLS encryption. If you expose your broker to the public Internet adding TLS to your setup will improve privacy and security, so it is highly encouraged.</p>\n<p>Using MQTT enables you to use a wide range or solutions to process, display information and manage your EnigmaIOT nodes. Good choices are <a href=\"https://nodered.org\">Node-Red</a> and <a href=\"https://www.home-assistant.io\">Home Assistant</a>, although you can use any software that is able to communicate with a MQTT broker, or any combination of them.</p>\n<h2>Required External libraries</h2>\n<p>All examples have a <code>platformio.ini</code> file so that they can be compiled using PlatformIO without any additional requirement.</p>\n<p>If you use Arduino IDE instead, you have to install all these libraries into your environment:</p>\n<ul>\n<li>ESPAsyncTCP &ndash; <a href=\"https://github.com/me-no-dev/ESPAsyncTCP\">https://github.com/me-no-dev/ESPAsyncTCP</a> **(Required only for ESP8266)**</li>\n<li>AsyncTCP &ndash; <a href=\"https://github.com/me-no-dev/AsyncTCP\">https://github.com/me-no-dev/AsyncTCP</a> **(Required only for ESP32)**</li>\n<li>ESPAsyncWebServer &ndash; <a href=\"https://github.com/me-no-dev/ESPAsyncWebServer\">https://github.com/me-no-dev/ESPAsyncWebServer</a></li>\n<li>ESPAsyncWiFiManager &ndash; <a href=\"https://github.com/gmag11/ESPAsyncWiFiManager\">https://github.com/gmag11/ESPAsyncWiFiManager</a> forked from <a href=\"https://github.com/alanswx/ESPAsyncWiFiManager\">https://github.com/alanswx/ESPAsyncWiFiManager</a></li>\n<li>Arduino Crypto Library &ndash; <a href=\"https://github.com/gmag11/CryptoArduino\">https://github.com/gmag11/CryptoArduino</a> forked and formatted from <a href=\"https://github.com/rweather\">https://github.com/rweather</a></li>\n<li>PubSubClient &ndash; <a href=\"https://github.com/knolleary/pubsubclient\">https://github.com/knolleary/pubsubclient</a></li>\n<li>CayenneLPP &ndash; <a href=\"https://github.com/sabas1080/CayenneLPP\">https://github.com/sabas1080/CayenneLPP</a> version &gt; 1.0.2</li>\n<li>ArduinoJSON 6 &ndash; <a href=\"https://github.com/bblanchon/ArduinoJson\">https://github.com/bblanchon/ArduinoJson</a> version &gt; 6.0.0</li>\n</ul>\n<h1>How to start with EnigmaIOT MQTT Gateway</h1>\n<h3>Install Gateway code on ESP32 or ESP8266</h3>\n<p>Code for gateway is included as an example on EnigmaIOT repository, as <code>EnigmaIOTGatewayMQTT</code>. You can find it <a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOTGatewayMQTT\">here</a>.</p>\n<p>It may be used as it is. There is no need to modify it to be able to customize to your needs. Everything is done during first configuration.</p>\n<p>You can use binary file included in release as an attachment or compile it by yourself.</p>\n<h3>Loading binary file</h3>\n<p>You will need <a href=\"https://github.com/espressif/esptool\">Espressif esptool</a> utility to flash binary file on your ESP32 or ESP8266. If your system has Python and pip installed you can install esptool by running</p>\n<div class=\"fragment\"><div class=\"line\">pip install esptool</div>\n</div><!-- fragment --><p>Esptool will detect your board type and the port on which it is attached to so command line will be as simple as this:</p>\n<p>It your MQTT broker uses TLS</p>\n<div class=\"fragment\"><div class=\"line\">python esptool.py write_flash 0 EnigmaIOT-Gateway-ESP32-SSL_MQTT.bin</div>\n</div><!-- fragment --><p>If your MQTT broker does not use encrypted communication</p>\n<div class=\"fragment\"><div class=\"line\">python esptool.py write_flash 0 EnigmaIOT-Gateway-ESP32-Plain_MQTT.bin</div>\n</div><!-- fragment --><p>If you have a ESP8266 (MQTT encryption is not supported)</p>\n<div class=\"fragment\"><div class=\"line\">python esptool.py write_flash 0 EnigmaIOT-Gateway-ESP8266.bin</div>\n</div><!-- fragment --><h3>Configuring your gateway</h3>\n<p>First time you run EnigmaIOT gateway it will behave as a WiFi access point with name <code>EnigmaIOTGateway</code>. Connect your smartphone or computer to it.</p>\n<p>A web browser should be open automatically pointing to configuration portal. If it is not the case you can access it opening <a href=\"http://192.168.4.1\">http://192.168.4.1</a>.</p>\n<p>You should see something like this:</p>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/EnigmaIOTGateway_config_portal.png\" alt=\"\" style=\"zoom:50%;\" class=\"inline\"/></p>\n<p>Click on <code>Configure WiFi</code> and board will scan networks. Select yours and continue filling all fields</p>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/EnigmaIOTGateway_wifi_selection.png\" alt=\"image-20210703000533470\" style=\"zoom: 50%;\" class=\"inline\"/></p>\n<p>Fields explanation:</p>\n<p><b>SSID</b>: Name of your home WiFi network.</p>\n<p><b>WiFi Password</b>: Your home WiFi password.</p>\n<p><b>Network Key</b>: Network key for your EnigmaIOT network. All nodes and gateway must share this key. Choose a secure password and keep it safe.</p>\n<p><b>Network Channel</b>: EnigmaIOT gateway initial channel. This is not relevant for MQTT gateway as it will use the same as your WiFi network.</p>\n<p><b>Network Name</b>: EnigmaIOT network name. This identify your network. This name will be used as root for all MQTT messages to and from this gateway.</p>\n<p><b>MQTT broker address</b>: IP address or hostname where MQTT broker is listening on</p>\n<p><b>TCP port</b>: TCP port used by MQTT broker. 8883 is normally used by brokers with TLS encryption configured. 1883 is used otherwise.</p>\n<p><b>MQTT username</b>: Username configured on MQTT broker.</p>\n<p><b>MQTT password</b>: User password.</p>\n<p>When you click <code>save</code> button and boards successfully connects to your WiFi network it reboots to start working as a real EnigmaIOT gateway.</p>\n<p>Now you are ready to start your own EnigmaIOT network.</p>\n<h3>Customizing gateway firmware</h3>\n<p>Although you can use gateway code as it is. There are some customizations available for experienced users.</p>\n<h4>EnigmaIOTGatewayMQTT.ino</h4>\n<p><code>LED_BUILTIN</code>: On many ESP32 boards, built in LED is connected to Pin 5. On EnigmaIOTGatewayMQTT, LED is used to signal configuration mode (flashing LED) and to show activity from nodes. If your board uses a different pin you can set it here. You may use different LEDs to signal received or sent message, In that case you may set <code>BLUE_LED</code> and <code>RED_LED</code>.</p>\n<h4><a class=\"el\" href=\"dstrootca_8h.html\">dstrootca.h</a></h4>\n<p>If you use TLS to encrypt communication with MQTT broker, then you must provide the root certificate used to check server certificate. This varies between different certificate providers. Included certificate works with <a href=\"https://letsencrypt.org\">Let's encrypt</a>. If you use a different provider or you have setup your own public key infrastructure you need to copy your CA certificate in <a href=\"https://knowledge.digicert.com/quovadis/ssl-certificates/ssl-general-topics/what-is-pem-format.html\">PEM format</a> assigned to <code>DSTroot_CA</code> variable.</p>\n<p>You can use <a href=\"https://www.sslchecker.com/certdecoder\">certificate decoder from SSLChecker.com</a> to dump certificate data, as expiration date.</p>\n<h4>EnigmaIOTconfig.h</h4>\n<p>This file is on library code directory. There are some settings that you can tweak there before compilation. There are explanation for every parameter on file itself. Although it is safe to adjust these settings some combinations may lead your gateway to not be able to communicate with nodes. I do not recommend tweaking settings that you don't understand clearly.</p>\n<p><code>NUM_NODES</code> parameter is used to configure the maximum number of nodes. It is set to 35 by default that should be enough for most users. You may increase it if you expect your network to grow above this limit.</p>\n<p>For ESP32 boards a limit of 100 or 200 nodes is safe, but ESP8266 may not have enough memory so if you find frequent reboots after setting this restore it to the default value.</p>\n<h1>How to develop a node with EnigmaIOT on ESP32 or ESP8266</h1>\n<p>EnigmaIOT is designed to hide all complexity behind, so that anyone that is barely familiar with Arduino environment is able to develop a node.</p>\n<h3>Bare basic code</h3>\n<p>Simplest node code may be something like this.</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">#include &lt;EnigmaIOTNode.h&gt; // Include EnigmaIOT node library</div>\n<div class=\"line\">#include &lt;espnow_hal.h&gt;    // Add ESP-NOW subsystem</div>\n<div class=\"line\">void setup () {</div>\n<div class=\"line\">    EnigmaIOTNode.begin (&amp;Espnow_hal); // Start node code</div>\n<div class=\"line\">    char msg[] = &quot;20&quot;; // Build a message to send</div>\n<div class=\"line\">    EnigmaIOTNode.sendData ((uint8_t*)msg, sizeof (msg) - 1, RAW); // Send data as RAW</div>\n<div class=\"line\">    EnigmaIOTNode.sleep (); // Request node to sleep</div>\n<div class=\"line\">}</div>\n<div class=\"line\">void loop () {</div>\n<div class=\"line\">    EnigmaIOTNode.handle (); // Don&#39;t forget this</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><p>If you use <a href=\"https://platformio.org\">PlatformIO</a> IDE you may use this platformio.ini</p>\n<div class=\"fragment\"><div class=\"line\">[env:d1_mini_pro]</div>\n<div class=\"line\">platform = espressif8266</div>\n<div class=\"line\">board = d1_mini_pro</div>\n<div class=\"line\">framework = arduino</div>\n<div class=\"line\">lib_deps =</div>\n<div class=\"line\">   ESPAsyncWiFiManager</div>\n<div class=\"line\">   ESP Async WebServer</div>\n<div class=\"line\">   ArduinoJson</div>\n<div class=\"line\">   https://github.com/gmag11/CryptoArduino.git</div>\n<div class=\"line\">   https://github.com/gmag11/EnigmaIOT.git</div>\n</div><!-- fragment --><h3>First node configuration</h3>\n<p>In the same way as we did with gateway, when node starts for first time it announces itself as a WiFi access point with name EnigmaIoTNode followed by chipID.</p>\n<p>When you connect to this AP without password you get a web page like this:</p>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/img/EnigmaIOTNode_config_portal.png\" alt=\"image-20210704121322147\" style=\"zoom:50%;\" class=\"inline\"/></p>\n<p>Click on <code>Configure WiFi</code> button and you will get the list of WiFi networks around. It is important not to select your home WiFi network here. It is not what an EnigmaIOT node needs. You should select the one whose name is you EnigmaIOT network name. This comes from your EnigmaIOT gateway.</p>\n<p>This AP needs a password it is the one that you configured as Network key in your gateway.</p>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/EnigmaIOTNode_wifi_selection.png\" alt=\"image-20210704121626137\" style=\"zoom:50%;\" class=\"inline\"/></p>\n<p>You need to fill this settings in:</p>\n<p><b>SSID</b>: Your network name (as configured in gateway)</p>\n<p><b>Password</b>: Your network key (as configured in gateway)</p>\n<p><b>Sleep time</b>: A node may be designed to sleep after sending a message. In that case this is the default sleep time in seconds. If your node does not go to sleep mode, then this setting is ignored.</p>\n<p><b><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Name</b>: This is your node name. It must be unique in your network. It a gateway find a node with duplicate name this name will be ignored and will use its MAC address instead.</p>\n<hr  />\n<p>After information is saved, node checks that it can connect Gateway WiFi AP successfully. If so, it reboots and start sending data.</p>\n<p>Using EnigmaIOTGatewayMQTT you will get a MQTT message every time your node sends data.</p>\n<div class=\"fragment\"><div class=\"line\">EnigmaIOT/SimpleNode/data   20</div>\n</div><!-- fragment --><p>Topic format is always the same:</p>\n<div class=\"fragment\"><div class=\"line\">&lt;NetworkName&gt;/&lt;NodeName&gt;/data</div>\n</div><!-- fragment --><h1>Developing advanced nodes using JSONController template</h1>\n<p>If you need to build a node you may start coding from scratch as it is shown before. Additionally you can use a Template so many features are already implemented transparently:</p>\n<ul>\n<li>Sleep management</li>\n<li>Connection and disconnection handling</li>\n<li>Send data as JSON object</li>\n<li><a href=\"https://www.home-assistant.io\">Home Assistant</a> auto discovery integration feature.</li>\n<li>WiFi Manager custom parameters</li>\n<li>Integrated <a href=\"https://github.com/gmag11/FailSafeMode\">fail safe mode</a></li>\n</ul>\n<h3>Designing sensor algorithm</h3>\n<p>JSON Controller wraps EnigmaIOT node with additional features. It is implemented as a cpp and h files that contains <code>setup ()</code> and <code>loop ()</code> functions. You should use them instead main setup and loop.</p>\n<p>First step I recommend is coding a simple sketch that deals with your hardware (sensors, actuators) as a regular Arduino program. To illustrate this I will use EnigmaIOT-Sensor-Controller example. It is a node that uses a DS18B20 temperature sensor that reads temperature value, sends it and then sleeps until next measurement.</p>\n<p>So starting code could look like this</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">#include &lt;DallasTemperature.h&gt;</div>\n<div class=\"line\"> </div>\n<div class=\"line\">#define ONE_WIRE_BUS 4 // I/O pin used to communicate with sensor</div>\n<div class=\"line\"> </div>\n<div class=\"line\">//----------------- GLOBAL VARIABLES -----------------</div>\n<div class=\"line\">OneWire* oneWire;</div>\n<div class=\"line\">DallasTemperature* sensors;</div>\n<div class=\"line\">DeviceAddress insideThermometer;</div>\n<div class=\"line\">bool tempSent = false; // True when</div>\n<div class=\"line\">float tempC;</div>\n<div class=\"line\">//----------------- GLOBAL VARIABLES -----------------</div>\n<div class=\"line\"> </div>\n<div class=\"line\">bool sendTemperature (float temp) { // Mock function. This will later be adapted to send an EnigmaIOT message</div>\n<div class=\"line\">    Serial.printf (&quot;Temperarure: %f\\n&quot;, temp);</div>\n<div class=\"line\">    return true;</div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\">void setup () {</div>\n<div class=\"line\">    Serial.begin (115200); // Only for this test</div>\n<div class=\"line\">    </div>\n<div class=\"line\">    //----------------- USER CODE -----------------</div>\n<div class=\"line\">    oneWire = new OneWire (ONE_WIRE_BUS);</div>\n<div class=\"line\">    sensors = new DallasTemperature (oneWire);</div>\n<div class=\"line\">    sensors-&gt;begin ();</div>\n<div class=\"line\">    sensors-&gt;setWaitForConversion (false);</div>\n<div class=\"line\">    sensors-&gt;requestTemperatures ();</div>\n<div class=\"line\">    </div>\n<div class=\"line\">    time_t start = millis (); </div>\n<div class=\"line\">    </div>\n<div class=\"line\">    while (!sensors-&gt;isConversionComplete ()) {</div>\n<div class=\"line\">        delay (0);</div>\n<div class=\"line\">    }</div>\n<div class=\"line\">    Serial.printf (&quot;Conversion completed in %lld ms\\n&quot;, millis () - start);</div>\n<div class=\"line\">    tempC = sensors-&gt;getTempCByIndex (0);</div>\n<div class=\"line\">    //----------------- USER CODE END -------------</div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\">void loop () {</div>\n<div class=\"line\">    //----------------- USER CODE -----------------</div>\n<div class=\"line\">    if (!tempSent) { </div>\n<div class=\"line\">        if (sendTemperature (tempC)) { // First time this will be executed</div>\n<div class=\"line\">            tempSent = true;</div>\n<div class=\"line\">        }</div>\n<div class=\"line\">    }</div>\n<div class=\"line\">    //----------------- USER CODE END -------------</div>\n<div class=\"line\">    else {</div>\n<div class=\"line\">        ESP.deepSleep(10000); // Next time deep sleep mode will be requested automatically. Only for testing</div>\n<div class=\"line\">    }</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><p>When this code has the functionality that you need and it is tested you can follow with integration on EnigmaIOT JSON Controller code.</p>\n<h3>Code integration into EnigmaIOT</h3>\n<p>To develop a new JSONController node you need to use <a href=\"https://github.com/gmag11/EnigmaIOT/tree/dev/examples/EnigmaIOT-Json-Controller-Template\">JSONController template</a> example as starting point.</p>\n<p>I will follow the process to get to the point implemented in <a href=\"https://github.com/gmag11/EnigmaIOT/tree/dev/examples/EnigmaIOT-Sensor-Controller\"><b>EnigmaIOT-Sensor-Controller</b></a>.</p>\n<p>You need to follow these steps:</p>\n<h4>Rename JSON Controller files and class</h4>\n<p>It is recommended to rename cpp and h files so that its name is coherent with the function they have. Following this, <code><a class=\"el\" href=\"BasicController_8h.html\">BasicController.h</a>/cpp</code> will become <code><a class=\"el\" href=\"ds18b20Controller_8h.html\">ds18b20Controller.h</a>/cpp</code>. Then edit <code><a class=\"el\" href=\"classCONTROLLER__CLASS__NAME.html\">CONTROLLER_CLASS_NAME</a></code> and <code>CONTROLLER_NAME</code> on <code><a class=\"el\" href=\"ds18b20Controller_8h.html\">ds18b20Controller.h</a></code> like this:</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">#define CONTROLLER_CLASS_NAME ds18b20Controller</div>\n<div class=\"line\">static const char* CONTROLLER_NAME = &quot;DS18B20 controller&quot;;</div>\n</div><!-- fragment --><p>and two first lines to:</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">#ifndef _DS18B20CONTROLLER_h</div>\n<div class=\"line\">#define _DS18B20CONTROLLER_h</div>\n</div><!-- fragment --><h4>Define if your node should sleep</h4>\n<p>If you want to design a node that is powered with batteries, then it should enter into deep sleep mode after sending its data. To do so you only need to set <code>SLEEPY</code> to 1 or <code>true</code>. You need to do so on main cpp file. In sensor controller example, it is <code>EnigmaIOT-Sensor-Controller.ino</code>.</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">#define SLEEPY 1 // Set it to 1 if your node should sleep after sending data</div>\n</div><!-- fragment --><p>It you don't need sleep function leave it as 0.</p>\n<p>Notice that non sleepy nodes have an additional time synchronization function that is not available for nodes that enter deep sleep mode. This allows you to add features as timer or time synchronized tasks in different nodes.</p>\n<h4>Copy global variables as class parameters</h4>\n<p>You need to add all global variables defined in Arduino code as JSON Controller class parameters in <code><a class=\"el\" href=\"ds18b20Controller_8h.html\">ds18b20Controller.h</a></code>.</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">class CONTROLLER_CLASS_NAME : EnigmaIOTjsonController {</div>\n<div class=\"line\">protected:</div>\n<div class=\"line\">    // --------------------------------------------------</div>\n<div class=\"line\">    // add all parameters that your project needs here</div>\n<div class=\"line\">    // --------------------------------------------------</div>\n<div class=\"line\">    OneWire* oneWire;</div>\n<div class=\"line\">    DallasTemperature* sensors;</div>\n<div class=\"line\">    DeviceAddress insideThermometer;</div>\n<div class=\"line\">    bool tempSent = false;</div>\n<div class=\"line\">    float tempC;</div>\n</div><!-- fragment --><h4>Add custom libraries</h4>\n<p>If your code needs custom libraries you may add them on JSON controller header file (<code><a class=\"el\" href=\"ds18b20Controller_8h.html\">ds18b20Controller.h</a></code>)</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">// --------------------------------------------------</div>\n<div class=\"line\">// You may define data structures and constants here</div>\n<div class=\"line\">// --------------------------------------------------</div>\n<div class=\"line\">#include &lt;DallasTemperature.h&gt;</div>\n</div><!-- fragment --><h4>Add custom function as class methods</h4>\n<p>In the same way you should add custom functions like <code>sendTemperature ()</code> as class methods. You need to define them in <code><a class=\"el\" href=\"ds18b20Controller_8h.html\">ds18b20Controller.h</a></code></p>\n<div class=\"fragment\"><div class=\"line\">{c++}</div>\n<div class=\"line\">   // ------------------------------------------------------------</div>\n<div class=\"line\">   // You may add additional method definitions that you need here</div>\n<div class=\"line\">   // ------------------------------------------------------------</div>\n<div class=\"line\"> </div>\n<div class=\"line\">   bool sendTemperature (float temp);</div>\n</div><!-- fragment --><h4>Include Home Assistant integration</h4>\n<p>If you like to integrate your node into HomeAssistant you may include the corresponding header file.</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">#if SUPPORT_HA_DISCOVERY    </div>\n<div class=\"line\">#include &lt;haSensor.h&gt;</div>\n<div class=\"line\">#endif</div>\n</div><!-- fragment --><p>You need to choose the file to include according node function. As this will be a sensor node we should use <code><a class=\"el\" href=\"haSensor_8h.html\" title=\"Home Assistant sensor integration.\">haSensor.h</a></code>. If your node uses different profiles you can include several HA integration header files. For instance, a smart metering plug is a sensor (Power measurement) and binary switch (ON-OFF).</p>\n<p>Then you need to add configuration on cpp file. In sensor controller node example it is</p>\n<div class=\"fragment\"><div class=\"line\">{c++}</div>\n<div class=\"line\">   // *******************************</div>\n<div class=\"line\">   // Add your characteristics here</div>\n<div class=\"line\">   // There is no need to futher modify this function</div>\n<div class=\"line\">   haEntity-&gt;setNameSufix (&quot;temp&quot;);</div>\n<div class=\"line\">   haEntity-&gt;setDeviceClass (sensor_temperature);</div>\n<div class=\"line\">   haEntity-&gt;setExpireTime (3600);</div>\n<div class=\"line\">   haEntity-&gt;setUnitOfMeasurement (&quot;ºC&quot;);</div>\n<div class=\"line\">   haEntity-&gt;setValueField (&quot;temp&quot;);</div>\n<div class=\"line\">   // *******************************</div>\n</div><!-- fragment --><h4>Add defines</h4>\n<p>All needed defines and constants that you need in your code may be added at the beginning of controller cpp file. You can add them to header file instead but it is a good practice to restrict its code visibility.</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">// -----------------------------------------</div>\n<div class=\"line\">// You may add some global variables you need here,</div>\n<div class=\"line\">// like serial port instances, I2C, etc</div>\n<div class=\"line\">// -----------------------------------------</div>\n<div class=\"line\"> </div>\n<div class=\"line\">#define ONE_WIRE_BUS 4</div>\n</div><!-- fragment --><h4>Correct JSON controller header include in cpp file</h4>\n<p>If you modified file and class names you will need to update include in cpp file</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">#include &quot;ds18b20Controller.h&quot;</div>\n</div><!-- fragment --><h4>Add <code><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d\">setup()</a></code> and <code><a class=\"el\" href=\"EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f\">loop()</a></code>code to class method</h4>\n<p>Now, you can start integrating your code into JSON controller class. You need to copy setup and loop code into corresponding methods in JSON controller class.</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">void CONTROLLER_CLASS_NAME::setup (EnigmaIOTNodeClass* node, void* data) {</div>\n<div class=\"line\">    enigmaIotNode = node;</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    // Send a &#39;hello&#39; message when initalizing is finished for non sleepy nodes</div>\n<div class=\"line\">    if (!enigmaIotNode-&gt;getNode ()-&gt;getSleepy ()) {</div>\n<div class=\"line\">        if (!(enigmaIotNode-&gt;getNode ()-&gt;getSleepy ())) {</div>\n<div class=\"line\">            sendStartAnouncement ();  // Disable this if node is sleepy</div>\n<div class=\"line\">        }</div>\n<div class=\"line\">    }</div>\n<div class=\"line\">    // Send hello end</div>\n<div class=\"line\">    </div>\n<div class=\"line\">    // You do node setup here. Use it as it was the normal setup() Arduino function</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    oneWire = new OneWire (ONE_WIRE_BUS);</div>\n<div class=\"line\">    sensors = new DallasTemperature (oneWire);</div>\n<div class=\"line\">    sensors-&gt;begin ();</div>\n<div class=\"line\">    sensors-&gt;setWaitForConversion (false);</div>\n<div class=\"line\">    sensors-&gt;requestTemperatures ();</div>\n<div class=\"line\">    time_t start = millis ();</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    while (!sensors-&gt;isConversionComplete ()) {</div>\n<div class=\"line\">        delay (0);</div>\n<div class=\"line\">    }</div>\n<div class=\"line\">    DEBUG_WARN (&quot;Conversion completed in %d ms&quot;, millis () - start);</div>\n<div class=\"line\">    tempC = sensors-&gt;getTempCByIndex (0);</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">void CONTROLLER_CLASS_NAME::loop () {</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    // If your node stays allways awake do your periodic task here</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    // You can send your data as JSON. This is a basic example</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    if (!tempSent &amp;&amp; enigmaIotNode-&gt;isRegistered()) {</div>\n<div class=\"line\">        if (sendTemperature (tempC)) {</div>\n<div class=\"line\">            tempSent = true;</div>\n<div class=\"line\">        }</div>\n<div class=\"line\">    }</div>\n<div class=\"line\">    </div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><p>Notice that I've added <code>enigmaIotNode-&gt;isRegistered()</code> to send data only if node has already registered with Gateway and not losing messages.</p>\n<h4>Add custom functions as class methods</h4>\n<p>Add every custom function you have used as method into the class. You already added definitions in header file before. Now add the implementation to cpp file</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">bool CONTROLLER_CLASS_NAME::sendTemperature (float temp) {</div>\n<div class=\"line\">    const size_t capacity = JSON_OBJECT_SIZE (2);</div>\n<div class=\"line\">    DynamicJsonDocument json (capacity);</div>\n<div class=\"line\">    json[&quot;temp&quot;] = temp;</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    return sendJson (json);</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><p>This creates a JSON object with all data you need and sends it to gateway using <code>sendJson ()</code> method. Notice that EnigmaIOT uses esp-now protocol to communicate nodes with gateway. This implies a limit of 250 bytes per message, including headers. So, if you have problem receiving messages or you get partial data check the length of your payload.</p>\n<h4>Additional functions</h4>\n<p>There are a few of additional functions. Check other controller examples to learn how to use them.</p>\n<ul>\n<li><a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOT-Button-Controller\"><b>EnigmaIOTButtonController</b></a>: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> that send messages when a button is pressed. (Non sleepy)</li>\n<li><a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOT-DashButton-Controller\"><b>EnigmaIOT-DashButton-Controller</b></a>: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> that wakes from deep sleep when a button is pressed, send its message and sleeps indefinitely. (Sleepy)</li>\n<li><a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOT-Led-Controller\"><b>EnigmaIOT-Led-Controller</b></a>: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> that controls a singled light or LED (Non sleepy)</li>\n<li><a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOT-Sensor-Controller\"><b>EnigmaIOT-Sensor-Controller</b></a>: <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> that send value from a DS18B20 temperature sensor regularly. (Sleepy)</li>\n<li><a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOT-SmartSwitch-Controller\"><b>EnigmaIOT-SmartSwitch-Controller</b></a>: Smart switch that uses a button to toggle a relay. It sends status messages regularly and on every toggle action. It listens for messages to allow remote control. (Non sleepy)</li>\n</ul>\n<h5>Listen for incoming messages from gateway</h5>\n<p>Some kind of nodes as light controllers or smart switches should accept incoming messages to control different parameters. This can be achieved with <code>processRxCommand</code> and <code>sendCommandResp</code>.</p>\n<h5>Notice when a node is connected or disconnected from EnigmaIOT network</h5>\n<p>It may be useful for a node to know if it is actually connected to gateway. To implement this you may fill these two methods: <code>connectInform</code> and <code>disconnectInform</code>.</p>\n<h5>Save and recover custom persistent configuration</h5>\n<p>Sometimes you need some data to be stored persistently on node sleeps or power cycles. There are a couple methods that may be implemented to achieve this: <code>loadConfig</code> and <code>saveConfig</code>.</p>\n<h5>Add custom parameters to configuration portal</h5>\n<p>You may want to add your own configuration fields to first configuration web portal on node. You can get this by implementing <code>configManagerStart</code> and <code>configManagerExit</code>.</p>\n<h4>Advanced tuning</h4>\n<p>There are some advanced settings on <code>EnigmaIOTconfig.h</code>. You may modify this data but it is important that you understand what every setting means. If you adjust them randomly you may get into instabilities or your node may be unable to communicate at all. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_docs_node-ota-update.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: OTA Update</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">OTA Update </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>MQTT Gateway example includes plain Arduino OTA mechanism. OTA is protected using network key selected during initial configuration.</p>\n<p>On nodes, OTA updates are transferred using the same mechanism. Firmware is sent over MQTT using a <a href=\"./EnigmaIoTUpdate/EnigmaIoTUpdate.py\">Python script</a>. Then gateway selects the appropriate node and send this binary data over ESP-NOW.</p>\n<p>As ESP-NOW restricts <b>maximum payload to 250 bytes per message</b> firmware is splitted in chunks. Every chunk is <b>212 bytes</b> long, so that it fits together with message headers and is multiple of 4. This splitting work is done by <code><a class=\"el\" href=\"EnigmaIoTUpdate_8py.html\">EnigmaIoTUpdate.py</a></code> script.</p>\n<h2>Using <a class=\"el\" href=\"EnigmaIoTUpdate_8py.html\">EnigmaIoTUpdate.py</a></h2>\n<p>A requirement is to have installed <a href=\"https://www.python.org/download/releases/3.0/\">Python3</a> in the computer used to do the update.</p>\n<p>In order to run the update, you need to install <a href=\"https://pypi.org/project/paho-mqtt/\"><code>paho-mqtt</code></a> library. To do that you can follow instructions <a href=\"https://pypi.org/project/paho-mqtt/#installation\">here</a>.</p>\n<div class=\"fragment\"><div class=\"line\">$python3 ./EnigmaIoTUpdate.py --help</div>\n<div class=\"line\"> </div>\n<div class=\"line\">Usage: EnigmaIoTUpdate.py [options]</div>\n<div class=\"line\"> </div>\n<div class=\"line\">Options:</div>\n<div class=\"line\">  -h, --help            show this help message and exit</div>\n<div class=\"line\">  -f FILENAME, --file=FILENAME</div>\n<div class=\"line\">                        File to program into device</div>\n<div class=\"line\">  -d ADDRESS, --daddress=ADDRESS</div>\n<div class=\"line\">                        Node address or name</div>\n<div class=\"line\">  -t BASETOPIC, --topic=BASETOPIC</div>\n<div class=\"line\">                        Base topic for MQTT messages</div>\n<div class=\"line\">  -u MQTTUSER, --user=MQTTUSER</div>\n<div class=\"line\">                        MQTT server username</div>\n<div class=\"line\">  -P MQTTPASS, --password=MQTTPASS</div>\n<div class=\"line\">                        MQTT server user password</div>\n<div class=\"line\">  -S MQTTSERVER, --server=MQTTSERVER</div>\n<div class=\"line\">                        MQTT server address or name</div>\n<div class=\"line\">  -p MQTTPORT, --port=MQTTPORT</div>\n<div class=\"line\">                        MQTT server port</div>\n<div class=\"line\">  -s, --secure          Use secure TLS in MQTT connection. Normally you should</div>\n<div class=\"line\">                          use port 8883</div>\n<div class=\"line\">  -D, --speed           Sets formware delivery speed [fast | medium | slow]. The fastest</div>\n<div class=\"line\">                          the biggest chance to get troubles during update. Fast option</div>\n<div class=\"line\">                          normally works but medium is more resilient</div>\n<div class=\"line\">  --unsecure            Use secure plain TCP in MQTT connection. Normally you</div>\n<div class=\"line\">                          should use port 1883</div>\n</div><!-- fragment --><p>An example of this command could be like this:</p>\n<div class=\"fragment\"><div class=\"line\">python3 ./EnigmaIoTUpdate.py \\</div>\n<div class=\"line\">             -f EnigmaIOTsensor.bin \\</div>\n<div class=\"line\">             -d 11:22:33:44:55:66 \\</div>\n<div class=\"line\">             -t enigmaiot \\</div>\n<div class=\"line\">             -u &quot;mymqttbrokeruser&quot; \\</div>\n<div class=\"line\">             -P &quot;mymqttbrokerpassword&quot; \\</div>\n<div class=\"line\">             -S mysecure.mqtt.server \\</div>\n<div class=\"line\">             -p 8883 \\</div>\n<div class=\"line\">             -D medium \\</div>\n<div class=\"line\">             -s</div>\n</div><!-- fragment --><p>Notice that using ESP-NOW, device address correspond to <b>MAC address</b> of your ESP8266 or ESP32 node.</p>\n<p>It is very important to configure user and password on you MQTT broker. Besides, if it is going to be accessed from the Internet you should activate TLS encryption and a certificate. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_docs_technical-background.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Design</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Design </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><h2>System Design</h2>\n<p>System functions are divided in three layers: application, link and physical layer.</p>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/system_layers.png\" alt=\"Software Layers\" class=\"inline\"/></p>\n<ul>\n<li><b>Application layer</b> is not controlled by EnigmaIoT protocol but main program. User may choose whatever data format or final destination of payload. A good option is to use CayenneLPP format but any other format or even raw data may be used. The only limit is the maximum packet length that, for ESP-NOW is around 200 bytes.</li>\n<li><b>Link layer</b> is the one that add privacy and security. It manages connection between nodes and gateway in a transparent way. It does key agreement and node registration and checks the correctness of data messages. In case of any error it automatically start a new registration process. On this layer, data packets are encrypted using calculated symmetric key.</li>\n<li><b>Physical layer</b> currently uses connectionless ESP-NOW. But a hardware abstraction layer has been designed so it is possible to develop interfaces for any other layer 1 technology like LoRa or nRF24F01 radios.</li>\n</ul>\n<h2>EnigmaIoT protocol</h2>\n<p>The named <b>EnigmaIoT protocol</b> is designed to use encrypted communication without the need to hardcode the key. It uses <a href=\"https://en.wikipedia.org/wiki/Elliptic-curve_Diffie–Hellman\">Elliptic Curves Diffie Hellman</a> algorithm to calculate a shared key.</p>\n<p>The process starts with node announcing itself with a Client Hello message. It tells the gateway its intention to establish a new shared key. It sends public key to be used on gateway to calculate the shared key.</p>\n<p>Gateway answers with Server Hello message that includes its public key for shared key calculation on node.</p>\n<p>Once shared key is calculated, node send an encrypted message as Key Exchange Finished message. Poly1305 encryption tag is used to check message integrity.</p>\n<p>If gateway validates tag correctly it answers with a Cipher Finished message.</p>\n<p>This process is protected with a 32 byte shared <b>network key</b>, used for <b>authentication</b>. As in the first two messages shared key is not known yet, Client Hello and Server Hello messages are encrypted whit this network key. If network key is not the same on gateway and node this will lead to decryption errors and messages will be ignored.</p>\n<p>In case of any error on node key negotiation gateway sends an Invalidate Key to reset to original status and forgets any calculated shared key for this node.</p>\n<p>When key is marked as valid node may start sending sensor data.</p>\n<p>Optionally, gateway can send data to node. As node may be sleeping between communications, downlink messages has to be sent just after uplink data. So, one downlink message is queued until node communicates. <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> waits some milliseconds before sleep for downlink data.</p>\n<p>If a new downlink message arrives, old scheduled data for that node, if any, is overwritten.</p>\n<p>In case of nodes that do not sleep (like a mains powered relay), gateway can send downlink data in any moment. Sleepy node is signaled during node registration on a bit in Key Exchange Finished message. It is set to 1 to signal that node will sleep just after sending data.</p>\n<p>Key is forced to change every period. Gateway decides the moment to invalidate each node key. If so, it sends an invalidate key as downlink, after next data message communication. This key validity period is configurable on <a href=\"https://github.com/gmag11/EnigmaIOT/blob/master/src/lib/EnigmaIoTconfig.h\">EnigmaIoTconfig.h</a> file.</p>\n<p>After that node may start new key agreement sending a new Client Hello message.</p>\n<p>All nodes and gateway are identified by its MAC address. No name is assigned so no configuration is needed on node. Function assignment has to be done at a higher level.</p>\n<h1>State diagram for nodes and Gateway</h1>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/StateDiagram-Sensor.svg?sanitize=true\" alt=\"Sensor State Diagram\" style=\"pointer-events: none;\" width=\"800\" class=\"inline\"/></p>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/StateDiagram-Gateway.svg?sanitize=true\" alt=\"Gateway State Diagram\" style=\"pointer-events: none;\" width=\"800\" class=\"inline\"/></p>\n<h1>Message format specification</h1>\n<h2>Client Hello message</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ClientHello.png\" alt=\"Client Hello message format\" class=\"inline\"/></p>\n<p>Client hello is sent by node to start registration procedure. It includes the public key to be used on Elliptic Curve Diffie Hellman (EDCH) algorithm to calculate the key. Initialization vector (IV) is used for encryption. There is a random 4 byte field reserved for future use.</p>\n<p>This message is sent encrypted with network key.</p>\n<h2>Server Hello message</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ServerHello.png\" alt=\"Server Hello message format\" class=\"inline\"/></p>\n<p>After receiving and checking Client Hello message, gateway responds with a Server Hello message. It carries gateway's public key to let node calculate key using ECDH. There is a random 4 byte field reserved for future use. Gateway assigns node a NodeID. It is signaled as a 2 byte field.</p>\n<p>Server Hello message is sent encrypted with network key.</p>\n<h2><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Data message</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/SensorData.png\" alt=\"Node payload message format\" class=\"inline\"/></p>\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> data is always encrypted using shared key and IV. Apart from payload this message includes node ID and a counter used by gateway to check lost or repeated messages from that node.</p>\n<p>Total message length (without tag) is included on a 2 byte field.</p>\n<h2>Unencrypted <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Data message</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/UnencryptedSensorData.png\" alt=\"Node unencrypted payload message format\" class=\"inline\"/></p>\n<p>In case that extreme performance is needed there is the possibility to send unencrypted data so processor spends a few milliseconds less. It is not recommended to do so unless you want to investigate crypto software performance. Use at your own data risk :D</p>\n<p>This message also includes node ID and a counter used by gateway to check lost or repeated messages from that node.</p>\n<h2><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> control message (downlink)</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/SensorCommand-Downlink.png\" alt=\"Node control message format\" class=\"inline\"/></p>\n<p>Gateway can send commands to an individual node in a similar way as sensor data is sent by nodes. For nodes that can be slept between consecutive data messages this commands are queued and sent just after a data message is received.</p>\n<p>Only last message is queued. In case Gateway tries to send a new message, old one gets deleted and overridden by the new one.</p>\n<p>Possible values of first byte means:</p>\n<p>02: SET command (unicast)</p>\n<p>82: SET command (broadcast)</p>\n<p>12: GET command (unicast)</p>\n<p>92: GET command (broadcast)</p>\n<h2>Control message</h2>\n<h4>Downlink Control Message</h4>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ControlComand-Downlink.png\" alt=\"DL Control Command message format\" class=\"inline\"/></p>\n<p>Broadcast messages of this type start with <code>0x84</code>.</p>\n<h4>Uplink Control Message</h4>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ControlComand-Uplink.png\" alt=\"UL Control Command message format\" class=\"inline\"/></p>\n<p>Gateway and node can exchange internal control commands. These are used to set internal protocol parameters like sleep time. This type of messages are processed like normal downlink messages, but are not passed to higher level (user code) in <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.</p>\n<p>Some control messages, like OTA update messages, require that they are processed immediately. Hence, it is required that node is not in deep sleep mode. This can be controlled, for instance, using another control command to set sleep time to 0.</p>\n<h2>Clock synchronization</h2>\n<h4>Clock sync request</h4>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ClockSyncRequest.png\" alt=\"Clock sync request\" class=\"inline\"/></p>\n<h4>Clock sync response</h4>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ClockSyncResponse.png\" alt=\"Clock sync response\" class=\"inline\"/></p>\n<p>In non sleepy nodes, it may be useful to send a message from time to time to let Gateway know that node is still active and let <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> to check that is is still registered in Gateway.</p>\n<p>Clock syncronization may be a very good feature if you need to coordinate actions on different nodes.</p>\n<p>EnigmaIOT combines these two features into one request and response. Nodes may send clock sync request every some time to ping gateway and get common clock updated. Clock synchronization uses a mechanism similar to the one used by <a href=\"https://en.wikipedia.org/wiki/Network_Time_Protocol#:~:text=Simple%20Network%20Time%20Protocol%20\">SNTP protocol</a>.</p>\n<p><strike>Notice that this is not world time sync but a numeric clock.</strike></p>\n<p>Since version 0.9.2, if Gateway has its internal time synchronized using NTP it sends non sleepy nodes <b>current real date and time</b> in millisecond Unix format .</p>\n<p>This feature may be disabled if needed.</p>\n<h2>Address to node name translation</h2>\n<h4>Set node name</h4>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/SetNodeName.png\" alt=\"Set Node Name\" class=\"inline\"/></p>\n<h4>Set node name result</h4>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/SetNodeNameResult.png\" alt=\"Set Node Name result\" class=\"inline\"/></p>\n<p>In order to make node messages more readable for humans, this implements a way to let Gateway to translate EnigmaIOT addresses to custom names (for instance, \"RoomBlindControl\"). This eases node replacement in case of failure.</p>\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> names can be up to 32 characters long and should avoid characters different of letters and numbers. <b>Characters #,+ and / are specially forbidden</b>.</p>\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name is configured by user during first configuration in WiFi Web portal.</p>\n<h2>Invalidate Key message</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/InvalidateKey.png\" alt=\"Invalidate Key message format\" class=\"inline\"/></p>\n<p>After every data message from nodes, gateway evaluates key integrity and validity. In case of any error decoding the packet gateways ignores data and reply with this message indicating the reason that caused error. <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> must start a new registration procedure in order to send data again. After this new registration node resends the last data message.</p>\n<p>A gateway defines a key validity period after that a node key is marked as expired. In a message is received after that is processed normally but an Invalidate Key message indicating key expiration as reason. <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> then starts a registration procedure but does not retry communication.</p>\n<p>Invalidate Key message is always sent unencrypted.</p>\n<h1>Protocol procedures</h1>\n<h2>Normal node registration and node data exchange</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/NodeRegistration.svg?sanitize=true\" alt=\"Normal node registration message sequence\" style=\"pointer-events: none;\" width=\"400\" class=\"inline\"/></p>\n<h2>Incomplete Registration</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/RegistrationIncomplete.svg?sanitize=true\" alt=\"Incomplete Registration message sequence\" style=\"pointer-events: none;\" width=\"400\" class=\"inline\"/></p>\n<h2><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Not Registered</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/NodeNotRegistered.svg?sanitize=true\" alt=\"Node Not Registered message sequence\" style=\"pointer-events: none;\" width=\"400\" class=\"inline\"/></p>\n<h2>Key Expiration</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/KeyExpiration.svg?sanitize=true\" alt=\"KeyExpiration message sequence\" style=\"pointer-events: none;\" width=\"400\" class=\"inline\"/></p>\n<h2><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Registration Collision</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/NodeRegistrationCollision.svg?sanitize=true\" alt=\"Node Registration Collision message sequence\" style=\"pointer-events: none;\" width=\"600\" class=\"inline\"/></p>\n<h2>Wrong Data Counter</h2>\n<p><img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/WrongCounter.svg?sanitize=true\" alt=\"Wrong Counter message sequence\" style=\"pointer-events: none;\" width=\"400\" class=\"inline\"/></p>\n<h1>Hardware description</h1>\n<h2>Gateway</h2>\n<p>A gateway concentrates communication from all nodes, manages their registrations status, negotiate session key with them and outputs their messages to an output protocol.</p>\n<p><a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOTGatewayMQTT\">EnigmaIOT MQTT Gateway</a> is the implementation for a MQTT gateway.</p>\n<p>Since version 0.7.0 Gateway is a ESP32 or ESP8266 board with 4 MB of flash memory or more. ESP8266 gateways cannot use MQTT TLS encryption due to memory limitations.</p>\n<p>Use of ESP32 platform is recommended. ESP8266 EnigmaIOT gateway code is less tested.</p>\n<p>Thanks to modular design, other output modules may be easily developed by implementing <code><a class=\"el\" href=\"GwOutput__generic_8h.html\" title=\"Generic Gateway output module template.\">GwOutput_generic.h</a></code>. Examples of this may be LoRaWAN output gateway, COAP gateway or any other network protocol that is needed. Even an offline SD data logger could be done.</p>\n<p>I've included a <a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOTGatewayDummy\">Gateway with dummy output module</a> to show simple OutputGw module development.</p>\n<p>In order to <b>configure</b> you need at least this data:</p>\n<ul>\n<li><b>SSID</b>: WiFi network to connect to</li>\n<li><b>Password</b>: WiFi pre shared key</li>\n<li><b>Network Name</b>: Name of the EnigmaIOT network. If you have several gateways it is convenient to set them to different network names. Gateway sets up an AP with this name to help nodes to find its address and WiFi channel.</li>\n<li><b>Network Key</b>: Encryption key to be used during node registration. It is used as Gateway AP pre shared key (not external WiFi). It must have from 8 to 32 characters long</li>\n<li><b>Channel</b>: Initial WiFi channel to communicate nodes and Gateway. This is not important if gateway is connected to your home WiFi as nodes and gateway will use same channel as you have configured into your router.</li>\n</ul>\n<p>User code may add additional custom parameters.</p>\n<h2><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a></h2>\n<p>A node is either a ESP8266 or ESP32 board with a number of sensors. A node may sleep between sensor readings, status is stored so that it may send data without reconnection.</p>\n<p>Any ESP8266 or ESP32 board with at least 1 MB of flash may be used.</p>\n<p>There are several implementations in <a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples\">examples</a>:</p>\n<p><a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/enigmaiot_node\">EnigmaIOT Node</a>: Basic node with deep sleep function. Sensor data is mocked up in example and sent using CayenneLPP encoding, you only need to replace it with your sensor reading code. Expected duration with 2 AA type batteries is more than one year, but a low power booster/regulator should be used in a custom board.</p>\n<p><a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/enigmaiot_node_msgpack\">Enigmaiot Node MsgPack</a>: It has same functionality as the example above but uses JSON and MessagePack as Payload encoding.</p>\n<p><a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/enigmaiot_node_nonsleepy\">EnigmaIOT Node NonSleepy</a>: Same functionality as previous examples but this does not sleep. This may be useful for sensors or actuators which are connected to mains, like light switches or smart plugs.</p>\n<p><a href=\"https://github.com/gmag11/EnigmaIOT/tree/master/examples/enigmaiot_led_flasher\">EnigmaIOT LED Flasher</a>: On non sleepy nodes a common clock may be synchronized with gateway. This is an example of this. All nodes that include this firmware will flash their built in LED synchronously after successful registration.</p>\n<p>For <b>configuration</b>, node needs this data:</p>\n<ul>\n<li><b>SSID</b>: corresponds to network name configured on Gateway</li>\n<li><b>Password</b>: You must use network key used in Gateway</li>\n<li><b><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> Name</b>: Human readable name for node. This must be unique in all nodes in same EnigmaIOT network. This may be changed afterwards using MQTT protocol</li>\n<li><b>Sleep Time</b>: If a node uses deep sleep mode this configures the initial period to be slept. This can be modified using MQTT commands.</li>\n</ul>\n<p>User code may add additional custom parameters.</p>\n<h1>Data format</h1>\n<p>Although it is not mandatory at all, use of <a href=\"https://mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload\">CayenneLPP format</a> is recommended for sensor data compactness.</p>\n<p>You may use <a href=\"https://github.com/ElectronicCats/CayenneLPP\">CayenneLPP library</a> for encoding on node and decoding on Gateway.</p>\n<p>Example gateway code expands data message to JSON data, to be used easily as payload on a MQTT publish message to a broker. For JSON generation <a href=\"https://arduinojson.org\">ArduinoJSON</a> library is required.</p>\n<p>In any case you can use your own format or even raw unencoded data. Take care of maximum message length that communications layer uses. For ESP-NOW, maximum payload length it is 217 bytes.</p>\n<p>Since version 0.9 payload encoding is signaled on user data messages (both uplink and downlink) so new formats are possible. Currently <a href=\"https://mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload\">CayenneLPP</a> and <a href=\"https://msgpack.org\">MessagePack</a> formats, in addition to RAW data, are possible. Check examples for usage instruction. MessagePack encoding and decoding are managed by ArduinoJSON library.</p>\n<p>This change may produce incompatibilities with older versions so make sure you update your gateway and all your nodes to latest library version.</p>\n<h1>ESP-NOW channel selection</h1>\n<p>Gateway has always its WiFi interface working as an AP. Its name corresponds to configured Network Name.</p>\n<p>During first start, after connecting supply, node tries to search for a WiFi AP with that name. Whet it is found, node will use its MAC address and channel as destination for ESP-NOW messages. It also gets RSSI (signal level) and reports it to gateway.</p>\n<p>This information is stored in flash so node will use it to communicate in all following messages.</p>\n<p>In the case that gateway has changed its channel (for instance due to a reconfiguration) node will not be able to communicate again.</p>\n<p>If several (2 by default) transmission errors are detected by node, it starts searching for gateway again. When found it keeps sending messages normally and new channel is updated in configuration persistently.</p>\n<p>So, node will always follow the channel configuration that gateway is working in.</p>\n<h1>Output data from gateway</h1>\n<h2>Uplink messages</h2>\n<p>A user may program their own output format modifying gateway example program. For my use case gateway outputs MQTT messages in this format:</p>\n<div class=\"fragment\"><div class=\"line\">&lt;configurable prefix&gt;/&lt;node address | node name&gt;/data &lt;json data&gt;</div>\n</div><!-- fragment --><p>A prefix is configured on gateway to allow several sensor networks to coexist in the same subnet. After that address and data are sent.</p>\n<p>After every received message, gateway detects if any packet has been lost before and reports it using MQTT message using this format:</p>\n<div class=\"fragment\"><div class=\"line\">&lt;configurable prefix&gt;/&lt;node address | node name&gt;/status {&quot;per&quot;:&lt;packet error rate&gt;,&quot;lostmessages&quot;:&lt;Number of lost messages&gt;,&quot;totalmessages&quot;:&lt;Total number of messages&gt;,&quot;packetshour&quot;:&lt;Packet rate&gt;}</div>\n</div><!-- fragment --><h2>Downlink messages</h2>\n<p>EnigmaIoT allows sending messages from gateway to nodes. In my implementation I use MQTT to trigger downlink messages too.</p>\n<p>To make it simpler, downlink messages use the same structure than uplink.</p>\n<div class=\"fragment\"><div class=\"line\">&lt;network name&gt;/&lt;node address | node name&gt;/&lt;get|set&gt;/data &lt;command data&gt;</div>\n</div><!-- fragment --><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address means destination node address. Configurable prefix is the same used for uplink communication.</p>\n<p>Commands may be given in JSON format. In that case they are sent to node in MessagePack format. That makes that mode gets the complete JSON object. This implies that no change is needed on Gateway to add new node types. Gateway is transparent to user data.</p>\n<p>This is an example of MQTT message that triggers a downlink packet.</p>\n<div class=\"fragment\"><div class=\"line\">enigmaiot/12:34:56:78:90:12/set/data {&quot;light1&quot;: 1, &quot;light2&quot;: 0}</div>\n</div><!-- fragment --><p>If node uses a name, MQTT message may use of it.</p>\n<div class=\"fragment\"><div class=\"line\">enigmaiot/kitcken_light/set/data {&quot;light1&quot;: 1, &quot;light2&quot;: 0}</div>\n</div><!-- fragment --><p>After sending that command node will receive a 'set' command with data <code>{\"light1\": 1, \"light2\": 0}</code>.</p>\n<p>Commands can be sent in any other format different that JSON, even binary. In that case they are sent without conversion to node using MessagePack encoding format to reduce transferred data bits.</p>\n<h2>Control messages</h2>\n<p>Control messages are intended to set node specific settings, like sleep time, channel, trigger OTA update, etc. They are not passed to the main node sketch but gateway treat them as normal downlink messages.</p>\n<p>Normally control commands trigger a response as an uplink message.</p>\n<p>This is the list of currently implemented control commands:</p>\n<ul>\n<li>Get node protocol version</li>\n<li>Get/Set sleep duration time</li>\n<li>OTA Update</li>\n<li>Identify</li>\n<li><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> configuration reset</li>\n<li>Request measure RSSI</li>\n<li>Get/Set node name</li>\n<li>Restart node MCU</li>\n</ul>\n<table class=\"doxtable\">\n<tr>\n<th colspan=\"2\">Command </th><th>Response  </th></tr>\n<tr>\n<td>Get version </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/get/version</code> </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/version {\"version\":\"&amp;lt;version&amp;gt;\"}</code>  </td></tr>\n<tr>\n<td>Get sleep duration </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/get/sleeptime</code> </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/sleeptime {\"sleeptime\":\"&amp;lt;sleep_time&amp;gt;\"}\"</code>  </td></tr>\n<tr>\n<td>Set sleep duration </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/sleeptime &lt;sleep_time&gt;</code> </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/sleeptime {\"sleeptime\":\"&amp;lt;sleep_time&amp;gt;\"}</code>  </td></tr>\n<tr>\n<td>OTA message </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/ota &lt;ota message&gt;</code> </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/ota {\"result\":\"&amp;lt;ota_result_text&amp;gt;,\"status\":\"&lt;ota_result_code&gt;\"}</code>  </td></tr>\n<tr>\n<td>Identify node </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/identify</code> </td><td>None  </td></tr>\n<tr>\n<td>Reset node configuration </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/reset</code> </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/reset {}</code>  </td></tr>\n<tr>\n<td>Request measure RSSI </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/get/rssi</code> </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/rssi {\"rssi\":&lt;RSSI&gt;,\"channel\":&lt;WiFi channel&gt;}</code>  </td></tr>\n<tr>\n<td>Request node name </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/get/name</code> </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/name {\"address\":&lt;node address&gt;,\"name\":&lt;<a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name&gt;}</code>  </td></tr>\n<tr>\n<td>Set node name </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/name &lt;<a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name&gt;</code> </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/name {\"address\":&lt;node address&gt;,\"name\":&lt;<a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name&gt;}</code>  </td></tr>\n<tr>\n<td>Restart <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> MCU </td><td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/restart</code> </td><td>None  </td></tr>\n</table>\n<p>For instance, publishing <code>enigmaiot/12:34:56:78:90:12/get/version</code> will produce <code>enigmaiot/12:34:56:78:90:12/result/version 0.2.0</code>.</p>\n<p>Messages are encoded to reduce the amount of bytes to be sent over internal protocol, so that the air time is as short as possible.</p>\n<table class=\"markdownTable\">\n<tr class=\"markdownTableHead\">\n<th class=\"markdownTableHeadNone\">Command  </th><th class=\"markdownTableHeadNone\">Msg type  </th><th class=\"markdownTableHeadNone\">Encoding   </th></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">Get version  </td><td class=\"markdownTableBodyNone\"><code>0x01</code>  </td><td class=\"markdownTableBodyNone\">None   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">Version result  </td><td class=\"markdownTableBodyNone\"><code>0x81</code>  </td><td class=\"markdownTableBodyNone\">version as ASCII string   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">Get sleep time  </td><td class=\"markdownTableBodyNone\"><code>0x02</code>  </td><td class=\"markdownTableBodyNone\">None   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">Set sleep time  </td><td class=\"markdownTableBodyNone\"><code>0x03</code>  </td><td class=\"markdownTableBodyNone\">Sleep time in seconds (Unsigned integer - 32 bit)   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">Sleep time result  </td><td class=\"markdownTableBodyNone\"><code>0x82</code>  </td><td class=\"markdownTableBodyNone\">Sleep time in seconds (Unsigned integer - 32 bit)   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">OTA Update  </td><td class=\"markdownTableBodyNone\"><code>0xEF</code>  </td><td class=\"markdownTableBodyNone\">OTA update specific format   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">OTA Update result  </td><td class=\"markdownTableBodyNone\"><code>0xFF</code>  </td><td class=\"markdownTableBodyNone\">OTA result code (text and integer code)   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">Identify  </td><td class=\"markdownTableBodyNone\"><code>0x04</code>  </td><td class=\"markdownTableBodyNone\">None. Function to identify a physical node by flashing its LED   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">Reset node configuration  </td><td class=\"markdownTableBodyNone\"><code>0x05</code>  </td><td class=\"markdownTableBodyNone\">None. This will set node to factory config   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">Reset config confirmation  </td><td class=\"markdownTableBodyNone\"><code>0x85</code>  </td><td class=\"markdownTableBodyNone\">None   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">Request measure RSSI  </td><td class=\"markdownTableBodyNone\"><code>0x06</code>  </td><td class=\"markdownTableBodyNone\">None   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">Report measure RSSI  </td><td class=\"markdownTableBodyNone\"><code>0x86</code>  </td><td class=\"markdownTableBodyNone\">RSSI (signed integer - 8 bit), WiFi channel (unsigned integer - 8 bit)   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">Get node name  </td><td class=\"markdownTableBodyNone\"><code>0x07</code>  </td><td class=\"markdownTableBodyNone\">None   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">Report node name  </td><td class=\"markdownTableBodyNone\"><code>0x87</code>  </td><td class=\"markdownTableBodyNone\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name as string   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">Set node name  </td><td class=\"markdownTableBodyNone\"><code>0x08</code>  </td><td class=\"markdownTableBodyNone\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name as string   </td></tr>\n<tr class=\"markdownTableRowEven\">\n<td class=\"markdownTableBodyNone\">Restart node MCU  </td><td class=\"markdownTableBodyNone\"><code>0x09</code>  </td><td class=\"markdownTableBodyNone\">None   </td></tr>\n<tr class=\"markdownTableRowOdd\">\n<td class=\"markdownTableBodyNone\">Send Broadcast Key  </td><td class=\"markdownTableBodyNone\"><code>0x10</code>  </td><td class=\"markdownTableBodyNone\">32 byte key   </td></tr>\n</table>\n<h1>OTA Update</h1>\n<p>MQTT Gateway example includes plain Arduino OTA mechanism. OTA is protected using network key selected during initial configuration.</p>\n<p>On nodes, OTA updates are transferred using the same mechanism. Firmware is sent over MQTT using a <a href=\"./EnigmaIoTUpdate/EnigmaIoTUpdate.py\">Python script</a>. Then gateway selects the appropriate node and send this binary data over ESP-NOW.</p>\n<p>As ESP-NOW restricts <b>maximum payload to 250 bytes per message</b> firmware is splitted in chunks. Every chunk is <b>212 bytes</b> long, so that it fits together with message headers and is multiple of 4. This splitting work is done by <code><a class=\"el\" href=\"EnigmaIoTUpdate_8py.html\">EnigmaIoTUpdate.py</a></code> script.</p>\n<h2>Using <a class=\"el\" href=\"EnigmaIoTUpdate_8py.html\">EnigmaIoTUpdate.py</a></h2>\n<p>A requirement is to have installed <a href=\"https://www.python.org/download/releases/3.0/\">Python3</a> in the computer used to do the update.</p>\n<p>In order to run the update, you need to install <a href=\"https://pypi.org/project/paho-mqtt/\"><code>paho-mqtt</code></a> library. To do that you can follow instructions <a href=\"https://pypi.org/project/paho-mqtt/#installation\">here</a>.</p>\n<div class=\"fragment\"><div class=\"line\">$python3 ./EnigmaIoTUpdate.py --help</div>\n<div class=\"line\"> </div>\n<div class=\"line\">Usage: EnigmaIoTUpdate.py [options]</div>\n<div class=\"line\"> </div>\n<div class=\"line\">Options:</div>\n<div class=\"line\">  -h, --help            show this help message and exit</div>\n<div class=\"line\">  -f FILENAME, --file=FILENAME</div>\n<div class=\"line\">                        File to program into device</div>\n<div class=\"line\">  -d ADDRESS, --daddress=ADDRESS</div>\n<div class=\"line\">                        Node address or name</div>\n<div class=\"line\">  -t BASETOPIC, --topic=BASETOPIC</div>\n<div class=\"line\">                        Base topic for MQTT messages</div>\n<div class=\"line\">  -u MQTTUSER, --user=MQTTUSER</div>\n<div class=\"line\">                        MQTT server username</div>\n<div class=\"line\">  -P MQTTPASS, --password=MQTTPASS</div>\n<div class=\"line\">                        MQTT server user password</div>\n<div class=\"line\">  -S MQTTSERVER, --server=MQTTSERVER</div>\n<div class=\"line\">                        MQTT server address or name</div>\n<div class=\"line\">  -p MQTTPORT, --port=MQTTPORT</div>\n<div class=\"line\">                        MQTT server port</div>\n<div class=\"line\">  -s, --secure          Use secure TLS in MQTT connection. Normally you should</div>\n<div class=\"line\">                          use port 8883</div>\n<div class=\"line\">  -D, --speed           Sets formware delivery speed [fast | medium | slow]. The fastest</div>\n<div class=\"line\">                          the biggest chance to get troubles during update. Fast option</div>\n<div class=\"line\">                          normally works but medium is more resilient</div>\n<div class=\"line\">  --unsecure            Use secure plain TCP in MQTT connection. Normally you</div>\n<div class=\"line\">                          should use port 1883</div>\n</div><!-- fragment --><p>An example of this command could be like this:</p>\n<div class=\"fragment\"><div class=\"line\">python3 ./EnigmaIoTUpdate.py \\</div>\n<div class=\"line\">             -f EnigmaIOTsensor.bin \\</div>\n<div class=\"line\">             -d 11:22:33:44:55:66 \\</div>\n<div class=\"line\">             -t enigmaiot \\</div>\n<div class=\"line\">             -u &quot;mymqttbrokeruser&quot; \\</div>\n<div class=\"line\">             -P &quot;mymqttbrokerpassword&quot; \\</div>\n<div class=\"line\">             -S mysecure.mqtt.server \\</div>\n<div class=\"line\">             -p 8883 \\</div>\n<div class=\"line\">             -D medium \\</div>\n<div class=\"line\">             -s</div>\n</div><!-- fragment --><p>Notice that using ESP-NOW, device address correspond to <b>MAC address</b> of your ESP8266 or ESP32 node.</p>\n<p>It is very important to configure user and password on you MQTT broker. Besides, if it is going to be accessed from the Internet you should activate TLS encryption and a certificate.</p>\n<h1>Home Assistant integration</h1>\n<p>JSON controller examples have integrated <a href=\"https://www.home-assistant.io/docs/mqtt/discovery/\">Home Assistant autoconfiguration</a>. So, it is possible to design a node that autoregister automatically as soon it is connected to EnigmaIOT network.</p>\n<p>You just need to add the specfic header files that correspond with your node profile. Currently these are implemented:</p>\n<ul>\n<li><a href=\"https://www.home-assistant.io/integrations/sensor.mqtt/\">Sensors</a></li>\n<li><a href=\"https://www.home-assistant.io/integrations/binary_sensor.mqtt/\">Binary sensors</a></li>\n<li><a href=\"https://www.home-assistant.io/integrations/cover.mqtt/\">Covers</a></li>\n<li><a href=\"https://www.home-assistant.io/integrations/switch.mqtt/\">Switches</a></li>\n<li><a href=\"https://www.home-assistant.io/integrations/device_trigger.mqtt/\">Device Triggers</a></li>\n</ul>\n<p>Additionaly you need to add specific configuration in separate methods like this from <code><a class=\"el\" href=\"SmartSwitchController_8cpp.html\">SmartSwitchController.cpp</a></code></p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">void CONTROLLER_CLASS_NAME::buildHASwitchDiscovery () {</div>\n<div class=\"line\">    // Select corresponding HAEntiny type</div>\n<div class=\"line\">    HASwitch* haEntity = new HASwitch ();</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    uint8_t* msgPackBuffer;</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    if (!haEntity) {</div>\n<div class=\"line\">        DEBUG_WARN (&quot;JSON object instance does not exist&quot;);</div>\n<div class=\"line\">        return;</div>\n<div class=\"line\">    }</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    // *******************************</div>\n<div class=\"line\">    // Add your characteristics here</div>\n<div class=\"line\">    // There is no need to futher modify this function</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    haEntity-&gt;setNameSufix (&quot;switch&quot;);</div>\n<div class=\"line\">    haEntity-&gt;setStateOn (1);</div>\n<div class=\"line\">    haEntity-&gt;setStateOff (0);</div>\n<div class=\"line\">    haEntity-&gt;setValueField (&quot;rly&quot;);</div>\n<div class=\"line\">    haEntity-&gt;setPayloadOff (&quot;{\\&quot;cmd\\&quot;:\\&quot;rly\\&quot;,\\&quot;rly\\&quot;:0}&quot;);</div>\n<div class=\"line\">    haEntity-&gt;setPayloadOn (&quot;{\\&quot;cmd\\&quot;:\\&quot;rly\\&quot;,\\&quot;rly\\&quot;:1}&quot;);</div>\n<div class=\"line\">    // *******************************</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    size_t bufferLen = haEntity-&gt;measureMessage ();</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    msgPackBuffer = (uint8_t*)malloc (bufferLen);</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    size_t len = haEntity-&gt;getAnounceMessage (bufferLen, msgPackBuffer);</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    DEBUG_INFO (&quot;Resulting MSG pack length: %d&quot;, len);</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    if (!sendHADiscovery (msgPackBuffer, len)) {</div>\n<div class=\"line\">        DEBUG_WARN (&quot;Error sending HA discovery message&quot;);</div>\n<div class=\"line\">    }</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    if (haEntity) {</div>\n<div class=\"line\">        delete (haEntity);</div>\n<div class=\"line\">    }</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    if (msgPackBuffer) {</div>\n<div class=\"line\">        free (msgPackBuffer);</div>\n<div class=\"line\">    }</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><p>Finally you need to register every auto discovery methods in <code>connectInform</code> method.</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">void CONTROLLER_CLASS_NAME::connectInform () {</div>\n<div class=\"line\"> </div>\n<div class=\"line\">#if SUPPORT_HA_DISCOVERY    </div>\n<div class=\"line\">    // Register every HAEntity discovery function here. As many as you need</div>\n<div class=\"line\">    addHACall (std::bind (&amp;CONTROLLER_CLASS_NAME::buildHASwitchDiscovery, this));</div>\n<div class=\"line\">    addHACall (std::bind (&amp;CONTROLLER_CLASS_NAME::buildHATriggerDiscovery, this));</div>\n<div class=\"line\">    addHACall (std::bind (&amp;CONTROLLER_CLASS_NAME::buildHALinkDiscovery, this));</div>\n<div class=\"line\">#endif</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    EnigmaIOTjsonController::connectInform ();</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><h1>External libraries</h1>\n<ul>\n<li>ESPAsyncTCP &ndash; <a href=\"https://github.com/me-no-dev/ESPAsyncTCP\">https://github.com/me-no-dev/ESPAsyncTCP</a> **(Required only for ESP8266)**</li>\n<li>AsyncTCP &ndash; <a href=\"https://github.com/me-no-dev/AsyncTCP\">https://github.com/me-no-dev/AsyncTCP</a> **(Required only for ESP32)**</li>\n<li>ESPAsyncWebServer &ndash; <a href=\"https://github.com/me-no-dev/ESPAsyncWebServer\">https://github.com/me-no-dev/ESPAsyncWebServer</a></li>\n<li>ESPAsyncWiFiManager &ndash; <a href=\"https://github.com/alanswx/ESPAsyncWiFiManager\">https://github.com/alanswx/ESPAsyncWiFiManager</a> version &gt; 0.22</li>\n<li>Arduino Crypto Library &ndash; <a href=\"https://github.com/gmag11/CryptoArduino\">https://github.com/gmag11/CryptoArduino</a> forked and formatted from <a href=\"https://github.com/rweather\">https://github.com/rweather</a></li>\n<li>PubSubClient &ndash; <a href=\"https://github.com/knolleary/pubsubclient\">https://github.com/knolleary/pubsubclient</a></li>\n<li>CayenneLPP &ndash; <a href=\"https://github.com/sabas1080/CayenneLPP\">https://github.com/sabas1080/CayenneLPP</a> version &gt; 1.0.2</li>\n<li>ArduinoJSON 6 &ndash; <a href=\"https://github.com/bblanchon/ArduinoJson\">https://github.com/bblanchon/ArduinoJson</a> version &gt; 6.0.0 </li>\n</ul>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_EnigmaIOT-Button-Controller_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT Button Controller</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT Button Controller </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This shows the simplest implementation of <a href=\"https://github.com/gmag11/EnigmaIOT/blob/dev/src/EnigmaIOTjsonController.h\">EnigmaIOTjsonController.h</a> using a button as data origin.</p>\n<p>A message is sent on button press and another on button release. <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> does not enter in deep sleep mode.</p>\n<p>Simple debounce is applied to avoid multiple pushes.</p>\n<p>Using <a href=\"https://github.com/gmag11/EnigmaIOT/tree/dev/examples/EnigmaIOTGatewayMQTT\">EnigmaIOT Gateway MQTT</a>, messages from button controller produce this output.</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/data  {&quot;button&quot;:&lt;button_pin&gt;,&quot;push&quot;:&lt; 1 or 0 &gt;}</div>\n</div><!-- fragment --><ul>\n<li>1 means button pushed</li>\n<li>0 means button released</li>\n</ul>\n<p>No configuration data is added here to keep example as simple as possible. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_EnigmaIOT-DashButton-Controller_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT Dash Button Controller</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT Dash Button Controller </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This shows the simplest implementation of <a href=\"https://github.com/gmag11/EnigmaIOT/blob/dev/src/EnigmaIOTjsonController.h\">EnigmaIOTjsonController.h</a> using deep sleep mode.</p>\n<p>A message is sent when node wakes from deep sleep, after triggering RESET button. Then it enters deep sleep mode again for an indefinite time. So reset is the only way to wake the node.</p>\n<p>This may be used as a Dash Button like device. Other uses may be a door sensor, a PIR movement detector, a laser barrier or any other sensor that may trigger reset when activated.</p>\n<p>Using <a href=\"https://github.com/gmag11/EnigmaIOT/tree/dev/examples/EnigmaIOTGatewayMQTT\">EnigmaIOT Gateway MQTT</a>, message from Dash Button controller produces this output.</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/data  {&quot;button&quot;:1}</div>\n</div><!-- fragment --><p>No configuration data is added here to keep example as simple as possible. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_EnigmaIOT-Json-Controller-Template_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT JSON Controller Template</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT JSON Controller Template </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This adds a layer to EnigmaIOT node using the concept of <b>controller</b>.</p>\n<p>A controller is a class that gets data and execute commands in peripherals of a node. Those peripherals may be sensors, buttons, relays, leds or any other hardware that you may use in a microcontroller hardware.</p>\n<p>EnigmaIOT library includes an interface definition in <a href=\"https://github.com/gmag11/EnigmaIOT/blob/dev/src/EnigmaIOTjsonController.h\">EnigmaIOTjsonController.h</a> that you need to implement in order to include EnigmaIOT communication to a simple project.</p>\n<p>This example may be used as a template to start to develop any kind of node. It allows sending and receiving data hiding the complexity of layers below.</p>\n<p>If your code needs configuration parameters that have to persist reboots, interface gives a simple way to add those parameters to EnigmaIOT node web configuration interface. Check other controller examples to see how this may be used.</p>\n<p>This is called JSON controller because all user payload is encoded using JSON objects, so this makes that Gateway transfers data transparently to/from the right peer. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_EnigmaIOT-Led-Controller_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT Led Controller</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT Led Controller </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This shows the simplest implementation of <a href=\"https://github.com/gmag11/EnigmaIOT/blob/dev/src/EnigmaIOTjsonController.h\">EnigmaIOTjsonController.h</a> that accepts commands.</p>\n<p>Led can be turned on by sending the right command.</p>\n<p>Using <a href=\"https://github.com/gmag11/EnigmaIOT/tree/dev/examples/EnigmaIOTGatewayMQTT\">EnigmaIOT Gateway MQTT</a>, this node get commands if MQTT messages use this format.</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/set/data  {&quot;cmd&quot;:&quot;led&quot;,&quot;led&quot;:&lt; 1 or 0 &gt;}</div>\n</div><!-- fragment --><ul>\n<li>1 means led on</li>\n<li>0 means led off</li>\n</ul>\n<p>You may interrogate node for led status in any moment by sending this message</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/get/data  {&quot;cmd&quot;:&quot;led&quot;}</div>\n</div><!-- fragment --><p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> will answer with a message using this format.</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/data  {&quot;cmd&quot;:&quot;led&quot;,&quot;led&quot;:&lt; 1 or 0 &gt;}</div>\n</div><!-- fragment --><p>No configuration data is added here to keep example as simple as possible. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_EnigmaIOT-Sensor-Controller_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT Sensor Controller</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT Sensor Controller </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>EnigmaIOT Sensor Controller example shows how to create a node that reads a value from a sensor, sends its value and sleeps for a certain time.</p>\n<p>Sensor used is a DS18B20 thermometer, connected to pin 4.</p>\n<p>Output messages using EnigmaIOT Gateway MQTT is like this:</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/data  {&quot;temp&quot;:&lt;temperature in celsius&gt;}</div>\n</div><!-- fragment --> </div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_EnigmaIOT-SmartSwitch-Controller_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT SmartSwitch Controller</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT SmartSwitch Controller </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This example shows how all features of <a href=\"https://github.com/gmag11/EnigmaIOT/blob/dev/src/EnigmaIOTjsonController.h\">EnigmaIOTjsonController.h</a> may be used to build a complete node.</p>\n<p>It controls a relay and gets messages by button presses. Button may be linked so that relay is toggled on every button press.</p>\n<p>Three configurable parameters are added:</p>\n<ul>\n<li>Relay pin</li>\n<li>Button pin</li>\n<li>Initial relay status after boot: it may be either ON, OFF or SAVED. If this is \"SAVED\" node stores last status and keeps after a reboot.</li>\n</ul>\n<p>Relay is controller with this command</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/set/data  {&quot;cmd&quot;:&quot;rly&quot;,&quot;rly&quot;:&lt; 1 or 0 &gt;}</div>\n</div><!-- fragment --><p>If button is pressed, this MQTT message is produced</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/data  {&quot;button&quot;:&lt; button_pin &gt;,&quot;push&quot;:1}</div>\n</div><!-- fragment --><p>To change button and relay link status you may use this message</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/set/data  {&quot;cmd&quot;:&quot;link&quot;,&quot;link&quot;:&lt; 1 or 0 &gt;}</div>\n</div><!-- fragment --><p><code>1</code> makes button and relay to be linked, <code>0</code> makes that button does not produce any immediate effect in relay.</p>\n<p>Initial relay state after boot may be configured with a MQTT message too.</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/set/data  {&quot;cmd&quot;:&quot;bstate&quot;,&quot;bstate&quot;:&lt; 0, 1 or 2 &gt;}</div>\n</div><!-- fragment --><p><code>0</code> and <code>1</code> mean that LED will start in OFF or ON state respectively, and <code>2</code> means that status will be saved.</p>\n<p>You may ask about these configurations using</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_name&gt;/&lt;node_name or node_address&gt;/det/data  {&quot;cmd&quot;:&lt;command&gt;}</div>\n</div><!-- fragment --><p>Command field may be <code>rly</code>, <code>link</code> or <code>bstate</code>. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_EnigmaIOTGatewayDummy_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT Gateway Dummy</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT Gateway Dummy </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This example represent the basis to develop an EnigmaIOT gateway. You may build a gateway that register measurements from node sensors to an SD or uses LoRaWAN as output instead MQTT.</p>\n<p>To do that you only need to implement the class defined in <a href=\"https://github.com/gmag11/EnigmaIOT/blob/master/src/GwOutput_generic.h\">GwOutput_generic.h</a></p>\n<p>This only implements the EnigmaIOT side using ESP-NOW. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_EnigmaIOTGatewayMQTT_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT Gateway MQTT</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT Gateway MQTT </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This example implements a complete EnigmaIOT gateway that sends data and allow interacting using MQTT protocol. It uses TLS connection to broker, so you can use to connect a broker in a remote place on Internet.</p>\n<p>You may use in your projects as it is, without any modification.</p>\n<p>It uses <a href=\"https://github.com/gmag11/EnigmaIOT/blob/master/src/GwOutput_generic.h\"><code>GwOutput_generic.h</code></a> to implement MQTT communication as a module.</p>\n<p><a href=\"https://github.com/gmag11/EnigmaIOT/blob/master/examples/EnigmaIOTGatewayMQTT/dstrootca.h\"><code>dstrootca.h</code></a> includes <b>DST Root CA X3</b> certificate, valid until 2021-09-30 14:01­:15 UTC. It is the root CA for Let's Encrypt certificates, so if you use a different one or expiry date has passed make sure that you update the file with the right certificate.</p>\n<p>If you have a MQTT broker without TLS activated you have to disable <a href=\"https://github.com/gmag11/EnigmaIOT/blob/master/examples/EnigmaIOTGatewayMQTT/GwOutput_mqtt.h#L21\"><code>#include \"dstrootca.h\"</code></a> on <a href=\"https://github.com/gmag11/EnigmaIOT/blob/master/examples/EnigmaIOTGatewayMQTT/GwOutput_mqtt.h\"><code>GwOutput_mqtt.h</code></a> <br  />\n</p>\n<h1>Data Format</h1>\n<p>Gateway does not interpret neither store any node data. It is completely transparent for payload.</p>\n<h2>Output data</h2>\n<p>Data from EnigmaIOT nodes is sent through MQTT using this topic format</p>\n<div class=\"fragment\"><div class=\"line\">&lt;Network_Name&gt;/&lt;Node_address or Node_name&gt;/data</div>\n</div><!-- fragment --><p>Payload will have JSON format if node data is encoded as CayenneLPP or MsgPack. In any other case payload will be sent without any transformation.</p>\n<h2>Input Data</h2>\n<p>Nodes may accept user commands to ask for information or adjust settings. There are only two topics that may be used</p>\n<p><code>&lt;Network_Name&gt;/&lt;Node_address or Node_name&gt;/get/data</code> to ask node for information</p>\n<p><code>&lt;Network_Name&gt;/&lt;Node_address or Node_name&gt;/set/data</code> to configure settings</p>\n<p>If payload is given as JSON, EnigmaIOT Gateway MQTT encodes it as MsgPack. So node will get the same JSON object.</p>\n<p>If payload is not a JSON object it will be sent transparently.</p>\n<h1>Configuration</h1>\n<p>Gateway is configured during first boot using a web portal. If not configured or it is not able to connect to WiFi router, Gateway starts an AP. Use your smartphone to connect to EnigmaIOTGateway network and access to <a href=\"http://192.168.4.1\">http://192.168.4.1</a>.</p>\n<p>You need to provide your WiFi name and password, a name and password for your EnigmaIOT network. It asks for a WiFi channel. You do not need to configure this as it will use your WiFi network channel.</p>\n<p>In addition you need to enter MQTT broker address and port and username and password. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_enigmaiot_led_flasher_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT LED Flasher example</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT LED Flasher example </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This example implements a node that illustrate time synchronization on nodes that do not sleep.</p>\n<p>This feature is enabled by adding this line during Arduino <code>setup ()</code></p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">EnigmaIOTNode.enableClockSync ();</div>\n</div><!-- fragment --><p>As EnigmaIOT <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> example it sends mocked data.</p>\n<p>Time synchronization is demonstrated by making board led flash synchronously on all nodes connected to same EnigmaIOT gateway using this code.</p>\n<p>User code may make use of <code>EnigmaIOTNode.clock ()</code> to get common clock. It is used in the same way as normal <code>micros()</code> call.</p>\n<p>There are additional methods used to interrogate time synchronization status:</p>\n<ul>\n<li><code>EnigmaIOTNode.hasClockSync()</code> let you know if node has got a valid sync from gateway.</li>\n<li><code>EnigmaIOTNode.unixtime()</code> gives the clock un real world time (if Gateway has got NTP sync) </li>\n</ul>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_enigmaiot_node_msgpack_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT MsgPack example</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT MsgPack example </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This is the equivalent of EnigmaIOT node example but shows how to use JSON and MsgPack to encode data before transmission. It sends a message with mocked values, in addition to input voltage value on ESP8266 and ESP32, and sleeps during 10 seconds.</p>\n<p>If you use an ESP8266 you have to connect GPIO16 and RST pins or it will never wake from sleep. You can reset your ESP8266 board manually to force a wake.</p>\n<p>In order to adapt it to your needs you only have to modify this code to readout sensor values.</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">// Put here your code to read sensor and compose buffer</div>\n<div class=\"line\">const size_t capacity = JSON_OBJECT_SIZE (5); // Adapt capacity to your needs. See https://arduinojson.org/v6/assistant/ for guidance</div>\n<div class=\"line\">DynamicJsonDocument json (capacity);</div>\n<div class=\"line\"> </div>\n<div class=\"line\">json[&quot;V&quot;] = (float)(ESP.getVcc ()) / 1000;</div>\n<div class=\"line\">json[&quot;tem&quot;] = 203;</div>\n<div class=\"line\">json[&quot;din&quot;] = 123;</div>\n<div class=\"line\">json[&quot;pres&quot;] = 1007;</div>\n<div class=\"line\">json[&quot;curr&quot;] = 2.43;</div>\n<div class=\"line\"> </div>\n<div class=\"line\">int len = MAX_DATA_PAYLOAD_SIZE;</div>\n<div class=\"line\">uint8_t buffer[MAX_DATA_PAYLOAD_SIZE];</div>\n<div class=\"line\">len = serializeMsgPack (json, (char*)buffer, len);</div>\n<div class=\"line\">// End of user code</div>\n<div class=\"line\"> </div>\n<div class=\"line\">// Send buffer data</div>\n<div class=\"line\">EnigmaIOTNode.sendData (buffer, len, MSG_PACK);</div>\n</div><!-- fragment --><p>When receiving this message, MQTT Gateway produces this output:</p>\n<div class=\"fragment\"><div class=\"line\">&lt;network_name&gt;/&lt;node_name&gt;/data </div>\n<div class=\"line\"> </div>\n<div class=\"line\">{ &quot;V&quot;:3.003, &quot;tem&quot;:203, &quot;din&quot;:123, &quot;pres&quot;:1007, &quot;curr&quot;:2.43 }</div>\n</div><!-- fragment --><p>This nodes allows receiving downlink messages sending MQTT messages to gateway as</p>\n<div class=\"fragment\"><div class=\"line\">&lt;network_name&gt;/&lt;node_name&gt;/set/data &lt;user data&gt;</div>\n</div><!-- fragment --><p>If user data is given in JSON format, EnigmaIOT gateway will convert it to MsgPack format automatically.</p>\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> will dump its content on serial port. </p>\n</div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_enigmaiot_node_nonsleepy_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT Node example</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> example </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This is the equivalent to EnigmaIOT node but this example does not put microcontroller in deep sleep state. It only sends a message with mocked values every 10 seconds.</p>\n<p>As it is a non sleepy node it has clock synchronization available. This shows how to manage unixtime information. It dumps local time just before sending data.</p>\n<p>In order to adapt it to your needs you only have to modify this code to readout sensor values.</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">void showTime () {</div>\n<div class=\"line\">    const char* TZINFO = &quot;CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00&quot;; // Local TZ in Spain. Check https://remotemonitoringsystems.ca/time-zone-abbreviations.php</div>\n<div class=\"line\">    </div>\n<div class=\"line\">    tm timeinfo;</div>\n<div class=\"line\">    static time_t displayTime;</div>\n<div class=\"line\">    </div>\n<div class=\"line\">    if (EnigmaIOTNode.hasClockSync()) {</div>\n<div class=\"line\">        setenv (&quot;TZ&quot;, TZINFO, 1);</div>\n<div class=\"line\">        displayTime = millis ();</div>\n<div class=\"line\">        time_t local_time_ms = EnigmaIOTNode.clock ();</div>\n<div class=\"line\">        time_t local_time = EnigmaIOTNode.unixtime ();</div>\n<div class=\"line\">        localtime_r (&amp;local_time, &amp;timeinfo);</div>\n<div class=\"line\">        Serial.printf (&quot;%02d/%02d/%04d %02d:%02d:%02d\\n&quot;,</div>\n<div class=\"line\">                       timeinfo.tm_mday,</div>\n<div class=\"line\">                       timeinfo.tm_mon + 1,</div>\n<div class=\"line\">                       timeinfo.tm_year + 1900,</div>\n<div class=\"line\">                       timeinfo.tm_hour,</div>\n<div class=\"line\">                       timeinfo.tm_min,</div>\n<div class=\"line\">                       timeinfo.tm_sec);</div>\n<div class=\"line\">    } else {</div>\n<div class=\"line\">        Serial.printf (&quot;Time not sync&#39;ed\\n&quot;);</div>\n<div class=\"line\">    }</div>\n<div class=\"line\">}</div>\n<div class=\"line\"> </div>\n<div class=\"line\">loop () {</div>\n<div class=\"line\">    EnigmaIOTNode.handle (); // Needed to keep EnigmaIOT connection updated</div>\n<div class=\"line\">    </div>\n<div class=\"line\">    CayenneLPP msg (20);</div>\n<div class=\"line\"> </div>\n<div class=\"line\">    static time_t lastSensorData;</div>\n<div class=\"line\">    static const time_t SENSOR_PERIOD = 10000;</div>\n<div class=\"line\">    if (millis () - lastSensorData &gt; SENSOR_PERIOD) {</div>\n<div class=\"line\">        lastSensorData = millis ();</div>\n<div class=\"line\">        showTime ();</div>\n<div class=\"line\">        // Read sensor data</div>\n<div class=\"line\">        msg.addAnalogInput (0, (float)(ESP.getVcc ()) / 1000);</div>\n<div class=\"line\">        msg.addTemperature (1, 20.34);</div>\n<div class=\"line\"> </div>\n<div class=\"line\">        EnigmaIOTNode.sendData (msg.getBuffer (), msg.getSize ());</div>\n<div class=\"line\">    }</div>\n<div class=\"line\">}</div>\n</div><!-- fragment --><p>This is the output in serial port</p>\n<div class=\"fragment\"><div class=\"line\">31/07/2020 13:31:14</div>\n<div class=\"line\">Vcc: 2.994000</div>\n<div class=\"line\">Trying to send: 00 02 01 2B 01 67 00 CB </div>\n<div class=\"line\">---- Data sent</div>\n<div class=\"line\">31/07/2020 13:31:24</div>\n<div class=\"line\">Vcc: 2.994000</div>\n<div class=\"line\">Trying to send: 00 02 01 2B 01 67 00 CB </div>\n<div class=\"line\">---- Data sent</div>\n<div class=\"line\">31/07/2020 13:31:34</div>\n<div class=\"line\">Vcc: 2.994000</div>\n<div class=\"line\">Trying to send: 00 02 01 2B 01 67 00 CB </div>\n<div class=\"line\">---- Data sent</div>\n</div><!-- fragment --> </div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/md_examples_enigmaiot_node_readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIOT Node example</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"PageDoc\"><div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIOT <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> example </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><p>This is a basic and straightforward example of an EnigmaIOT node. It only sends a message with mocked values, in addition to input voltage value on ESP8266 and ESP32, and sleeps during 10 seconds.</p>\n<p>If you use an ESP8266 you have to connect GPIO16 and RST pins or it will never wake from sleep. You can reset your ESP8266 board manually to force a wake.</p>\n<p>It uses CayenneLPP as payload encoding. CayenneLPP is a pretty efficient encoding format. Other examples uses MessagePack that is less efficient but much more versatile. So I recommend using the latter unless you have many values to send that do not fin in the maximum 214 bytes of a single EnigmaIOT message.</p>\n<p>In order to adapt it to your needs you only have to modify this code to readout sensor values.</p>\n<div class=\"fragment\"><div class=\"line\"> {c++}</div>\n<div class=\"line\">// User code</div>\n<div class=\"line\"> </div>\n<div class=\"line\">CayenneLPP msg (MAX_DATA_PAYLOAD_SIZE);</div>\n<div class=\"line\"> </div>\n<div class=\"line\">msg.addAnalogInput (0, (float)(ESP.getVcc ()) / 1000);</div>\n<div class=\"line\">msg.addTemperature (1, 20.34);</div>\n<div class=\"line\">msg.addDigitalInput (2, 123);</div>\n<div class=\"line\">msg.addBarometricPressure (3, 1007.25);</div>\n<div class=\"line\">msg.addCurrent (4, 2.43);</div>\n<div class=\"line\"> </div>\n<div class=\"line\">// End of user code</div>\n<div class=\"line\"> </div>\n<div class=\"line\">// Send buffer data</div>\n<div class=\"line\">EnigmaIOTNode.sendData (msg.getBuffer (), msg.getSize ());</div>\n</div><!-- fragment --><p>When receiving this message, MQTT Gateway produces this output:</p>\n<div class=\"fragment\"><div class=\"line\">&lt;network_name&gt;/&lt;node_name&gt;/data </div>\n<div class=\"line\"> </div>\n<div class=\"line\">[{&quot;channel&quot;:0, &quot;type&quot;:2,   &quot;name&quot;:&quot;analog_input&quot;,  &quot;value&quot;:3.28},</div>\n<div class=\"line\"> {&quot;channel&quot;:1, &quot;type&quot;:103, &quot;name&quot;:&quot;temperature&quot;,   &quot;value&quot;:20.3},</div>\n<div class=\"line\"> {&quot;channel&quot;:2, &quot;type&quot;:0,   &quot;name&quot;:&quot;digital_input&quot;, &quot;value&quot;:123},</div>\n<div class=\"line\"> {&quot;channel&quot;:3, &quot;type&quot;:115, &quot;name&quot;:&quot;pressure&quot;,      &quot;value&quot;:1007.2},</div>\n<div class=\"line\"> {&quot;channel&quot;:4, &quot;type&quot;:117, &quot;name&quot;:&quot;current&quot;,       &quot;value&quot;:2.43}]</div>\n</div><!-- fragment --> </div></div><!-- contents -->\n</div><!-- PageDoc -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/menu.js",
    "content": "/*\n @licstart  The following is the entire license notice for the JavaScript code in this file.\n\n The MIT License (MIT)\n\n Copyright (C) 1997-2020 by Dimitri van Heesch\n\n Permission is hereby granted, free of charge, to any person obtaining a copy of this software\n and associated documentation files (the \"Software\"), to deal in the Software without restriction,\n including without limitation the rights to use, copy, modify, merge, publish, distribute,\n sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all copies or\n substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n @licend  The above is the entire license notice for the JavaScript code in this file\n */\nfunction initMenu(relPath,searchEnabled,serverSide,searchPage,search) {\n  function makeTree(data,relPath) {\n    var result='';\n    if ('children' in data) {\n      result+='<ul>';\n      for (var i in data.children) {\n        result+='<li><a href=\"'+relPath+data.children[i].url+'\">'+\n                                data.children[i].text+'</a>'+\n                                makeTree(data.children[i],relPath)+'</li>';\n      }\n      result+='</ul>';\n    }\n    return result;\n  }\n\n  $('#main-nav').append(makeTree(menudata,relPath));\n  $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');\n  if (searchEnabled) {\n    if (serverSide) {\n      $('#main-menu').append('<li style=\"float:right\"><div id=\"MSearchBox\" class=\"MSearchBoxInactive\"><div class=\"left\"><form id=\"FSearchBox\" action=\"'+relPath+searchPage+'\" method=\"get\"><img id=\"MSearchSelect\" src=\"'+relPath+'search/mag.svg\" alt=\"\"/><input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"'+search+'\" size=\"20\" accesskey=\"S\" onfocus=\"searchBox.OnSearchFieldFocus(true)\" onblur=\"searchBox.OnSearchFieldFocus(false)\"></form></div><div class=\"right\"></div></div></li>');\n    } else {\n      $('#main-menu').append('<li style=\"float:right\"><div id=\"MSearchBox\" class=\"MSearchBoxInactive\"><span class=\"left\"><img id=\"MSearchSelect\" src=\"'+relPath+'search/mag_sel.svg\" onmouseover=\"return searchBox.OnSearchSelectShow()\" onmouseout=\"return searchBox.OnSearchSelectHide()\" alt=\"\"/><input type=\"text\" id=\"MSearchField\" value=\"'+search+'\" accesskey=\"S\" onfocus=\"searchBox.OnSearchFieldFocus(true)\" onblur=\"searchBox.OnSearchFieldFocus(false)\" onkeyup=\"searchBox.OnSearchFieldChange(event)\"/></span><span class=\"right\"><a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"'+relPath+'search/close.svg\" alt=\"\"/></a></span></div></li>');\n    }\n  }\n  $('#main-menu').smartmenus();\n}\n/* @license-end */\n"
  },
  {
    "path": "docs/html/menudata.js",
    "content": "/*\n @licstart  The following is the entire license notice for the JavaScript code in this file.\n\n The MIT License (MIT)\n\n Copyright (C) 1997-2020 by Dimitri van Heesch\n\n Permission is hereby granted, free of charge, to any person obtaining a copy of this software\n and associated documentation files (the \"Software\"), to deal in the Software without restriction,\n including without limitation the rights to use, copy, modify, merge, publish, distribute,\n sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all copies or\n substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n @licend  The above is the entire license notice for the JavaScript code in this file\n*/\nvar menudata={children:[\n{text:\"Main Page\",url:\"index.html\"},\n{text:\"Related Pages\",url:\"pages.html\"},\n{text:\"Namespaces\",url:\"namespaces.html\",children:[\n{text:\"Namespace List\",url:\"namespaces.html\"},\n{text:\"Namespace Members\",url:\"namespacemembers.html\",children:[\n{text:\"All\",url:\"namespacemembers.html\"},\n{text:\"Functions\",url:\"namespacemembers_func.html\"},\n{text:\"Variables\",url:\"namespacemembers_vars.html\"}]}]},\n{text:\"Classes\",url:\"annotated.html\",children:[\n{text:\"Class List\",url:\"annotated.html\"},\n{text:\"Class Index\",url:\"classes.html\"},\n{text:\"Class Hierarchy\",url:\"hierarchy.html\"},\n{text:\"Class Members\",url:\"functions.html\",children:[\n{text:\"All\",url:\"functions.html\",children:[\n{text:\"_\",url:\"functions.html#index__5F\"},\n{text:\"a\",url:\"functions_a.html#index_a\"},\n{text:\"b\",url:\"functions_b.html#index_b\"},\n{text:\"c\",url:\"functions_c.html#index_c\"},\n{text:\"d\",url:\"functions_d.html#index_d\"},\n{text:\"e\",url:\"functions_e.html#index_e\"},\n{text:\"f\",url:\"functions_f.html#index_f\"},\n{text:\"g\",url:\"functions_g.html#index_g\"},\n{text:\"h\",url:\"functions_h.html#index_h\"},\n{text:\"i\",url:\"functions_i.html#index_i\"},\n{text:\"k\",url:\"functions_k.html#index_k\"},\n{text:\"l\",url:\"functions_l.html#index_l\"},\n{text:\"m\",url:\"functions_m.html#index_m\"},\n{text:\"n\",url:\"functions_n.html#index_n\"},\n{text:\"o\",url:\"functions_o.html#index_o\"},\n{text:\"p\",url:\"functions_p.html#index_p\"},\n{text:\"q\",url:\"functions_q.html#index_q\"},\n{text:\"r\",url:\"functions_r.html#index_r\"},\n{text:\"s\",url:\"functions_s.html#index_s\"},\n{text:\"t\",url:\"functions_t.html#index_t\"},\n{text:\"u\",url:\"functions_u.html#index_u\"},\n{text:\"w\",url:\"functions_w.html#index_w\"},\n{text:\"~\",url:\"functions_~.html#index__7E\"}]},\n{text:\"Functions\",url:\"functions_func.html\",children:[\n{text:\"a\",url:\"functions_func.html#index_a\"},\n{text:\"b\",url:\"functions_func_b.html#index_b\"},\n{text:\"c\",url:\"functions_func_c.html#index_c\"},\n{text:\"d\",url:\"functions_func_d.html#index_d\"},\n{text:\"e\",url:\"functions_func_e.html#index_e\"},\n{text:\"f\",url:\"functions_func_f.html#index_f\"},\n{text:\"g\",url:\"functions_func_g.html#index_g\"},\n{text:\"h\",url:\"functions_func_h.html#index_h\"},\n{text:\"i\",url:\"functions_func_i.html#index_i\"},\n{text:\"l\",url:\"functions_func_l.html#index_l\"},\n{text:\"m\",url:\"functions_func_m.html#index_m\"},\n{text:\"n\",url:\"functions_func_n.html#index_n\"},\n{text:\"o\",url:\"functions_func_o.html#index_o\"},\n{text:\"p\",url:\"functions_func_p.html#index_p\"},\n{text:\"q\",url:\"functions_func_q.html#index_q\"},\n{text:\"r\",url:\"functions_func_r.html#index_r\"},\n{text:\"s\",url:\"functions_func_s.html#index_s\"},\n{text:\"t\",url:\"functions_func_t.html#index_t\"},\n{text:\"u\",url:\"functions_func_u.html#index_u\"},\n{text:\"~\",url:\"functions_func_~.html#index__7E\"}]},\n{text:\"Variables\",url:\"functions_vars.html\",children:[\n{text:\"_\",url:\"functions_vars.html#index__5F\"},\n{text:\"a\",url:\"functions_vars_a.html#index_a\"},\n{text:\"b\",url:\"functions_vars_b.html#index_b\"},\n{text:\"c\",url:\"functions_vars_c.html#index_c\"},\n{text:\"d\",url:\"functions_vars_d.html#index_d\"},\n{text:\"e\",url:\"functions_vars_e.html#index_e\"},\n{text:\"f\",url:\"functions_vars_f.html#index_f\"},\n{text:\"g\",url:\"functions_vars_g.html#index_g\"},\n{text:\"i\",url:\"functions_vars_i.html#index_i\"},\n{text:\"k\",url:\"functions_vars_k.html#index_k\"},\n{text:\"l\",url:\"functions_vars_l.html#index_l\"},\n{text:\"m\",url:\"functions_vars_m.html#index_m\"},\n{text:\"n\",url:\"functions_vars_n.html#index_n\"},\n{text:\"o\",url:\"functions_vars_o.html#index_o\"},\n{text:\"p\",url:\"functions_vars_p.html#index_p\"},\n{text:\"q\",url:\"functions_vars_q.html#index_q\"},\n{text:\"r\",url:\"functions_vars_r.html#index_r\"},\n{text:\"s\",url:\"functions_vars_s.html#index_s\"},\n{text:\"t\",url:\"functions_vars_t.html#index_t\"},\n{text:\"u\",url:\"functions_vars_u.html#index_u\"},\n{text:\"w\",url:\"functions_vars_w.html#index_w\"}]},\n{text:\"Related Functions\",url:\"functions_rela.html\"}]}]},\n{text:\"Files\",url:\"files.html\",children:[\n{text:\"File List\",url:\"files.html\"},\n{text:\"File Members\",url:\"globals.html\",children:[\n{text:\"All\",url:\"globals.html\",children:[\n{text:\"_\",url:\"globals.html#index__5F\"},\n{text:\"a\",url:\"globals_a.html#index_a\"},\n{text:\"b\",url:\"globals_b.html#index_b\"},\n{text:\"c\",url:\"globals_c.html#index_c\"},\n{text:\"d\",url:\"globals_d.html#index_d\"},\n{text:\"e\",url:\"globals_e.html#index_e\"},\n{text:\"f\",url:\"globals_f.html#index_f\"},\n{text:\"g\",url:\"globals_g.html#index_g\"},\n{text:\"h\",url:\"globals_h.html#index_h\"},\n{text:\"i\",url:\"globals_i.html#index_i\"},\n{text:\"k\",url:\"globals_k.html#index_k\"},\n{text:\"l\",url:\"globals_l.html#index_l\"},\n{text:\"m\",url:\"globals_m.html#index_m\"},\n{text:\"n\",url:\"globals_n.html#index_n\"},\n{text:\"o\",url:\"globals_o.html#index_o\"},\n{text:\"p\",url:\"globals_p.html#index_p\"},\n{text:\"q\",url:\"globals_q.html#index_q\"},\n{text:\"r\",url:\"globals_r.html#index_r\"},\n{text:\"s\",url:\"globals_s.html#index_s\"},\n{text:\"t\",url:\"globals_t.html#index_t\"},\n{text:\"u\",url:\"globals_u.html#index_u\"},\n{text:\"v\",url:\"globals_v.html#index_v\"},\n{text:\"w\",url:\"globals_w.html#index_w\"}]},\n{text:\"Functions\",url:\"globals_func.html\",children:[\n{text:\"a\",url:\"globals_func.html#index_a\"},\n{text:\"b\",url:\"globals_func.html#index_b\"},\n{text:\"c\",url:\"globals_func.html#index_c\"},\n{text:\"d\",url:\"globals_func.html#index_d\"},\n{text:\"f\",url:\"globals_func.html#index_f\"},\n{text:\"g\",url:\"globals_func.html#index_g\"},\n{text:\"i\",url:\"globals_func.html#index_i\"},\n{text:\"l\",url:\"globals_func.html#index_l\"},\n{text:\"m\",url:\"globals_func.html#index_m\"},\n{text:\"n\",url:\"globals_func.html#index_n\"},\n{text:\"o\",url:\"globals_func.html#index_o\"},\n{text:\"p\",url:\"globals_func.html#index_p\"},\n{text:\"s\",url:\"globals_func.html#index_s\"},\n{text:\"w\",url:\"globals_func.html#index_w\"}]},\n{text:\"Variables\",url:\"globals_vars.html\",children:[\n{text:\"_\",url:\"globals_vars.html#index__5F\"},\n{text:\"a\",url:\"globals_vars.html#index_a\"},\n{text:\"b\",url:\"globals_vars.html#index_b\"},\n{text:\"c\",url:\"globals_vars.html#index_c\"},\n{text:\"d\",url:\"globals_vars.html#index_d\"},\n{text:\"e\",url:\"globals_vars.html#index_e\"},\n{text:\"f\",url:\"globals_vars.html#index_f\"},\n{text:\"g\",url:\"globals_vars.html#index_g\"},\n{text:\"h\",url:\"globals_vars.html#index_h\"},\n{text:\"i\",url:\"globals_vars.html#index_i\"},\n{text:\"k\",url:\"globals_vars.html#index_k\"},\n{text:\"l\",url:\"globals_vars.html#index_l\"},\n{text:\"m\",url:\"globals_vars.html#index_m\"},\n{text:\"n\",url:\"globals_vars.html#index_n\"},\n{text:\"o\",url:\"globals_vars.html#index_o\"},\n{text:\"p\",url:\"globals_vars.html#index_p\"},\n{text:\"q\",url:\"globals_vars.html#index_q\"},\n{text:\"r\",url:\"globals_vars.html#index_r\"},\n{text:\"s\",url:\"globals_vars.html#index_s\"},\n{text:\"t\",url:\"globals_vars.html#index_t\"},\n{text:\"w\",url:\"globals_vars.html#index_w\"}]},\n{text:\"Typedefs\",url:\"globals_type.html\"},\n{text:\"Enumerations\",url:\"globals_enum.html\"},\n{text:\"Enumerator\",url:\"globals_eval.html\",children:[\n{text:\"a\",url:\"globals_eval.html#index_a\"},\n{text:\"b\",url:\"globals_eval_b.html#index_b\"},\n{text:\"c\",url:\"globals_eval_c.html#index_c\"},\n{text:\"d\",url:\"globals_eval_d.html#index_d\"},\n{text:\"e\",url:\"globals_eval_e.html#index_e\"},\n{text:\"f\",url:\"globals_eval_f.html#index_f\"},\n{text:\"h\",url:\"globals_eval_h.html#index_h\"},\n{text:\"i\",url:\"globals_eval_i.html#index_i\"},\n{text:\"k\",url:\"globals_eval_k.html#index_k\"},\n{text:\"l\",url:\"globals_eval_l.html#index_l\"},\n{text:\"m\",url:\"globals_eval_m.html#index_m\"},\n{text:\"n\",url:\"globals_eval_n.html#index_n\"},\n{text:\"o\",url:\"globals_eval_o.html#index_o\"},\n{text:\"p\",url:\"globals_eval_p.html#index_p\"},\n{text:\"r\",url:\"globals_eval_r.html#index_r\"},\n{text:\"s\",url:\"globals_eval_s.html#index_s\"},\n{text:\"t\",url:\"globals_eval_t.html#index_t\"},\n{text:\"u\",url:\"globals_eval_u.html#index_u\"},\n{text:\"v\",url:\"globals_eval_v.html#index_v\"},\n{text:\"w\",url:\"globals_eval_w.html#index_w\"}]},\n{text:\"Macros\",url:\"globals_defs.html\",children:[\n{text:\"_\",url:\"globals_defs.html#index__5F\"},\n{text:\"b\",url:\"globals_defs.html#index_b\"},\n{text:\"c\",url:\"globals_defs.html#index_c\"},\n{text:\"d\",url:\"globals_defs.html#index_d\"},\n{text:\"e\",url:\"globals_defs.html#index_e\"},\n{text:\"g\",url:\"globals_defs.html#index_g\"},\n{text:\"h\",url:\"globals_defs.html#index_h\"},\n{text:\"i\",url:\"globals_defs.html#index_i\"},\n{text:\"l\",url:\"globals_defs.html#index_l\"},\n{text:\"m\",url:\"globals_defs.html#index_m\"},\n{text:\"n\",url:\"globals_defs.html#index_n\"},\n{text:\"o\",url:\"globals_defs.html#index_o\"},\n{text:\"r\",url:\"globals_defs.html#index_r\"},\n{text:\"s\",url:\"globals_defs.html#index_s\"},\n{text:\"t\",url:\"globals_defs.html#index_t\"},\n{text:\"u\",url:\"globals_defs.html#index_u\"},\n{text:\"v\",url:\"globals_defs.html#index_v\"},\n{text:\"w\",url:\"globals_defs.html#index_w\"}]}]}]}]}\n"
  },
  {
    "path": "docs/html/namespaceEnigmaIoTUpdate.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: EnigmaIoTUpdate Namespace Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">EnigmaIoTUpdate Namespace Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a9e979dfe91c5de2dfa6660efcf30bb9a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">def&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a9e979dfe91c5de2dfa6660efcf30bb9a\">on_connect</a> (client, userdata, flags, rc)</td></tr>\n<tr class=\"separator:a9e979dfe91c5de2dfa6660efcf30bb9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a162ca4b2a6c3e338d7e86162b09eb13a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">def&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a162ca4b2a6c3e338d7e86162b09eb13a\">on_message</a> (client, userdata, msg)</td></tr>\n<tr class=\"separator:a162ca4b2a6c3e338d7e86162b09eb13a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0625a265d8105bb0e6aa1503f88e21cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">def&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a0625a265d8105bb0e6aa1503f88e21cd\">main</a> ()</td></tr>\n<tr class=\"separator:a0625a265d8105bb0e6aa1503f88e21cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:a950133eea5c2ac61becd91f089b8d610\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a950133eea5c2ac61becd91f089b8d610\">args</a> = None</td></tr>\n<tr class=\"separator:a950133eea5c2ac61becd91f089b8d610\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad7b06ea4bc715581c290476212ae10c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">sleepyNode</a> = True</td></tr>\n<tr class=\"separator:ad7b06ea4bc715581c290476212ae10c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:acd57a56c8115a7f72f00b6efc95eeea5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#acd57a56c8115a7f72f00b6efc95eeea5\">resultTopic</a> = &quot;/result/#&quot;</td></tr>\n<tr class=\"separator:acd57a56c8115a7f72f00b6efc95eeea5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa26175595b8bee3fa7d7df8300e036d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#aa26175595b8bee3fa7d7df8300e036d0\">sleepSetTopic</a> = &quot;/set/sleeptime&quot;</td></tr>\n<tr class=\"separator:aa26175595b8bee3fa7d7df8300e036d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a880799b2afdcda342a0c9413cc31c4be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a880799b2afdcda342a0c9413cc31c4be\">sleepResultTopic</a> = &quot;/result/sleeptime&quot;</td></tr>\n<tr class=\"separator:a880799b2afdcda342a0c9413cc31c4be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aefdb455c166193127480d7b5afe88a66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#aefdb455c166193127480d7b5afe88a66\">otaSetTopic</a> = &quot;/set/ota&quot;</td></tr>\n<tr class=\"separator:aefdb455c166193127480d7b5afe88a66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af04fd96058043d8861cd38175cb99e6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#af04fd96058043d8861cd38175cb99e6c\">otaResultTopic</a> = &quot;/result/ota&quot;</td></tr>\n<tr class=\"separator:af04fd96058043d8861cd38175cb99e6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ade24b0154bfadccc5f69ee560a33de8b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ade24b0154bfadccc5f69ee560a33de8b\">otaOutOfSequenceError</a> = &quot;OTA out of sequence error&quot;</td></tr>\n<tr class=\"separator:ade24b0154bfadccc5f69ee560a33de8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af461562efece05d0467c0e17edd2e58f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">string&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#af461562efece05d0467c0e17edd2e58f\">otaOK</a> = &quot;OTA finished OK&quot;</td></tr>\n<tr class=\"separator:af461562efece05d0467c0e17edd2e58f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1efdbd8359ee1708af1bcf3be3eff850\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a1efdbd8359ee1708af1bcf3be3eff850\">otaFinished</a> = False</td></tr>\n<tr class=\"separator:a1efdbd8359ee1708af1bcf3be3eff850\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5069992755f7ebc78fa8218e65550c64\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a5069992755f7ebc78fa8218e65550c64\">idx</a> = 0</td></tr>\n<tr class=\"separator:a5069992755f7ebc78fa8218e65550c64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad815631b097bdf448ecd824fc28bfec6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ad815631b097bdf448ecd824fc28bfec6\">OTA_OUT_OF_SEQUENCE</a> = 4</td></tr>\n<tr class=\"separator:ad815631b097bdf448ecd824fc28bfec6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a56955d84eb178a78a16db3ed6e2a1c7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a56955d84eb178a78a16db3ed6e2a1c7e\">OTA_FINISHED</a> = 6</td></tr>\n<tr class=\"separator:a56955d84eb178a78a16db3ed6e2a1c7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a id=\"a0625a265d8105bb0e6aa1503f88e21cd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0625a265d8105bb0e6aa1503f88e21cd\">&#9670;&nbsp;</a></span>main()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">def EnigmaIoTUpdate.main </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00067\">67</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"a9e979dfe91c5de2dfa6660efcf30bb9a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a9e979dfe91c5de2dfa6660efcf30bb9a\">&#9670;&nbsp;</a></span>on_connect()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">def EnigmaIoTUpdate.on_connect </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>client</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>userdata</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>flags</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>rc</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00029\">29</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"a162ca4b2a6c3e338d7e86162b09eb13a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a162ca4b2a6c3e338d7e86162b09eb13a\">&#9670;&nbsp;</a></span>on_message()</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">def EnigmaIoTUpdate.on_message </td>\n          <td>(</td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>client</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>userdata</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">&#160;</td>\n          <td class=\"paramname\"><em>msg</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00044\">44</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"a950133eea5c2ac61becd91f089b8d610\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a950133eea5c2ac61becd91f089b8d610\">&#9670;&nbsp;</a></span>args</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">EnigmaIoTUpdate.args = None</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00012\">12</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"a5069992755f7ebc78fa8218e65550c64\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5069992755f7ebc78fa8218e65550c64\">&#9670;&nbsp;</a></span>idx</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int EnigmaIoTUpdate.idx = 0</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00023\">23</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"a56955d84eb178a78a16db3ed6e2a1c7e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a56955d84eb178a78a16db3ed6e2a1c7e\">&#9670;&nbsp;</a></span>OTA_FINISHED</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int EnigmaIoTUpdate.OTA_FINISHED = 6</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00026\">26</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"ad815631b097bdf448ecd824fc28bfec6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad815631b097bdf448ecd824fc28bfec6\">&#9670;&nbsp;</a></span>OTA_OUT_OF_SEQUENCE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int EnigmaIoTUpdate.OTA_OUT_OF_SEQUENCE = 4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00025\">25</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"a1efdbd8359ee1708af1bcf3be3eff850\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1efdbd8359ee1708af1bcf3be3eff850\">&#9670;&nbsp;</a></span>otaFinished</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIoTUpdate.otaFinished = False</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00022\">22</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"af461562efece05d0467c0e17edd2e58f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af461562efece05d0467c0e17edd2e58f\">&#9670;&nbsp;</a></span>otaOK</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">string EnigmaIoTUpdate.otaOK = &quot;OTA finished OK&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00020\">20</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"ade24b0154bfadccc5f69ee560a33de8b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ade24b0154bfadccc5f69ee560a33de8b\">&#9670;&nbsp;</a></span>otaOutOfSequenceError</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">string EnigmaIoTUpdate.otaOutOfSequenceError = &quot;OTA out of sequence error&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00019\">19</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"af04fd96058043d8861cd38175cb99e6c\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af04fd96058043d8861cd38175cb99e6c\">&#9670;&nbsp;</a></span>otaResultTopic</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">string EnigmaIoTUpdate.otaResultTopic = &quot;/result/ota&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00018\">18</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"aefdb455c166193127480d7b5afe88a66\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aefdb455c166193127480d7b5afe88a66\">&#9670;&nbsp;</a></span>otaSetTopic</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">string EnigmaIoTUpdate.otaSetTopic = &quot;/set/ota&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00017\">17</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"acd57a56c8115a7f72f00b6efc95eeea5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#acd57a56c8115a7f72f00b6efc95eeea5\">&#9670;&nbsp;</a></span>resultTopic</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">string EnigmaIoTUpdate.resultTopic = &quot;/result/#&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00014\">14</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"a880799b2afdcda342a0c9413cc31c4be\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a880799b2afdcda342a0c9413cc31c4be\">&#9670;&nbsp;</a></span>sleepResultTopic</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">string EnigmaIoTUpdate.sleepResultTopic = &quot;/result/sleeptime&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00016\">16</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"aa26175595b8bee3fa7d7df8300e036d0\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa26175595b8bee3fa7d7df8300e036d0\">&#9670;&nbsp;</a></span>sleepSetTopic</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">string EnigmaIoTUpdate.sleepSetTopic = &quot;/set/sleeptime&quot;</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00015\">15</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n<a id=\"ad7b06ea4bc715581c290476212ae10c8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad7b06ea4bc715581c290476212ae10c8\">&#9670;&nbsp;</a></span>sleepyNode</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool EnigmaIoTUpdate.sleepyNode = True</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html#l00013\">13</a> of file <a class=\"el\" href=\"EnigmaIoTUpdate_8py_source.html\">EnigmaIoTUpdate.py</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/namespacemembers.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all namespace members with links to the namespace documentation for each member:</div><ul>\n<li>args\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a950133eea5c2ac61becd91f089b8d610\">EnigmaIoTUpdate</a>\n</li>\n<li>idx\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a5069992755f7ebc78fa8218e65550c64\">EnigmaIoTUpdate</a>\n</li>\n<li>main()\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a0625a265d8105bb0e6aa1503f88e21cd\">EnigmaIoTUpdate</a>\n</li>\n<li>on_connect()\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a9e979dfe91c5de2dfa6660efcf30bb9a\">EnigmaIoTUpdate</a>\n</li>\n<li>on_message()\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a162ca4b2a6c3e338d7e86162b09eb13a\">EnigmaIoTUpdate</a>\n</li>\n<li>OTA_FINISHED\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a56955d84eb178a78a16db3ed6e2a1c7e\">EnigmaIoTUpdate</a>\n</li>\n<li>OTA_OUT_OF_SEQUENCE\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ad815631b097bdf448ecd824fc28bfec6\">EnigmaIoTUpdate</a>\n</li>\n<li>otaFinished\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a1efdbd8359ee1708af1bcf3be3eff850\">EnigmaIoTUpdate</a>\n</li>\n<li>otaOK\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#af461562efece05d0467c0e17edd2e58f\">EnigmaIoTUpdate</a>\n</li>\n<li>otaOutOfSequenceError\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ade24b0154bfadccc5f69ee560a33de8b\">EnigmaIoTUpdate</a>\n</li>\n<li>otaResultTopic\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#af04fd96058043d8861cd38175cb99e6c\">EnigmaIoTUpdate</a>\n</li>\n<li>otaSetTopic\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#aefdb455c166193127480d7b5afe88a66\">EnigmaIoTUpdate</a>\n</li>\n<li>resultTopic\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#acd57a56c8115a7f72f00b6efc95eeea5\">EnigmaIoTUpdate</a>\n</li>\n<li>sleepResultTopic\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a880799b2afdcda342a0c9413cc31c4be\">EnigmaIoTUpdate</a>\n</li>\n<li>sleepSetTopic\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#aa26175595b8bee3fa7d7df8300e036d0\">EnigmaIoTUpdate</a>\n</li>\n<li>sleepyNode\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">EnigmaIoTUpdate</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/namespacemembers_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;<ul>\n<li>main()\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a0625a265d8105bb0e6aa1503f88e21cd\">EnigmaIoTUpdate</a>\n</li>\n<li>on_connect()\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a9e979dfe91c5de2dfa6660efcf30bb9a\">EnigmaIoTUpdate</a>\n</li>\n<li>on_message()\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a162ca4b2a6c3e338d7e86162b09eb13a\">EnigmaIoTUpdate</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/namespacemembers_vars.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Namespace Members</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"contents\">\n&#160;<ul>\n<li>args\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a950133eea5c2ac61becd91f089b8d610\">EnigmaIoTUpdate</a>\n</li>\n<li>idx\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a5069992755f7ebc78fa8218e65550c64\">EnigmaIoTUpdate</a>\n</li>\n<li>OTA_FINISHED\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a56955d84eb178a78a16db3ed6e2a1c7e\">EnigmaIoTUpdate</a>\n</li>\n<li>OTA_OUT_OF_SEQUENCE\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ad815631b097bdf448ecd824fc28bfec6\">EnigmaIoTUpdate</a>\n</li>\n<li>otaFinished\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a1efdbd8359ee1708af1bcf3be3eff850\">EnigmaIoTUpdate</a>\n</li>\n<li>otaOK\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#af461562efece05d0467c0e17edd2e58f\">EnigmaIoTUpdate</a>\n</li>\n<li>otaOutOfSequenceError\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ade24b0154bfadccc5f69ee560a33de8b\">EnigmaIoTUpdate</a>\n</li>\n<li>otaResultTopic\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#af04fd96058043d8861cd38175cb99e6c\">EnigmaIoTUpdate</a>\n</li>\n<li>otaSetTopic\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#aefdb455c166193127480d7b5afe88a66\">EnigmaIoTUpdate</a>\n</li>\n<li>resultTopic\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#acd57a56c8115a7f72f00b6efc95eeea5\">EnigmaIoTUpdate</a>\n</li>\n<li>sleepResultTopic\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#a880799b2afdcda342a0c9413cc31c4be\">EnigmaIoTUpdate</a>\n</li>\n<li>sleepSetTopic\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#aa26175595b8bee3fa7d7df8300e036d0\">EnigmaIoTUpdate</a>\n</li>\n<li>sleepyNode\n: <a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8\">EnigmaIoTUpdate</a>\n</li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/namespaces.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Namespace List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Namespace List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all namespaces with brief descriptions:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><span class=\"icona\"><span class=\"icon\">N</span></span><a class=\"el\" href=\"namespaceEnigmaIoTUpdate.html\" target=\"_self\">EnigmaIoTUpdate</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/node-ota-update_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: docs/node-ota-update.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">docs/node-ota-update.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/pages.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Related Pages</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Related Pages</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all related documentation pages:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_docs_api.html\" target=\"_self\">Server API</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_docs_howto.html\" target=\"_self\">howto</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_docs_node-ota-update.html\" target=\"_self\">OTA Update</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_docs_technical-background.html\" target=\"_self\">Design</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_4_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_EnigmaIOT-Button-Controller_readme.html\" target=\"_self\">EnigmaIOT Button Controller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_5_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_EnigmaIOT-DashButton-Controller_readme.html\" target=\"_self\">EnigmaIOT Dash Button Controller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_6_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_EnigmaIOT-Json-Controller-Template_readme.html\" target=\"_self\">EnigmaIOT JSON Controller Template</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_7_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_EnigmaIOT-Led-Controller_readme.html\" target=\"_self\">EnigmaIOT Led Controller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_8_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_EnigmaIOT-Sensor-Controller_readme.html\" target=\"_self\">EnigmaIOT Sensor Controller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_9_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_EnigmaIOT-SmartSwitch-Controller_readme.html\" target=\"_self\">EnigmaIOT SmartSwitch Controller</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_10_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_enigmaiot_led_flasher_readme.html\" target=\"_self\">EnigmaIOT LED Flasher example</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_11_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_enigmaiot_node_readme.html\" target=\"_self\">EnigmaIOT Node example</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_12_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_enigmaiot_node_msgpack_readme.html\" target=\"_self\">EnigmaIOT MsgPack example</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_13_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_enigmaiot_node_nonsleepy_readme.html\" target=\"_self\">EnigmaIOT Node example</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_14_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_EnigmaIOTGatewayDummy_readme.html\" target=\"_self\">EnigmaIOT Gateway Dummy</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_15_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_examples_EnigmaIOTGatewayMQTT_readme.html\" target=\"_self\">EnigmaIOT Gateway MQTT</a></td><td class=\"desc\"></td></tr>\n<tr id=\"row_16_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"md_LICENSE.html\" target=\"_self\">LICENSE</a></td><td class=\"desc\"></td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/readme_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: readme.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">readme.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_0.js",
    "content": "var searchData=\n[\n  ['_5ffiltertype_0',['_filterType',['../classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b',1,'FilterClass']]],\n  ['_5findex_1',['_index',['../classFilterClass.html#a5c265b773551343bcc7659e0253b525c',1,'FilterClass']]],\n  ['_5fled_5foff_2',['_LED_OFF',['../LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde',1,'LedController.h']]],\n  ['_5fled_5fon_3',['_LED_ON',['../LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea',1,'LedController.h']]],\n  ['_5forder_4',['_order',['../classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1',1,'FilterClass']]],\n  ['_5forderedvalues_5',['_orderedValues',['../classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180',1,'FilterClass']]],\n  ['_5fownpeertype_6',['_ownPeerType',['../classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab',1,'Comms_halClass']]],\n  ['_5fpeertype_7',['_peerType',['../espnow__hal_8cpp.html#a62ba3af3e98793dfe8f0e3039e325340',1,'espnow_hal.cpp']]],\n  ['_5frawvalues_8',['_rawValues',['../classFilterClass.html#a50254c631b3e05583890f63c6f0149bc',1,'FilterClass']]],\n  ['_5fweightvalues_9',['_weightValues',['../classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7',1,'FilterClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_1.js",
    "content": "var searchData=\n[\n  ['aad_5flength_10',['AAD_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['addexpiration_11',['addExpiration',['../classHABinarySensor.html#a857bc07743e8564db8476907f925c48e',1,'HABinarySensor']]],\n  ['addinputmsgqueue_12',['addInputMsgQueue',['../classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43',1,'EnigmaIOTGatewayClass']]],\n  ['addmqttqueue_13',['addMQTTqueue',['../classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f',1,'GwOutput_MQTT']]],\n  ['addpeer_14',['addPeer',['../classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986',1,'Espnow_halClass']]],\n  ['addr_15',['addr',['../structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1',1,'msg_queue_item_t']]],\n  ['addvalue_16',['addValue',['../classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337',1,'FilterClass']]],\n  ['addweigth_17',['addWeigth',['../classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f',1,'FilterClass']]],\n  ['addwifimanagerparameter_18',['addWiFiManagerParameter',['../classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7',1,'EnigmaIOTGatewayClass::addWiFiManagerParameter()'],['../classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742',1,'EnigmaIOTNodeClass::addWiFiManagerParameter()']]],\n  ['adjusttime_19',['adjustTime',['../classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2',1,'TimeManagerClass']]],\n  ['alarm_5fpanel_20',['ALARM_PANEL',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762',1,'haEntity.h']]],\n  ['allowsendattributes_21',['allowSendAttributes',['../classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da',1,'HAEntity']]],\n  ['already_5fused_22',['ALREADY_USED',['../NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d',1,'NodeList.h']]],\n  ['api_2emd_23',['api.md',['../api_8md.html',1,'']]],\n  ['arduinootaconfigure_24',['arduinoOTAConfigure',['../EnigmaIOTGatewayMQTT_8cpp.html#a8d52c8107e0bcc9687be62f7e0b388ae',1,'EnigmaIOTGatewayMQTT.cpp']]],\n  ['args_25',['args',['../namespaceEnigmaIoTUpdate.html#a950133eea5c2ac61becd91f089b8d610',1,'EnigmaIoTUpdate']]],\n  ['askedtimesync_26',['askedTimeSync',['../classNode.html#a918b7ad8582d1b2d569dbd66a262ee50',1,'Node']]],\n  ['avefilter_27',['aveFilter',['../classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78',1,'FilterClass']]],\n  ['average_5ffilter_28',['AVERAGE_FILTER',['../Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9',1,'Filter.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_10.js",
    "content": "var searchData=\n[\n  ['qmessagelength_765',['qMessageLength',['../classNode.html#a41f17a6abd376d602bef3925c751a181',1,'Node']]],\n  ['qmessagepending_766',['qMessagePending',['../classNode.html#a0db2a4dfda51cfc5afe8c846a622ba54',1,'Node']]],\n  ['queuedmessage_767',['queuedMessage',['../classNode.html#a712ec21cec6ac19ee68c8beb202fbf92',1,'Node']]],\n  ['quick_5fsync_5ftime_768',['QUICK_SYNC_TIME',['../EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9',1,'EnigmaIoTconfig.h']]],\n  ['quicksort_769',['quicksort',['../classFilterClass.html#af7fa09578d556d8289807f25faf148f7',1,'FilterClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_11.js",
    "content": "var searchData=\n[\n  ['random_770',['random',['../classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0',1,'CryptModule::random()'],['../classCryptModule.html#a880b6a28ae062613f81b1524df884832',1,'CryptModule::random(uint32_t max, uint32_t min=0)'],['../classCryptModule.html#a81975699307738712329b4ef8cb47675',1,'CryptModule::random(const uint8_t *buf, size_t len)']]],\n  ['random_5flength_771',['RANDOM_LENGTH',['../cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654',1,'cryptModule.h']]],\n  ['rate_5fave_5forder_772',['RATE_AVE_ORDER',['../EnigmaIoTconfig_8h.html#af320072fb51a344213679450cacb3d6a',1,'EnigmaIoTconfig.h']]],\n  ['ratefilter_773',['rateFilter',['../classNode.html#adba11398693739d5fc1d9a755d4bc567',1,'Node']]],\n  ['raw_774',['RAW',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7',1,'RAW():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7',1,'RAW():&#160;EnigmaIOTNode.h']]],\n  ['readindex_775',['readIndex',['../classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e',1,'EnigmaIOTRingBuffer']]],\n  ['readme_2emd_776',['readme.md',['../examples_2EnigmaIOT-Button-Controller_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOT-DashButton-Controller_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOT-Json-Controller-Template_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOT-Led-Controller_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOT-Sensor-Controller_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOT-SmartSwitch-Controller_2readme_8md.html',1,'(Global Namespace)'],['../examples_2enigmaiot__led__flasher_2readme_8md.html',1,'(Global Namespace)'],['../examples_2enigmaiot__node_2readme_8md.html',1,'(Global Namespace)'],['../examples_2enigmaiot__node__msgpack_2readme_8md.html',1,'(Global Namespace)'],['../examples_2enigmaiot__node__nonsleepy_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOTGatewayDummy_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOTGatewayMQTT_2readme_8md.html',1,'(Global Namespace)'],['../readme_8md.html',1,'(Global Namespace)']]],\n  ['readytosend_777',['readyToSend',['../classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960',1,'Espnow_halClass']]],\n  ['reconnect_778',['reconnect',['../classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7',1,'GwOutput_MQTT']]],\n  ['reconnection_5fperiod_779',['RECONNECTION_PERIOD',['../EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826',1,'EnigmaIoTconfig.h']]],\n  ['red_5fled_780',['RED_LED',['../EnigmaIOTGatewayDummy_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d',1,'RED_LED():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d',1,'RED_LED():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['registered_781',['REGISTERED',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568',1,'NodeList.h']]],\n  ['relay_5foff_782',['RELAY_OFF',['../SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f',1,'SmartSwitchController.h']]],\n  ['relay_5fon_783',['RELAY_ON',['../SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2',1,'SmartSwitchController.h']]],\n  ['relaykey_784',['relayKey',['../SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba',1,'SmartSwitchController.cpp']]],\n  ['relaypin_785',['relayPin',['../structsmartSwitchControllerHw__t.html#a383953b4e6d9f3a294ed0cc56da0064a',1,'smartSwitchControllerHw_t']]],\n  ['relaypinparam_786',['relayPinParam',['../classCONTROLLER__CLASS__NAME.html#a4c81e6c8ec96a457e0e8f3e1bad4525f',1,'CONTROLLER_CLASS_NAME']]],\n  ['relaystatus_787',['relayStatus',['../structsmartSwitchControllerHw__t.html#aebd780051c191b829135d424b0b504a3',1,'smartSwitchControllerHw_t']]],\n  ['reportrssi_788',['reportRSSI',['../classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08',1,'EnigmaIOTNodeClass']]],\n  ['requestreportrssi_789',['requestReportRSSI',['../classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1',1,'EnigmaIOTNodeClass']]],\n  ['requestsearchgateway_790',['requestSearchGateway',['../classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1',1,'EnigmaIOTNodeClass']]],\n  ['reset_791',['reset',['../classNode.html#a7c565caad2fea0439f28d24887ac2498',1,'Node::reset()'],['../classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8',1,'TimeManagerClass::reset()'],['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05',1,'RESET():&#160;NodeList.h']]],\n  ['reset_5fans_792',['RESET_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445',1,'NodeList.h']]],\n  ['reset_5fpin_793',['RESET_PIN',['../EnigmaIOT-Button-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e',1,'RESET_PIN():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e',1,'RESET_PIN():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e',1,'RESET_PIN():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e',1,'RESET_PIN():&#160;enigmaiot_node_nonsleepy.cpp']]],\n  ['reset_5fpin_5fduration_794',['RESET_PIN_DURATION',['../EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b',1,'EnigmaIoTconfig.h']]],\n  ['resetconfig_795',['resetConfig',['../classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325',1,'EnigmaIOTNodeClass']]],\n  ['resetgw_796',['resetGw',['../classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9',1,'GatewayAPI']]],\n  ['resetpin_797',['resetPin',['../classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144',1,'EnigmaIOTNodeClass']]],\n  ['response_5fsize_798',['RESPONSE_SIZE',['../GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df',1,'GatewayAPI.h']]],\n  ['restart_799',['restart',['../classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc',1,'EnigmaIOTNodeClass']]],\n  ['restart_5fafter_5fota_800',['RESTART_AFTER_OTA',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6',1,'NodeList.h']]],\n  ['restart_5fconfirm_801',['RESTART_CONFIRM',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23',1,'NodeList.h']]],\n  ['restart_5fnode_802',['RESTART_NODE',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4',1,'NodeList.h']]],\n  ['restart_5fnotif_803',['RESTART_NOTIF',['../GwOutput__mqtt_8h.html#ae2f0ef8f36c0b685940124089172e6c3',1,'GwOutput_mqtt.h']]],\n  ['restart_5frequested_804',['RESTART_REQUESTED',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06',1,'NodeList.h']]],\n  ['restartgw_805',['restartGw',['../classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314',1,'GatewayAPI']]],\n  ['restartnode_806',['restartNode',['../classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b',1,'GatewayAPI']]],\n  ['restartnoderequest_807',['restartNodeRequest',['../classGatewayAPI.html#ac4244196077eddbed077df9d163198ea',1,'GatewayAPI']]],\n  ['restartreason_808',['restartReason',['../classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218',1,'EnigmaIOTNodeClass']]],\n  ['restartreason_5ft_809',['restartReason_t',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601',1,'NodeList.h']]],\n  ['restartrequested_810',['restartRequested',['../EnigmaIOTGatewayMQTT_8cpp.html#a827c388d92651f51d34097598a52a92a',1,'EnigmaIOTGatewayMQTT.cpp']]],\n  ['restartrequesttime_811',['restartRequestTime',['../EnigmaIOTGatewayMQTT_8cpp.html#a37e5a736d8dfa2198aa9607a61ff1695',1,'EnigmaIOTGatewayMQTT.cpp']]],\n  ['resulttopic_812',['resultTopic',['../namespaceEnigmaIoTUpdate.html#acd57a56c8115a7f72f00b6efc95eeea5',1,'EnigmaIoTUpdate']]],\n  ['retain_813',['retain',['../structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570',1,'mqtt_queue_item_t']]],\n  ['roundtripdelay_814',['roundTripDelay',['../classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71',1,'TimeManagerClass']]],\n  ['rssi_815',['rssi',['../structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b',1,'rtcmem_data_t::rssi()'],['../classNode.html#a48d7a268139be97133747b7692a5f888',1,'Node::rssi()']]],\n  ['rssi_5fans_816',['RSSI_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1',1,'NodeList.h']]],\n  ['rssi_5fget_817',['RSSI_GET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824',1,'NodeList.h']]],\n  ['rtc_5faddress_818',['RTC_ADDRESS',['../EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['rtcmem_5fdata_819',['rtcmem_data',['../classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69',1,'EnigmaIOTNodeClass']]],\n  ['rtcmem_5fdata_5ft_820',['rtcmem_data_t',['../structrtcmem__data__t.html',1,'']]],\n  ['runhandle_821',['runHandle',['../classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52',1,'Espnow_halClass']]],\n  ['rx_5fcb_822',['rx_cb',['../classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299',1,'EnigmaIOTGatewayClass::rx_cb()'],['../classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4',1,'EnigmaIOTNodeClass::rx_cb()'],['../classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47',1,'Espnow_halClass::rx_cb()']]],\n  ['rxled_823',['rxled',['../classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816',1,'EnigmaIOTGatewayClass']]],\n  ['rxledontime_824',['rxLedOnTime',['../classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64',1,'EnigmaIOTGatewayClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_12.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_12.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_12.js",
    "content": "var searchData=\n[\n  ['server_20api_825',['Server API',['../md_docs_api.html',1,'']]],\n  ['save_5frelay_5fstatus_826',['SAVE_RELAY_STATUS',['../SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf',1,'SmartSwitchController.h']]],\n  ['saveconfig_827',['saveConfig',['../classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc',1,'CONTROLLER_CLASS_NAME::saveConfig() override'],['../classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807',1,'CONTROLLER_CLASS_NAME::saveConfig()'],['../classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807',1,'CONTROLLER_CLASS_NAME::saveConfig()'],['../classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807',1,'CONTROLLER_CLASS_NAME::saveConfig()'],['../classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807',1,'CONTROLLER_CLASS_NAME::saveConfig()'],['../classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807',1,'CONTROLLER_CLASS_NAME::saveConfig()'],['../classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5',1,'GatewayOutput_dummy::saveConfig()'],['../classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1',1,'GwOutput_MQTT::saveConfig()'],['../classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e',1,'EnigmaIOTjsonController::saveConfig()'],['../classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd',1,'GatewayOutput_generic::saveConfig()']]],\n  ['saveflashdata_828',['saveFlashData',['../classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a',1,'EnigmaIOTGatewayClass::saveFlashData()'],['../classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2',1,'EnigmaIOTNodeClass::saveFlashData()']]],\n  ['savertcdata_829',['saveRTCData',['../classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a',1,'EnigmaIOTNodeClass']]],\n  ['scene_830',['SCENE',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4',1,'haEntity.h']]],\n  ['searchforgateway_831',['searchForGateway',['../classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45',1,'EnigmaIOTNodeClass']]],\n  ['send_832',['send',['../classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5',1,'Comms_halClass::send()'],['../classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b',1,'Espnow_halClass::send()']]],\n  ['sendbootstatus_833',['sendBootStatus',['../classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b',1,'CONTROLLER_CLASS_NAME']]],\n  ['sendbroadcastkey_834',['sendBroadcastKey',['../classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3',1,'EnigmaIOTGatewayClass']]],\n  ['sendcommandresp_835',['sendCommandResp',['../classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result) override'],['../classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result)'],['../classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result)'],['../classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result)'],['../classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result)'],['../classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result)'],['../classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb',1,'EnigmaIOTjsonController::sendCommandResp()']]],\n  ['senddata_836',['sendData',['../classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d',1,'EnigmaIOTjsonController::sendData()'],['../classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b',1,'EnigmaIOTNodeClass::sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)'],['../classEnigmaIOTNodeClass.html#a15f69c66601b59bfc4bae47cf6075e55',1,'EnigmaIOTNodeClass::sendData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)']]],\n  ['senddatacallback_837',['sendDataCallback',['../classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170',1,'EnigmaIOTjsonController']]],\n  ['senddownstream_838',['sendDownstream',['../classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4',1,'EnigmaIOTGatewayClass']]],\n  ['sendespnowmessage_839',['sendEspNowMessage',['../classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297',1,'Espnow_halClass']]],\n  ['sendhadiscoveryjson_840',['sendHADiscoveryJSON',['../classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7',1,'EnigmaIOTGatewayClass']]],\n  ['sendhadiscoverymessage_841',['sendHADiscoveryMessage',['../classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f',1,'EnigmaIOTNodeClass']]],\n  ['sendjson_842',['sendJson',['../classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9',1,'EnigmaIOTjsonController']]],\n  ['sendledstatus_843',['sendLedStatus',['../classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a',1,'CONTROLLER_CLASS_NAME']]],\n  ['sendlinkstatus_844',['sendLinkStatus',['../classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e',1,'CONTROLLER_CLASS_NAME']]],\n  ['sendnodenameset_845',['sendNodeNameSet',['../classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249',1,'EnigmaIOTNodeClass']]],\n  ['sendrelaystatus_846',['sendRelayStatus',['../classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6',1,'CONTROLLER_CLASS_NAME']]],\n  ['sendrestart_847',['sendRestart',['../classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5',1,'EnigmaIOTNodeClass']]],\n  ['sendstartanouncement_848',['sendStartAnouncement',['../classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement() override'],['../classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement()'],['../classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement()'],['../classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement()'],['../classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement()'],['../classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement()'],['../classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58',1,'EnigmaIOTjsonController::sendStartAnouncement()']]],\n  ['sendtemperature_849',['sendTemperature',['../classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99',1,'CONTROLLER_CLASS_NAME']]],\n  ['sendunencrypteddata_850',['sendUnencryptedData',['../classEnigmaIOTNodeClass.html#a2e6973be4195ba354607c631c587297e',1,'EnigmaIOTNodeClass']]],\n  ['senduplinkdata_851',['sendUplinkData',['../EnigmaIOT-Button-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['sensor_852',['SENSOR',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558',1,'haEntity.h']]],\n  ['sensor_5fbattery_853',['sensor_battery',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73',1,'haEntity.h']]],\n  ['sensor_5fbrcast_5fdata_854',['SENSOR_BRCAST_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613affd78f537f0c30f76f209e5afd106843',1,'SENSOR_BRCAST_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faffd78f537f0c30f76f209e5afd106843',1,'SENSOR_BRCAST_DATA():&#160;EnigmaIOTNode.h']]],\n  ['sensor_5fcurrent_855',['sensor_current',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3',1,'haEntity.h']]],\n  ['sensor_5fdata_856',['SENSOR_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21',1,'SENSOR_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faa8ba55203a30122cc271cc66b2909b21',1,'SENSOR_DATA():&#160;EnigmaIOTNode.h']]],\n  ['sensor_5fenergy_857',['sensor_energy',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293',1,'haEntity.h']]],\n  ['sensor_5fhumidity_858',['sensor_humidity',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736',1,'haEntity.h']]],\n  ['sensor_5filluminance_859',['sensor_illuminance',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818',1,'haEntity.h']]],\n  ['sensor_5fnone_860',['sensor_none',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6',1,'haEntity.h']]],\n  ['sensor_5fpower_861',['sensor_power',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29',1,'haEntity.h']]],\n  ['sensor_5fpower_5ffactor_862',['sensor_power_factor',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321',1,'haEntity.h']]],\n  ['sensor_5fpressure_863',['sensor_pressure',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284',1,'haEntity.h']]],\n  ['sensor_5fsignal_5fstrength_864',['sensor_signal_strength',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537',1,'haEntity.h']]],\n  ['sensor_5ftemperature_865',['sensor_temperature',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e',1,'haEntity.h']]],\n  ['sensor_5ftimestamp_866',['sensor_timestamp',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82',1,'haEntity.h']]],\n  ['sensor_5fvoltage_867',['sensor_voltage',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c',1,'haEntity.h']]],\n  ['sensors_868',['sensors',['../classCONTROLLER__CLASS__NAME.html#ae875eb77d530db257752d87a010ec6c7',1,'CONTROLLER_CLASS_NAME']]],\n  ['sentresult_869',['sentResult',['../classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130',1,'Comms_halClass']]],\n  ['server_870',['server',['../classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5',1,'EnigmaIOTGatewayClass::server()'],['../classGatewayAPI.html#a7327209d50f6c17e3cd1ad67f2941e9a',1,'GatewayAPI::server()']]],\n  ['server_5fhello_871',['SERVER_HELLO',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c',1,'SERVER_HELLO():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa28914d3bb26ec8c2bd2d5ad9781cbf8c',1,'SERVER_HELLO():&#160;EnigmaIOTNode.h']]],\n  ['serverhello_872',['serverHello',['../classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0',1,'EnigmaIOTGatewayClass']]],\n  ['set_5fidentify_873',['SET_IDENTIFY',['../GwOutput__mqtt_8h.html#a523454d3069bcc08356f43906870a8eb',1,'GwOutput_mqtt.h']]],\n  ['set_5fname_874',['SET_NAME',['../GwOutput__mqtt_8h.html#a947ddc46cf5393a05a60422574c68dd0',1,'GwOutput_mqtt.h']]],\n  ['set_5fota_875',['SET_OTA',['../GwOutput__mqtt_8h.html#a03d78690a77ad7c71da69356e13f4111',1,'GwOutput_mqtt.h']]],\n  ['set_5fota_5fans_876',['SET_OTA_ANS',['../GwOutput__mqtt_8h.html#a82391b9a9738bbf392fbad554f7ef527',1,'GwOutput_mqtt.h']]],\n  ['set_5freset_5fans_877',['SET_RESET_ANS',['../GwOutput__mqtt_8h.html#a7e8363a72c676c15de7221529988ee48',1,'GwOutput_mqtt.h']]],\n  ['set_5freset_5fconfig_878',['SET_RESET_CONFIG',['../GwOutput__mqtt_8h.html#a9ed6c45eceed73f4dc32d6147957fed5',1,'GwOutput_mqtt.h']]],\n  ['set_5frestart_5fmcu_879',['SET_RESTART_MCU',['../GwOutput__mqtt_8h.html#a2e46d7b49d143e76a290f06fc6892aa3',1,'GwOutput_mqtt.h']]],\n  ['set_5fsleep_880',['SET_SLEEP',['../GwOutput__mqtt_8h.html#a0ffae85da5eb98e796fd818c50ac147a',1,'GwOutput_mqtt.h']]],\n  ['set_5fuser_5fdata_881',['SET_USER_DATA',['../GwOutput__mqtt_8h.html#ad7c2efab8087395f360a163faecc66eb',1,'GwOutput_mqtt.h']]],\n  ['setboot_882',['setBoot',['../classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897',1,'CONTROLLER_CLASS_NAME']]],\n  ['setbroadcastkeyrequested_883',['setBroadcastKeyRequested',['../classNode.html#a0e298bac431d8ac9e98fb12b71292de1',1,'Node']]],\n  ['setclock_884',['setClock',['../classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7',1,'GwOutput_MQTT']]],\n  ['setdeviceclass_885',['setDeviceClass',['../classHABinarySensor.html#af305236afbd0405010d1611eac965530',1,'HABinarySensor::setDeviceClass()'],['../classHACover.html#add81f3124d1f1f66745798d27b467098',1,'HACover::setDeviceClass()'],['../classHASensor.html#acdd930c6953bd7383eac0d58b3693f71',1,'HASensor::setDeviceClass()']]],\n  ['setdlcallback_886',['setDlCallback',['../classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd',1,'GatewayOutput_dummy::setDlCallback()'],['../classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86',1,'GatewayOutput_generic::setDlCallback()']]],\n  ['setencryptionkey_887',['setEncryptionKey',['../classNode.html#ae7b7337fdc178fe350ac4ce2f4675040',1,'Node']]],\n  ['setexpiretime_888',['setExpireTime',['../classHASensor.html#afcb6f12671331f88f5bc2b940be9221f',1,'HASensor']]],\n  ['setinitassleepy_889',['setInitAsSleepy',['../classNode.html#a3621fd27cee1a28145a7daa167ad0b3d',1,'Node']]],\n  ['setkeyvalid_890',['setKeyValid',['../classNode.html#a81ded601038e157ecb03daa7fb85242d',1,'Node']]],\n  ['setkeyvalidfrom_891',['setKeyValidFrom',['../classNode.html#a65284f939ba9d70cff90e7e508ac1a13',1,'Node']]],\n  ['setlastcontrolcounter_892',['setLastControlCounter',['../classNode.html#a2d876405390237c8cbbd4689fb2f960b',1,'Node']]],\n  ['setlastdownlinkmsgcounter_893',['setLastDownlinkMsgCounter',['../classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9',1,'Node']]],\n  ['setlastmessagecounter_894',['setLastMessageCounter',['../classNode.html#aaa07721114c6b57152caf9a7b8cd4c23',1,'Node']]],\n  ['setlastmessagetime_895',['setLastMessageTime',['../classNode.html#ae7d5f900dd1290910a30692175dc8e23',1,'Node']]],\n  ['setled_896',['setLed',['../classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4',1,'EnigmaIOTNodeClass']]],\n  ['setlinked_897',['setLinked',['../classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9',1,'CONTROLLER_CLASS_NAME']]],\n  ['setmacaddress_898',['setMacAddress',['../classNode.html#aea12cab858f40940a1ab5c61596b6355',1,'Node']]],\n  ['setnamesufix_899',['setNameSufix',['../classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063',1,'HAEntity']]],\n  ['setnodeaddress_900',['setNodeAddress',['../classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6',1,'EnigmaIOTNodeClass']]],\n  ['setnodeid_901',['setNodeId',['../classNode.html#a3615b98da7f0ea0d8615a8f45519a715',1,'Node']]],\n  ['setnodename_902',['setNodeName',['../classNode.html#a31c7b1dce5c26d81ead2cabf5395d935',1,'Node']]],\n  ['setoffdelay_903',['setOffDelay',['../classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7',1,'HABinarySensor']]],\n  ['setpayload_904',['setPayload',['../classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b',1,'HATrigger']]],\n  ['setpayloadclose_905',['setPayloadClose',['../classHACover.html#a372d3fac011d58154daca97311fb5a94',1,'HACover']]],\n  ['setpayloadgoto_906',['setPayloadGoto',['../classHACover.html#ac2f06095a52cd09cf77fb881754bffd4',1,'HACover']]],\n  ['setpayloadoff_907',['setPayloadOff',['../classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59',1,'HABinarySensor::setPayloadOff(const char *payload)'],['../classHABinarySensor.html#a48a5415389f3b0a03e35c883f764ab45',1,'HABinarySensor::setPayloadOff(int payload)'],['../classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831',1,'HASwitch::setPayloadOff(const char *payload)'],['../classHASwitch.html#ad87f7ed8d117684176195abb75de10fd',1,'HASwitch::setPayloadOff(int payload)']]],\n  ['setpayloadon_908',['setPayloadOn',['../classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4',1,'HABinarySensor::setPayloadOn(const char *payload)'],['../classHABinarySensor.html#ae7d585e8eed2eda20125b9d2eb5c4b9c',1,'HABinarySensor::setPayloadOn(int payload)'],['../classHASwitch.html#a58d4755d08863514f81805d29d96605b',1,'HASwitch::setPayloadOn(const char *payload)'],['../classHASwitch.html#adb657f3c1e7a6d0dd201ae1ae58c4c61',1,'HASwitch::setPayloadOn(int payload)']]],\n  ['setpayloadopen_909',['setPayloadOpen',['../classHACover.html#a20860a2f4181be32c69a583104cf9181',1,'HACover']]],\n  ['setpayloadstop_910',['setPayloadStop',['../classHACover.html#a727afd76b2e852a0e177c5d64fff5894',1,'HACover']]],\n  ['setrelay_911',['setRelay',['../classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488',1,'CONTROLLER_CLASS_NAME']]],\n  ['setresetpin_912',['setResetPin',['../classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263',1,'EnigmaIOTNodeClass']]],\n  ['setrssi_913',['setRSSI',['../classNode.html#aa14110f23c8cfe73c44e1a87382a1081',1,'Node']]],\n  ['setrxled_914',['setRxLed',['../classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187',1,'EnigmaIOTGatewayClass']]],\n  ['setsleeptime_915',['setSleepTime',['../classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e',1,'EnigmaIOTNodeClass']]],\n  ['setsleepy_916',['setSleepy',['../classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7',1,'Node']]],\n  ['setstateclosed_917',['setStateClosed',['../classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0',1,'HACover']]],\n  ['setstateclosing_918',['setStateClosing',['../classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69',1,'HACover']]],\n  ['setstateoff_919',['setStateOff',['../classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272',1,'HASwitch::setStateOff(const char *payload)'],['../classHASwitch.html#a92d97f25fd24278191e3ded747f1eac9',1,'HASwitch::setStateOff(int payload)']]],\n  ['setstateon_920',['setStateOn',['../classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f',1,'HASwitch::setStateOn(const char *payload)'],['../classHASwitch.html#a8a83e4675f294b203737539245e13c34',1,'HASwitch::setStateOn(int payload)']]],\n  ['setstateopen_921',['setStateOpen',['../classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42',1,'HACover']]],\n  ['setstateopening_922',['setStateOpening',['../classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2',1,'HACover']]],\n  ['setstatestopped_923',['setStateStopped',['../classHACover.html#a2341ee037b2dae238703f15bf95e6ccf',1,'HACover']]],\n  ['setstatus_924',['setStatus',['../classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27',1,'Node']]],\n  ['setsubtype_925',['setSubtype',['../classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf',1,'HATrigger::setSubtype(ha_triggerSubtype_t subtype)'],['../classHATrigger.html#ab16d63fc344bac17dd99834be15585aa',1,'HATrigger::setSubtype(const char *subtype)']]],\n  ['settimesyncenabled_926',['setTimeSyncEnabled',['../classNode.html#a121f5ac6ef71317bd8900b97a8abc65a',1,'Node']]],\n  ['settxled_927',['setTxLed',['../classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0',1,'EnigmaIOTGatewayClass']]],\n  ['settype_928',['setType',['../classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c',1,'HATrigger::setType(ha_triggerType_t type)'],['../classHATrigger.html#af86406b876cfddbe13ef433582600658',1,'HATrigger::setType(const char *type)']]],\n  ['setunitofmeasurement_929',['setUnitOfMeasurement',['../classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e',1,'HASensor']]],\n  ['setup_930',['setup',['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea',1,'EnigmaIOTjsonController::setup()'],['../EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;enigmaiot_node_nonsleepy.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['setvaluefield_931',['setValueField',['../classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958',1,'HABinarySensor::setValueField()'],['../classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc',1,'HASensor::setValueField()'],['../classHASwitch.html#a237b5b70434642df1031dac738955634',1,'HASwitch::setValueField()']]],\n  ['setvaluetemplate_932',['setValueTemplate',['../classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552',1,'HABinarySensor::setValueTemplate()'],['../classHASensor.html#a41e55b745b034127a7d7a98cb50d4559',1,'HASensor::setValueTemplate()']]],\n  ['setversion_933',['setVersion',['../classNode.html#accf5025ffbf53e48db9ab7f429c68b1e',1,'Node']]],\n  ['shmsg_5flen_934',['SHMSG_LEN',['../EnigmaIOTGateway_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0',1,'SHMSG_LEN():&#160;EnigmaIOTGateway.cpp'],['../EnigmaIOTNode_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0',1,'SHMSG_LEN():&#160;EnigmaIOTNode.cpp']]],\n  ['shouldrestart_935',['shouldRestart',['../classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365',1,'EnigmaIOTNodeClass']]],\n  ['shouldsave_936',['shouldSave',['../EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9',1,'EnigmaIOTGateway.cpp']]],\n  ['shouldsaveconfig_937',['shouldSaveConfig',['../classGwOutput__MQTT.html#aa8a75a12858e138be2e92c69f2111038',1,'GwOutput_MQTT']]],\n  ['showtime_938',['showTime',['../enigmaiot__node__nonsleepy_8cpp.html#af0c88ea180e73ee60842341790d31b44',1,'enigmaiot_node_nonsleepy.cpp']]],\n  ['simpleeventhandler_5ft_939',['simpleEventHandler_t',['../EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c',1,'EnigmaIOTGateway.h']]],\n  ['size_940',['size',['../classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419',1,'EnigmaIOTRingBuffer']]],\n  ['sleep_941',['sleep',['../classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360',1,'EnigmaIOTNodeClass::sleep()'],['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa',1,'SLEEP():&#160;NodeList.h']]],\n  ['sleep_5fans_942',['SLEEP_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6',1,'NodeList.h']]],\n  ['sleep_5fget_943',['SLEEP_GET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa',1,'NodeList.h']]],\n  ['sleep_5fset_944',['SLEEP_SET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55',1,'NodeList.h']]],\n  ['sleep_5ftime_945',['SLEEP_TIME',['../EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260',1,'EnigmaIOT-Sensor-Controller.cpp']]],\n  ['sleeprequested_946',['sleepRequested',['../classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649',1,'EnigmaIOTNodeClass']]],\n  ['sleepresulttopic_947',['sleepResultTopic',['../namespaceEnigmaIoTUpdate.html#a880799b2afdcda342a0c9413cc31c4be',1,'EnigmaIoTUpdate']]],\n  ['sleepsettopic_948',['sleepSetTopic',['../namespaceEnigmaIoTUpdate.html#aa26175595b8bee3fa7d7df8300e036d0',1,'EnigmaIoTUpdate']]],\n  ['sleeptime_949',['sleepTime',['../structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54',1,'rtcmem_data_t::sleepTime()'],['../classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91',1,'EnigmaIOTNodeClass::sleepTime()']]],\n  ['sleepy_950',['sleepy',['../structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e',1,'rtcmem_data_t::sleepy()'],['../EnigmaIOT-Button-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['sleepynode_951',['sleepyNode',['../structnode__instance.html#adc14b97d211609ff286c2edc4bcbe061',1,'node_instance::sleepyNode()'],['../classNode.html#a774efd63a9d427c0911b07dc3a7ac11d',1,'Node::sleepyNode()'],['../namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8',1,'EnigmaIoTUpdate.sleepyNode()']]],\n  ['smartswitchcontroller_2ecpp_952',['SmartSwitchController.cpp',['../SmartSwitchController_8cpp.html',1,'']]],\n  ['smartswitchcontroller_2eh_953',['SmartSwitchController.h',['../SmartSwitchController_8h.html',1,'']]],\n  ['smartswitchcontrollerhw_5ft_954',['smartSwitchControllerHw_t',['../structsmartSwitchControllerHw__t.html',1,'']]],\n  ['smile_955',['SMILE',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da298f796cee1bd5d6decfe81d4a98b554',1,'SMILE():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba298f796cee1bd5d6decfe81d4a98b554',1,'SMILE():&#160;EnigmaIOTNode.h']]],\n  ['startconnectionflash_956',['startConnectionFlash',['../EnigmaIOTGatewayDummy_8cpp.html#a6ff09343e5169937476aa04932b76915',1,'startConnectionFlash(int period):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a6ff09343e5169937476aa04932b76915',1,'startConnectionFlash(int period):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['startflash_957',['startFlash',['../EnigmaIOTNode_8cpp.html#ae79c9303923c11f39edb388b32d4646b',1,'EnigmaIOTNode.cpp']]],\n  ['startidentifying_958',['startIdentifying',['../classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471',1,'EnigmaIOTNodeClass']]],\n  ['status_959',['status',['../structnode__instance.html#a784768cbda2285978d85c6dd17c01158',1,'node_instance::status()'],['../classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3',1,'Node::status()'],['../GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30',1,'status():&#160;GwOutput_generic.h']]],\n  ['status_5fsend_5fperiod_960',['STATUS_SEND_PERIOD',['../GwOutput__mqtt_8h.html#a0c2feee288af6e6c9d13de8804a94128',1,'GwOutput_mqtt.h']]],\n  ['status_5ft_961',['status_t',['../NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9',1,'NodeList.h']]],\n  ['stop_962',['stop',['../classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f',1,'Comms_halClass::stop()'],['../classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22',1,'EnigmaIOTNodeClass::stop()'],['../classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3',1,'Espnow_halClass::stop()']]],\n  ['stopconnectionflash_963',['stopConnectionFlash',['../EnigmaIOTGatewayDummy_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd',1,'stopConnectionFlash():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd',1,'stopConnectionFlash():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['stopflash_964',['stopFlash',['../EnigmaIOTNode_8cpp.html#ad072ccb795ca00a2cc374f3ce7bd5d55',1,'EnigmaIOTNode.cpp']]],\n  ['stopidentifying_965',['stopIdentifying',['../classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3',1,'EnigmaIOTNodeClass']]],\n  ['str2mac_966',['str2mac',['../helperFunctions_8cpp.html#a02961b325403161b54533152d242696a',1,'str2mac(const char *macAddrString, uint8_t *macBytes):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a0fdf837000194d53f0d019f024e0f4a1',1,'str2mac(const char *mac, uint8_t *values):&#160;helperFunctions.cpp']]],\n  ['support_5fha_5fdiscovery_967',['SUPPORT_HA_DISCOVERY',['../EnigmaIoTconfigAdvanced_8h.html#a16e6dc75c832482efe3cc26d5f187201',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['switch_968',['SWITCH',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b',1,'haEntity.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_13.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_13.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_13.js",
    "content": "var searchData=\n[\n  ['tag_5flength_969',['TAG_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['tag_5fscanner_970',['TAG_SCANNER',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607',1,'haEntity.h']]],\n  ['technical_2dbackground_2emd_971',['technical-background.md',['../technical-background_8md.html',1,'']]],\n  ['tempbuffer_972',['tempBuffer',['../classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74',1,'EnigmaIOTGatewayClass']]],\n  ['tempc_973',['tempC',['../classCONTROLLER__CLASS__NAME.html#a31b856de204d6bf15ed12641ff748dc3',1,'CONTROLLER_CLASS_NAME']]],\n  ['tempsent_974',['tempSent',['../classCONTROLLER__CLASS__NAME.html#ab566b0093af7f84c645a5c35342c6a51',1,'CONTROLLER_CLASS_NAME']]],\n  ['test_975',['TEST',['../ds18b20Controller_8cpp.html#ab946e2e7f7679350627acfded8e2658b',1,'ds18b20Controller.cpp']]],\n  ['time_5fsync_5fperiod_976',['TIME_SYNC_PERIOD',['../EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c',1,'EnigmaIoTconfig.h']]],\n  ['timeisadjusted_977',['timeIsAdjusted',['../classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f',1,'TimeManagerClass']]],\n  ['timemanager_978',['TimeManager',['../timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58',1,'TimeManager():&#160;timeManager.cpp'],['../timeManager_8h.html#aa2f15646607c9908039f67741ccbab58',1,'TimeManager():&#160;timeManager.cpp']]],\n  ['timemanager_2ecpp_979',['timeManager.cpp',['../timeManager_8cpp.html',1,'']]],\n  ['timemanager_2eh_980',['timeManager.h',['../timeManager_8h.html',1,'']]],\n  ['timemanagerclass_981',['TimeManagerClass',['../classTimeManagerClass.html',1,'']]],\n  ['timesyncperiod_982',['timeSyncPeriod',['../classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4',1,'EnigmaIOTNodeClass']]],\n  ['togglerelay_983',['toggleRelay',['../classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba',1,'CONTROLLER_CLASS_NAME']]],\n  ['too_5flong_984',['TOO_LONG',['../NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f',1,'NodeList.h']]],\n  ['topic_985',['topic',['../structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8',1,'mqtt_queue_item_t']]],\n  ['turn_5foff_986',['turn_off',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba83ee6b65c9abe8a11ed4d9692b0a5ae7',1,'haTrigger.h']]],\n  ['turn_5fon_987',['turn_on',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1',1,'haTrigger.h']]],\n  ['tx_5fcb_988',['tx_cb',['../classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484',1,'EnigmaIOTGatewayClass::tx_cb()'],['../classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9',1,'EnigmaIOTNodeClass::tx_cb()'],['../classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587',1,'Espnow_halClass::tx_cb()']]],\n  ['txled_989',['txled',['../classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453',1,'EnigmaIOTGatewayClass']]],\n  ['txledontime_990',['txLedOnTime',['../classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243',1,'EnigmaIOTGatewayClass']]],\n  ['tzinfo_991',['TZINFO',['../EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a',1,'EnigmaIoTconfig.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_14.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_14.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_14.js",
    "content": "var searchData=\n[\n  ['undefined_992',['UNDEFINED',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93',1,'haEntity.h']]],\n  ['unencrypted_5fnode_5fdata_993',['UNENCRYPTED_NODE_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148',1,'UNENCRYPTED_NODE_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa84d08335ed131183ff525c55c14f3148',1,'UNENCRYPTED_NODE_DATA():&#160;EnigmaIOTNode.h']]],\n  ['unencrypteddatamessage_994',['unencryptedDataMessage',['../classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc',1,'EnigmaIOTNodeClass']]],\n  ['unixtime_995',['unixtime',['../classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140',1,'EnigmaIOTNodeClass::unixtime()'],['../classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5',1,'TimeManagerClass::unixtime()']]],\n  ['unknown_5ferror_996',['UNKNOWN_ERROR',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83',1,'UNKNOWN_ERROR():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83',1,'UNKNOWN_ERROR():&#160;EnigmaIOTNode.h']]],\n  ['unknown_5freason_997',['UNKNOWN_REASON',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601ab309433c1c035ba010b3aff8756d1637',1,'NodeList.h']]],\n  ['unregistered_998',['UNREGISTERED',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b',1,'NodeList.h']]],\n  ['unregistered_5fnode_999',['UNREGISTERED_NODE',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f',1,'UNREGISTERED_NODE():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a975e594ca3839a0687f31cfbbdb6c90f',1,'UNREGISTERED_NODE():&#160;EnigmaIOTNode.h']]],\n  ['unregisternode_1000',['unregisterNode',['../classNodeList.html#a2892fb1e6830073f3419da35ddad8725',1,'NodeList::unregisterNode(uint16_t nodeId)'],['../classNodeList.html#ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8',1,'NodeList::unregisterNode(const uint8_t *mac)'],['../classNodeList.html#a52e67df2a4891252279101a492453038',1,'NodeList::unregisterNode(Node *node)']]],\n  ['updatepacketsrate_1001',['updatePacketsRate',['../classNode.html#a71c1077723465057bd8cbc90f33c2ead',1,'Node']]],\n  ['use_5fflash_5finstead_5frtc_1002',['USE_FLASH_INSTEAD_RTC',['../EnigmaIoTconfigAdvanced_8h.html#a3adc46611e76e71d60021e6c87d11dcc',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['use_5fserial_1003',['USE_SERIAL',['../EnigmaIOT-Button-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['usecounter_1004',['useCounter',['../classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028',1,'EnigmaIOTGatewayClass::useCounter()'],['../classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf',1,'EnigmaIOTNodeClass::useCounter()']]],\n  ['user_5freset_1005',['USER_RESET',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601ad1616fcb099e2febf3ffc5d115a99441',1,'NodeList.h']]],\n  ['userdata_5fget_1006',['USERDATA_GET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27',1,'NodeList.h']]],\n  ['userdata_5fset_1007',['USERDATA_SET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be',1,'NodeList.h']]],\n  ['usetimesync_1008',['useTimeSync',['../classNode.html#a4bb77cd04f77b857935836284c5e41af',1,'Node']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_15.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_15.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_15.js",
    "content": "var searchData=\n[\n  ['vacuum_1009',['VACUUM',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f',1,'haEntity.h']]],\n  ['verbose_1010',['VERBOSE',['../EnigmaIOTdebug_8h.html#a42f8c497a1968074f38bf5055c650dca',1,'EnigmaIOTdebug.h']]],\n  ['version_1011',['VERSION',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a',1,'NodeList.h']]],\n  ['version_5fans_1012',['VERSION_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_16.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_16.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_16.js",
    "content": "var searchData=\n[\n  ['wait_5ffor_5fdownlink_1013',['WAIT_FOR_DOWNLINK',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f',1,'NodeList.h']]],\n  ['wait_5ffor_5fserver_5fhello_1014',['WAIT_FOR_SERVER_HELLO',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f',1,'NodeList.h']]],\n  ['warn_1015',['WARN',['../EnigmaIOTdebug_8h.html#a271d8f7f52be750e5c744a394ec71344',1,'EnigmaIOTdebug.h']]],\n  ['web_5fapi_5fport_1016',['WEB_API_PORT',['../EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['wifimanager_1017',['wifiManager',['../classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6',1,'EnigmaIOTGatewayClass::wifiManager()'],['../classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78',1,'EnigmaIOTNodeClass::wifiManager()']]],\n  ['wifimanagerexit_1018',['wifiManagerExit',['../EnigmaIOT-Button-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a4d022fc715d83a4b69c587df0201b63d',1,'wifiManagerExit(bool status):&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['wifimanagerstarted_1019',['wifiManagerStarted',['../EnigmaIOT-Button-Controller_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['writeindex_1020',['writeIndex',['../classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa',1,'EnigmaIOTRingBuffer']]],\n  ['wrong_5fclient_5fhello_1021',['WRONG_CLIENT_HELLO',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977ad6e9d0b3e3d479305eb2ce4233f4eca6',1,'WRONG_CLIENT_HELLO():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6ad6e9d0b3e3d479305eb2ce4233f4eca6',1,'WRONG_CLIENT_HELLO():&#160;EnigmaIOTNode.h']]],\n  ['wrong_5fdata_1022',['WRONG_DATA',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff',1,'WRONG_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a4d7f512e433223ce2caa44e787a2ddff',1,'WRONG_DATA():&#160;EnigmaIOTNode.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_17.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_17.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_17.js",
    "content": "var searchData=\n[\n  ['_7econtroller_5fclass_5fname_1023',['~CONTROLLER_CLASS_NAME',['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()'],['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()'],['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()'],['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()'],['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()'],['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()']]],\n  ['_7eenigmaiotringbuffer_1024',['~EnigmaIOTRingBuffer',['../classEnigmaIOTRingBuffer.html#aba3855eadedeaa091aff67f49bdc2255',1,'EnigmaIOTRingBuffer']]],\n  ['_7efilterclass_1025',['~FilterClass',['../classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619',1,'FilterClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_2.js",
    "content": "var searchData=\n[\n  ['basiccontroller_2ecpp_29',['BasicController.cpp',['../BasicController_8cpp.html',1,'']]],\n  ['basiccontroller_2eh_30',['BasicController.h',['../BasicController_8h.html',1,'']]],\n  ['begin_31',['begin',['../classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8',1,'GatewayOutput_dummy::begin()'],['../classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3',1,'GwOutput_MQTT::begin()'],['../classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d',1,'Comms_halClass::begin()'],['../classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0',1,'EnigmaIOTGatewayClass::begin()'],['../classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06',1,'EnigmaIOTNodeClass::begin()'],['../classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50',1,'Espnow_halClass::begin()'],['../classGatewayAPI.html#af7c82da248870648a385a112d298ed78',1,'GatewayAPI::begin()'],['../classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03',1,'GatewayOutput_generic::begin()']]],\n  ['binary_5fsensor_32',['BINARY_SENSOR',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3',1,'haEntity.h']]],\n  ['blue_5fled_33',['BLUE_LED',['../EnigmaIOT-Button-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;enigmaiot_node_nonsleepy.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['boot_5fflag_5ftimeout_34',['BOOT_FLAG_TIMEOUT',['../EnigmaIOT-Button-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['bootrelaystatus_5ft_35',['bootRelayStatus_t',['../SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a',1,'SmartSwitchController.h']]],\n  ['bootstatekey_36',['bootStateKey',['../SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb',1,'SmartSwitchController.cpp']]],\n  ['bootstatus_37',['bootStatus',['../structsmartSwitchControllerHw__t.html#a460a8b71cd14d353299b85f46a9cf9f6',1,'smartSwitchControllerHw_t']]],\n  ['bootstatuslistparam_38',['bootStatusListParam',['../classCONTROLLER__CLASS__NAME.html#a652db9c565625d205fa589b5b7922431',1,'CONTROLLER_CLASS_NAME']]],\n  ['bootstatusparam_39',['bootStatusParam',['../classCONTROLLER__CLASS__NAME.html#ab2947853c9c4746ab59e067f00359bff',1,'CONTROLLER_CLASS_NAME']]],\n  ['brcast_5fkey_40',['BRCAST_KEY',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6',1,'NodeList.h']]],\n  ['broadcast_5faddress_41',['BROADCAST_ADDRESS',['../EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['broadcast_5fkey_5frequest_42',['BROADCAST_KEY_REQUEST',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a45ed732c2c1b8f670d6730e6f7a684b5',1,'BROADCAST_KEY_REQUEST():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa45ed732c2c1b8f670d6730e6f7a684b5',1,'BROADCAST_KEY_REQUEST():&#160;EnigmaIOTNode.h']]],\n  ['broadcast_5fkey_5fresponse_43',['BROADCAST_KEY_RESPONSE',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838',1,'BROADCAST_KEY_RESPONSE():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faebca9b745a0bd1dedae14258e54e1838',1,'BROADCAST_KEY_RESPONSE():&#160;EnigmaIOTNode.h']]],\n  ['broadcast_5fnone_5fname_44',['BROADCAST_NONE_NAME',['../EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['broadcastenabled_45',['broadcastEnabled',['../classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed',1,'Node']]],\n  ['broadcastisenabled_46',['broadcastIsEnabled',['../classEnigmaIOTNodeClass.html#a742b9e627fee356913b069c64499cd5f',1,'EnigmaIOTNodeClass::broadcastIsEnabled()'],['../classNode.html#ae6768d968b8f72fb12001fa3895a4670',1,'Node::broadcastIsEnabled()']]],\n  ['broadcastkey_47',['broadcastKey',['../structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e',1,'rtcmem_data_t']]],\n  ['broadcastkeyrequested_48',['broadcastKeyRequested',['../structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63',1,'rtcmem_data_t::broadcastKeyRequested()'],['../classNode.html#aebc89c4269923800190e3c340f45d550',1,'Node::broadcastKeyRequested()']]],\n  ['broadcastkeyvalid_49',['broadcastKeyValid',['../structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67',1,'rtcmem_data_t']]],\n  ['broadcastnode_50',['broadcastNode',['../classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3',1,'NodeList']]],\n  ['bs_5fbattery_51',['bs_battery',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27',1,'haEntity.h']]],\n  ['bs_5fbattery_5fcharging_52',['bs_battery_charging',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711',1,'haEntity.h']]],\n  ['bs_5fcold_53',['bs_cold',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae',1,'haEntity.h']]],\n  ['bs_5fconnectivity_54',['bs_connectivity',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074',1,'haEntity.h']]],\n  ['bs_5fdoor_55',['bs_door',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe',1,'haEntity.h']]],\n  ['bs_5fgarage_5fdoor_56',['bs_garage_door',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a',1,'haEntity.h']]],\n  ['bs_5fgas_57',['bs_gas',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6',1,'haEntity.h']]],\n  ['bs_5fheat_58',['bs_heat',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd',1,'haEntity.h']]],\n  ['bs_5flight_59',['bs_light',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99',1,'haEntity.h']]],\n  ['bs_5flock_60',['bs_lock',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e',1,'haEntity.h']]],\n  ['bs_5fmoisture_61',['bs_moisture',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c',1,'haEntity.h']]],\n  ['bs_5fmotion_62',['bs_motion',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609',1,'haEntity.h']]],\n  ['bs_5fmoving_63',['bs_moving',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d',1,'haEntity.h']]],\n  ['bs_5fnone_64',['bs_none',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8',1,'haEntity.h']]],\n  ['bs_5foccupancy_65',['bs_occupancy',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047',1,'haEntity.h']]],\n  ['bs_5fopening_66',['bs_opening',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7',1,'haEntity.h']]],\n  ['bs_5fplug_67',['bs_plug',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5',1,'haEntity.h']]],\n  ['bs_5fpower_68',['bs_power',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690',1,'haEntity.h']]],\n  ['bs_5fpresence_69',['bs_presence',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114',1,'haEntity.h']]],\n  ['bs_5fproblem_70',['bs_problem',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5',1,'haEntity.h']]],\n  ['bs_5fsafety_71',['bs_safety',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17',1,'haEntity.h']]],\n  ['bs_5fsmoke_72',['bs_smoke',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c',1,'haEntity.h']]],\n  ['bs_5fsound_73',['bs_sound',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf',1,'haEntity.h']]],\n  ['bs_5fvibration_74',['bs_vibration',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807',1,'haEntity.h']]],\n  ['bs_5fwindow_75',['bs_window',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a',1,'haEntity.h']]],\n  ['bson_76',['BSON',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da311c13f8df1217b0cd4d5537cb91311f',1,'BSON():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba311c13f8df1217b0cd4d5537cb91311f',1,'BSON():&#160;EnigmaIOTNode.h']]],\n  ['buffer_77',['buffer',['../classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359',1,'EnigmaIOTRingBuffer']]],\n  ['buildgetname_78',['buildGetName',['../EnigmaIOTGateway_8cpp.html#aae12028b7a1857ceb320c435832b09b5',1,'EnigmaIOTGateway.cpp']]],\n  ['buildgetrssi_79',['buildGetRSSI',['../EnigmaIOTGateway_8cpp.html#a20d09b7746e96e3f2706652522c121fa',1,'EnigmaIOTGateway.cpp']]],\n  ['buildgetsleep_80',['buildGetSleep',['../EnigmaIOTGateway_8cpp.html#a90e4277194db83896803d38387ec0369',1,'EnigmaIOTGateway.cpp']]],\n  ['buildgetversion_81',['buildGetVersion',['../EnigmaIOTGateway_8cpp.html#a7bb1ee00fcd42cf937a7f6173e2a8647',1,'EnigmaIOTGateway.cpp']]],\n  ['buildgwinfo_82',['buildGwInfo',['../classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f',1,'GatewayAPI']]],\n  ['buildhadiscovery_83',['buildHADiscovery',['../classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915',1,'CONTROLLER_CLASS_NAME::buildHADiscovery()'],['../classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915',1,'CONTROLLER_CLASS_NAME::buildHADiscovery()'],['../classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915',1,'CONTROLLER_CLASS_NAME::buildHADiscovery()'],['../classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915',1,'CONTROLLER_CLASS_NAME::buildHADiscovery()']]],\n  ['buildhalinkdiscovery_84',['buildHALinkDiscovery',['../classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8',1,'CONTROLLER_CLASS_NAME']]],\n  ['buildhaswitchdiscovery_85',['buildHASwitchDiscovery',['../classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1',1,'CONTROLLER_CLASS_NAME']]],\n  ['buildhatriggerdiscovery_86',['buildHATriggerDiscovery',['../classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071',1,'CONTROLLER_CLASS_NAME']]],\n  ['buildotamsg_87',['buildOtaMsg',['../EnigmaIOTGateway_8cpp.html#acc743eebc6ec1a9480db25fa0f59332a',1,'EnigmaIOTGateway.cpp']]],\n  ['buildrestartnode_88',['buildRestartNode',['../EnigmaIOTGateway_8cpp.html#a000e9c08be2b294e884d9a76d447c7ca',1,'EnigmaIOTGateway.cpp']]],\n  ['buildsendbrcastkey_89',['buildSendBrcastKey',['../EnigmaIOTGateway_8cpp.html#aa713b61843ba50cdd12bba2d34d1065e',1,'EnigmaIOTGateway.cpp']]],\n  ['buildsetidentify_90',['buildSetIdentify',['../EnigmaIOTGateway_8cpp.html#ada98ad7b4543b42a5d57f458528bf2d6',1,'EnigmaIOTGateway.cpp']]],\n  ['buildsetname_91',['buildSetName',['../EnigmaIOTGateway_8cpp.html#aa4eb5b74c01643d49f6b82908e85cc32',1,'EnigmaIOTGateway.cpp']]],\n  ['buildsetresetconfig_92',['buildSetResetConfig',['../EnigmaIOTGateway_8cpp.html#a322bbbaa773a92c19c2ec8daee290bc5',1,'EnigmaIOTGateway.cpp']]],\n  ['buildsetsleep_93',['buildSetSleep',['../EnigmaIOTGateway_8cpp.html#aab70cbb2f23008e90d70b1d744d3e71c',1,'EnigmaIOTGateway.cpp']]],\n  ['builtin_5fled_94',['BUILTIN_LED',['../EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0',1,'EnigmaIOTGatewayDummy.cpp']]],\n  ['button_5f1_95',['button_1',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7',1,'haTrigger.h']]],\n  ['button_5f2_96',['button_2',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9482c259cff58c7784eed9f35f927400',1,'haTrigger.h']]],\n  ['button_5f3_97',['button_3',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba791944b6979069dd5f7d962556ddc604',1,'haTrigger.h']]],\n  ['button_5f4_98',['button_4',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9db0c27b13d686faf831f1515a9a5340',1,'haTrigger.h']]],\n  ['button_5f5_99',['button_5',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba45efbed920db6ce550810ced085e9b18',1,'haTrigger.h']]],\n  ['button_5f6_100',['button_6',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8',1,'haTrigger.h']]],\n  ['button_5fdouble_5fpress_101',['button_double_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca9cfbd94dabbbdcb25bdff5a9fbcead58',1,'haTrigger.h']]],\n  ['button_5flong_5fpress_102',['button_long_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cadc63942310d712596e55a8f04680fa60',1,'haTrigger.h']]],\n  ['button_5flong_5frelease_103',['button_long_release',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca762074f9733bc47a3bc38344c36d1a29',1,'haTrigger.h']]],\n  ['button_5fpin_104',['BUTTON_PIN',['../ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da',1,'ButtonController.h']]],\n  ['button_5fquadruple_5fpress_105',['button_quadruple_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca000c3a771115a30a1c497a9cb8a19014',1,'haTrigger.h']]],\n  ['button_5fquintuple_5fpress_106',['button_quintuple_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6',1,'haTrigger.h']]],\n  ['button_5fshort_5fpress_107',['button_short_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2',1,'haTrigger.h']]],\n  ['button_5fshort_5frelease_108',['button_short_release',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca6ba5b8432af7d558ba016c02ee898712',1,'haTrigger.h']]],\n  ['button_5ftriple_5fpress_109',['button_triple_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae310001a87f47b0d5398c055f0dac403',1,'haTrigger.h']]],\n  ['buttoncontroller_2ecpp_110',['ButtonController.cpp',['../ButtonController_8cpp.html',1,'']]],\n  ['buttoncontroller_2eh_111',['ButtonController.h',['../ButtonController_8h.html',1,'']]],\n  ['buttonkey_112',['buttonKey',['../SmartSwitchController_8cpp.html#ac6ac941d05242bf7013c414c28fe51f9',1,'SmartSwitchController.cpp']]],\n  ['buttonpin_113',['buttonPin',['../structsmartSwitchControllerHw__t.html#a52575acecb3433d8a42b5eae1d036484',1,'smartSwitchControllerHw_t']]],\n  ['buttonpinparam_114',['buttonPinParam',['../classCONTROLLER__CLASS__NAME.html#af137736da8e1cb6c92aba6972807704a',1,'CONTROLLER_CLASS_NAME']]],\n  ['buttonpresssent_115',['buttonPressSent',['../classCONTROLLER__CLASS__NAME.html#ab9f55dca7e50e7bbccd5b01d77fc0f05',1,'CONTROLLER_CLASS_NAME']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_3.js",
    "content": "var searchData=\n[\n  ['calculatecrc32_116',['calculateCRC32',['../helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3',1,'calculateCRC32(const uint8_t *data, size_t length):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a81e44efba216f1a0a981219616eeb8f3',1,'calculateCRC32(const uint8_t *data, size_t length):&#160;helperFunctions.cpp']]],\n  ['camera_117',['CAMERA',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956',1,'haEntity.h']]],\n  ['capacity_118',['capacity',['../classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe',1,'HAEntity']]],\n  ['cayennelpp_119',['CAYENNELPP',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4',1,'CAYENNELPP():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4',1,'CAYENNELPP():&#160;EnigmaIOTNode.h']]],\n  ['cbor_120',['CBOR',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da56f7b9e0a4250b6a5c73811ae092e686',1,'CBOR():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba56f7b9e0a4250b6a5c73811ae092e686',1,'CBOR():&#160;EnigmaIOTNode.h']]],\n  ['channel_121',['channel',['../classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e',1,'Comms_halClass::channel()'],['../structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69',1,'gateway_config_t::channel()'],['../structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4',1,'rtcmem_data_t::channel()']]],\n  ['check_5fcomm_5ferrors_122',['CHECK_COMM_ERRORS',['../EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['checkcrc_123',['checkCRC',['../classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8',1,'EnigmaIOTNodeClass']]],\n  ['checkmsgtype_124',['checkMsgType',['../GwOutput__mqtt_8cpp.html#a57969f4236bd72eca4fa83155a025085',1,'GwOutput_mqtt.cpp']]],\n  ['checknodename_125',['checkNodeName',['../classNodeList.html#a6702f6b65634da0500f5e99ccf017178',1,'NodeList']]],\n  ['checkresetbutton_126',['checkResetButton',['../classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53',1,'EnigmaIOTNodeClass']]],\n  ['chmsg_5flen_127',['CHMSG_LEN',['../EnigmaIOTGateway_8cpp.html#a2bd3dd6873079bda9c22994760e817dc',1,'CHMSG_LEN():&#160;EnigmaIOTGateway.cpp'],['../EnigmaIOTNode_8cpp.html#a2bd3dd6873079bda9c22994760e817dc',1,'CHMSG_LEN():&#160;EnigmaIOTNode.cpp']]],\n  ['cipher_128',['cipher',['../cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758',1,'cryptModule.cpp']]],\n  ['clear_129',['clear',['../classFilterClass.html#a29933bc3e2094170afd380cee3763d95',1,'FilterClass']]],\n  ['clearflash_130',['clearFlash',['../classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09',1,'EnigmaIOTNodeClass']]],\n  ['clearrtc_131',['clearRTC',['../classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f',1,'EnigmaIOTNodeClass']]],\n  ['clearrtcdata_132',['clearRtcData',['../EnigmaIOTNode_8cpp.html#a1b66b36dbb3d32b25e7f4b2cc4e0accb',1,'EnigmaIOTNode.cpp']]],\n  ['client_5fhello_133',['CLIENT_HELLO',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca',1,'CLIENT_HELLO():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa0c8da6c451065bed79ea70684e6f3fca',1,'CLIENT_HELLO():&#160;EnigmaIOTNode.h']]],\n  ['clienthello_134',['clientHello',['../classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c',1,'EnigmaIOTNodeClass']]],\n  ['clientid_135',['clientId',['../classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132',1,'GatewayOutput_generic']]],\n  ['clock_136',['clock',['../classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99',1,'EnigmaIOTNodeClass::clock()'],['../classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506',1,'TimeManagerClass::clock()']]],\n  ['clock_5frequest_137',['CLOCK_REQUEST',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735',1,'CLOCK_REQUEST():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa50ab02cc83b80322e63edd2e2779a735',1,'CLOCK_REQUEST():&#160;EnigmaIOTNode.h']]],\n  ['clock_5fresponse_138',['CLOCK_RESPONSE',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0',1,'CLOCK_RESPONSE():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa597b515e2c48496c513e6d502a7528c0',1,'CLOCK_RESPONSE():&#160;EnigmaIOTNode.h']]],\n  ['clock_5fus_139',['clock_us',['../classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0',1,'TimeManagerClass']]],\n  ['clockrequest_140',['clockRequest',['../classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b',1,'EnigmaIOTNodeClass']]],\n  ['clockresponse_141',['clockResponse',['../classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9',1,'EnigmaIOTGatewayClass']]],\n  ['clocksyncenabled_142',['clockSyncEnabled',['../classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795',1,'EnigmaIOTNodeClass']]],\n  ['comm_143',['comm',['../classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254',1,'EnigmaIOTGatewayClass::comm()'],['../classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d',1,'EnigmaIOTNodeClass::comm()']]],\n  ['comm_5ferrors_5fbefore_5fscan_144',['COMM_ERRORS_BEFORE_SCAN',['../EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5',1,'EnigmaIoTconfig.h']]],\n  ['comm_5fgateway_145',['COMM_GATEWAY',['../Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0',1,'Comms_hal.h']]],\n  ['comm_5fnode_146',['COMM_NODE',['../Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5',1,'Comms_hal.h']]],\n  ['commandkey_147',['commandKey',['../LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9',1,'commandKey():&#160;LedController.cpp'],['../SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9',1,'commandKey():&#160;SmartSwitchController.cpp']]],\n  ['commerrors_148',['commErrors',['../structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9',1,'rtcmem_data_t']]],\n  ['comms_5fhal_2eh_149',['Comms_hal.h',['../Comms__hal_8h.html',1,'']]],\n  ['comms_5fhal_5faddr_5flen_150',['COMMS_HAL_ADDR_LEN',['../classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b',1,'Comms_halClass::COMMS_HAL_ADDR_LEN()'],['../classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72',1,'Espnow_halClass::COMMS_HAL_ADDR_LEN()']]],\n  ['comms_5fhal_5fmax_5fmessage_5flength_151',['COMMS_HAL_MAX_MESSAGE_LENGTH',['../classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316',1,'Comms_halClass::COMMS_HAL_MAX_MESSAGE_LENGTH()'],['../classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635',1,'Espnow_halClass::COMMS_HAL_MAX_MESSAGE_LENGTH()']]],\n  ['comms_5fhal_5frcvd_5fdata_152',['comms_hal_rcvd_data',['../Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0',1,'Comms_hal.h']]],\n  ['comms_5fhal_5fsent_5fdata_153',['comms_hal_sent_data',['../Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b',1,'Comms_hal.h']]],\n  ['comms_5fhalclass_154',['Comms_halClass',['../classComms__halClass.html',1,'Comms_halClass'],['../classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac',1,'Comms_halClass::Comms_halClass()']]],\n  ['comms_5fqueue_5fitem_5ft_155',['comms_queue_item_t',['../structcomms__queue__item__t.html',1,'']]],\n  ['comms_5fqueue_5fsize_156',['COMMS_QUEUE_SIZE',['../EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['config_157',['config',['../classCONTROLLER__CLASS__NAME.html#a1ff33c36324249c1791357337ed932c6',1,'CONTROLLER_CLASS_NAME']]],\n  ['config_5ffile_158',['CONFIG_FILE',['../ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;ButtonController.cpp'],['../DashButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;DashButtonController.cpp'],['../BasicController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;BasicController.cpp'],['../LedController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;LedController.cpp'],['../ds18b20Controller_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;ds18b20Controller.cpp'],['../SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;SmartSwitchController.cpp'],['../GwOutput__mqtt_8h.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;GwOutput_mqtt.h'],['../EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08',1,'CONFIG_FILE():&#160;EnigmaIOTGateway.cpp'],['../EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08',1,'CONFIG_FILE():&#160;EnigmaIOTNode.cpp']]],\n  ['config_5freset_159',['CONFIG_RESET',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f',1,'NodeList.h']]],\n  ['configcleared_160',['configCleared',['../classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6',1,'EnigmaIOTNodeClass']]],\n  ['configmanagerexit_161',['configManagerExit',['../classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status) override'],['../classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status)'],['../classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status)'],['../classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status)'],['../classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status)'],['../classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status)'],['../classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7',1,'GatewayOutput_dummy::configManagerExit()'],['../classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559',1,'GwOutput_MQTT::configManagerExit()'],['../classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed',1,'EnigmaIOTjsonController::configManagerExit()'],['../classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f',1,'GatewayOutput_generic::configManagerExit()']]],\n  ['configmanagerstart_162',['configManagerStart',['../classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3',1,'CONTROLLER_CLASS_NAME::configManagerStart() override'],['../classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14',1,'CONTROLLER_CLASS_NAME::configManagerStart()'],['../classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14',1,'CONTROLLER_CLASS_NAME::configManagerStart()'],['../classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14',1,'CONTROLLER_CLASS_NAME::configManagerStart()'],['../classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14',1,'CONTROLLER_CLASS_NAME::configManagerStart()'],['../classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14',1,'CONTROLLER_CLASS_NAME::configManagerStart()'],['../classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d',1,'GatewayOutput_dummy::configManagerStart()'],['../classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e',1,'GwOutput_MQTT::configManagerStart()'],['../classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f',1,'EnigmaIOTjsonController::configManagerStart()'],['../classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6',1,'GatewayOutput_generic::configManagerStart()']]],\n  ['configwifimanager_163',['configWiFiManager',['../classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd',1,'EnigmaIOTGatewayClass::configWiFiManager()'],['../classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42',1,'EnigmaIOTNodeClass::configWiFiManager()']]],\n  ['confirmparam_164',['confirmParam',['../GatewayAPI_8cpp.html#a3fab167b11bfa83a179e904d89a38d95',1,'GatewayAPI.cpp']]],\n  ['connect_5fto_5fwifi_5fap_165',['CONNECT_TO_WIFI_AP',['../EnigmaIoTconfig_8h.html#a3be8ceb481b00916205f536e6028e2f5',1,'EnigmaIoTconfig.h']]],\n  ['connecteventhandler_166',['connectEventHandler',['../EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;enigmaiot_node_nonsleepy.cpp']]],\n  ['connectinform_167',['connectInform',['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d',1,'EnigmaIOTjsonController::connectInform()']]],\n  ['connectionled_168',['connectionLed',['../EnigmaIOTGatewayDummy_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0',1,'connectionLed():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0',1,'connectionLed():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['connectionledflashing_169',['connectionLedFlashing',['../EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80',1,'connectionLedFlashing():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17',1,'connectionLedFlashing():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['control_5fdata_170',['CONTROL_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de',1,'CONTROL_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa6b9b36c3722a1256ac7fa097bf10f4de',1,'CONTROL_DATA():&#160;EnigmaIOTNode.h']]],\n  ['control_5fmessage_5ftype_171',['control_message_type',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4',1,'NodeList.h']]],\n  ['control_5fmessage_5ftype_5ft_172',['control_message_type_t',['../NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7',1,'NodeList.h']]],\n  ['control_5ftype_173',['CONTROL_TYPE',['../EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96',1,'EnigmaIOTNode.h']]],\n  ['controller_174',['controller',['../EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['controller_5fclass_5fname_175',['CONTROLLER_CLASS_NAME',['../classCONTROLLER__CLASS__NAME.html',1,'CONTROLLER_CLASS_NAME'],['../ButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;ButtonController.h'],['../DashButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;DashButtonController.h'],['../BasicController_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;BasicController.h'],['../LedController_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;LedController.h'],['../ds18b20Controller_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;ds18b20Controller.h'],['../SmartSwitchController_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;SmartSwitchController.h']]],\n  ['controller_5fname_176',['CONTROLLER_NAME',['../ButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;ButtonController.h'],['../DashButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;DashButtonController.h'],['../BasicController_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;BasicController.h'],['../LedController_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;LedController.h'],['../ds18b20Controller_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;ds18b20Controller.h'],['../SmartSwitchController_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;SmartSwitchController.h']]],\n  ['countactivenodes_177',['countActiveNodes',['../classNodeList.html#abb4895c5b9ae6b041c9102178de837c4',1,'NodeList']]],\n  ['cover_178',['COVER',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989',1,'haEntity.h']]],\n  ['cover_5fawning_179',['cover_awning',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c',1,'haEntity.h']]],\n  ['cover_5fblind_180',['cover_blind',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e',1,'haEntity.h']]],\n  ['cover_5fcurtain_181',['cover_curtain',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208',1,'haEntity.h']]],\n  ['cover_5fdamper_182',['cover_damper',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f',1,'haEntity.h']]],\n  ['cover_5fdoor_183',['cover_door',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a',1,'haEntity.h']]],\n  ['cover_5fgarage_184',['cover_garage',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1',1,'haEntity.h']]],\n  ['cover_5fgate_185',['cover_gate',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770',1,'haEntity.h']]],\n  ['cover_5fnone_186',['cover_none',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e',1,'haEntity.h']]],\n  ['cover_5fshade_187',['cover_shade',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d',1,'haEntity.h']]],\n  ['cover_5fshutter_188',['cover_shutter',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3',1,'haEntity.h']]],\n  ['cover_5fwindow_189',['cover_window',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4',1,'haEntity.h']]],\n  ['crc32_190',['crc32',['../structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a',1,'rtcmem_data_t']]],\n  ['crc_5flength_191',['CRC_LENGTH',['../cryptModule_8h.html#ab705865bb866bc5f070bbde9650eaa2a',1,'cryptModule.h']]],\n  ['cryptmodule_192',['CryptModule',['../classCryptModule.html',1,'']]],\n  ['cryptmodule_2ecpp_193',['cryptModule.cpp',['../cryptModule_8cpp.html',1,'']]],\n  ['cryptmodule_2eh_194',['cryptModule.h',['../cryptModule_8h.html',1,'']]],\n  ['cryptmodule_5fdebug_5ftag_195',['CRYPTMODULE_DEBUG_TAG',['../cryptModule_8h.html#a589540d306f62e7810a03bcfa28fbeef',1,'cryptModule.h']]],\n  ['crypto_196',['Crypto',['../cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22',1,'Crypto():&#160;cryptModule.cpp'],['../cryptModule_8h.html#a2f63b7a310b37c1127e7b8cfcbb5eb22',1,'Crypto():&#160;cryptModule.cpp']]],\n  ['cyclestartedtime_197',['cycleStartedTime',['../classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9',1,'EnigmaIOTNodeClass']]],\n  ['cypher_5ftype_198',['CYPHER_TYPE',['../EnigmaIoTconfigAdvanced_8h.html#a60424869b9d0955e8745158aadcd95b0',1,'EnigmaIoTconfigAdvanced.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_4.js",
    "content": "var searchData=\n[\n  ['dashbuttoncontroller_2ecpp_199',['DashButtonController.cpp',['../DashButtonController_8cpp.html',1,'']]],\n  ['dashbuttoncontroller_2eh_200',['DashButtonController.h',['../DashButtonController_8h.html',1,'']]],\n  ['data_201',['data',['../structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f',1,'msg_queue_item_t::data()'],['../GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b',1,'data():&#160;GwOutput_generic.h']]],\n  ['data_5ftype_202',['DATA_TYPE',['../EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6',1,'EnigmaIOTNode.h']]],\n  ['datamessage_203',['dataMessage',['../classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206',1,'EnigmaIOTNodeClass']]],\n  ['datamessageencrypt_204',['dataMessageEncrypt',['../classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735',1,'EnigmaIOTNodeClass']]],\n  ['datamessagesendencoding_205',['dataMessageSendEncoding',['../classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4',1,'EnigmaIOTNodeClass']]],\n  ['datamessagesendpending_206',['dataMessageSendPending',['../classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe',1,'EnigmaIOTNodeClass']]],\n  ['datamessagesent_207',['dataMessageSent',['../classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4',1,'EnigmaIOTNodeClass']]],\n  ['datamessagesentlength_208',['dataMessageSentLength',['../classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775',1,'EnigmaIOTNodeClass']]],\n  ['datamessagetype_5ft_209',['dataMessageType_t',['../EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2',1,'EnigmaIOTNode.h']]],\n  ['datarcvd_210',['dataRcvd',['../classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83',1,'Comms_halClass']]],\n  ['dbg_211',['DBG',['../EnigmaIOTdebug_8h.html#a49606be7356624568932ec81c0d429f4',1,'EnigmaIOTdebug.h']]],\n  ['debug_5fesp_5fport_212',['DEBUG_ESP_PORT',['../EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7',1,'EnigmaIoTconfig.h']]],\n  ['debug_5flevel_213',['DEBUG_LEVEL',['../EnigmaIoTconfig_8h.html#ac2d33ccaf63f5d5b66552b95426c0137',1,'EnigmaIoTconfig.h']]],\n  ['decryptbuffer_214',['decryptBuffer',['../classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6',1,'CryptModule']]],\n  ['default_5fbutton_5fpin_215',['DEFAULT_BUTTON_PIN',['../SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6',1,'SmartSwitchController.h']]],\n  ['default_5fchannel_216',['DEFAULT_CHANNEL',['../EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf',1,'EnigmaIoTconfig.h']]],\n  ['default_5frelay_5fpin_217',['DEFAULT_RELAY_PIN',['../SmartSwitchController_8h.html#a77b012ee4a034b57e61216c2f25b92bf',1,'SmartSwitchController.h']]],\n  ['default_5fsleep_5ftime_218',['DEFAULT_SLEEP_TIME',['../EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f',1,'EnigmaIoTconfig.h']]],\n  ['defaultconfig_219',['defaultConfig',['../classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659',1,'CONTROLLER_CLASS_NAME']]],\n  ['deletenode_220',['deleteNode',['../classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9',1,'GatewayAPI']]],\n  ['device_5ftracker_221',['DEVICE_TRACKER',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c',1,'haEntity.h']]],\n  ['device_5ftrigger_222',['DEVICE_TRIGGER',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e',1,'haEntity.h']]],\n  ['deviceclassstr_223',['deviceClassStr',['../classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc',1,'HABinarySensor::deviceClassStr()'],['../classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef',1,'HACover::deviceClassStr()'],['../classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40',1,'HASensor::deviceClassStr()']]],\n  ['devicetype_224',['deviceType',['../classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5',1,'HAEntity']]],\n  ['devicetypestr_225',['deviceTypeStr',['../classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f',1,'HAEntity']]],\n  ['disconnect_5fon_5fdata_5ferror_226',['DISCONNECT_ON_DATA_ERROR',['../EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['disconnecteventhandler_227',['disconnectEventHandler',['../EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;enigmaiot_node_nonsleepy.cpp']]],\n  ['disconnectinform_228',['disconnectInform',['../classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0',1,'EnigmaIOTjsonController']]],\n  ['divide_229',['divide',['../classFilterClass.html#a99497784c6f8a22e89c19200132797b9',1,'FilterClass']]],\n  ['dns_230',['dns',['../classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c',1,'EnigmaIOTGatewayClass']]],\n  ['doresetconfig_231',['doResetConfig',['../classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda',1,'EnigmaIOTGatewayClass']]],\n  ['dorestart_232',['doRestart',['../EnigmaIOTGatewayMQTT_8cpp.html#a4e0b35257234db80b4d6771ec42153a3',1,'EnigmaIOTGatewayMQTT.cpp']]],\n  ['dosave_233',['doSave',['../classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508',1,'EnigmaIOTGatewayClass']]],\n  ['downlink_5fwait_5ftime_234',['DOWNLINK_WAIT_TIME',['../EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e',1,'EnigmaIoTconfig.h']]],\n  ['downlinkcb_235',['downlinkCb',['../classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de',1,'GatewayOutput_generic']]],\n  ['downstream_5fbrcast_5fctrl_5fdata_236',['DOWNSTREAM_BRCAST_CTRL_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c',1,'DOWNSTREAM_BRCAST_CTRL_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fade8205c810264376dfc45dc2b72e116c',1,'DOWNSTREAM_BRCAST_CTRL_DATA():&#160;EnigmaIOTNode.h']]],\n  ['downstream_5fbrcast_5fdata_5fget_237',['DOWNSTREAM_BRCAST_DATA_GET',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422',1,'DOWNSTREAM_BRCAST_DATA_GET():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae5aa3bb71dda4aa9ba38ca2a5eeba422',1,'DOWNSTREAM_BRCAST_DATA_GET():&#160;EnigmaIOTNode.h']]],\n  ['downstream_5fbrcast_5fdata_5fset_238',['DOWNSTREAM_BRCAST_DATA_SET',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab',1,'DOWNSTREAM_BRCAST_DATA_SET():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa3b0c314d51c09e5960e07704bb05f4ab',1,'DOWNSTREAM_BRCAST_DATA_SET():&#160;EnigmaIOTNode.h']]],\n  ['downstream_5fctrl_5fdata_239',['DOWNSTREAM_CTRL_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc',1,'DOWNSTREAM_CTRL_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fad2c18ef749d0eca5f53ecfb0fb0af0bc',1,'DOWNSTREAM_CTRL_DATA():&#160;EnigmaIOTNode.h']]],\n  ['downstream_5fdata_5fget_240',['DOWNSTREAM_DATA_GET',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03',1,'DOWNSTREAM_DATA_GET():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fac8a74f458aed6681bf199f1ce2f9eb03',1,'DOWNSTREAM_DATA_GET():&#160;EnigmaIOTNode.h']]],\n  ['downstream_5fdata_5fset_241',['DOWNSTREAM_DATA_SET',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d',1,'DOWNSTREAM_DATA_SET():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa21ca6763c97e4804ee6957d039443d2d',1,'DOWNSTREAM_DATA_SET():&#160;EnigmaIOTNode.h']]],\n  ['downstreamdatamessage_242',['downstreamDataMessage',['../classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165',1,'EnigmaIOTGatewayClass']]],\n  ['ds18b20controller_2ecpp_243',['ds18b20Controller.cpp',['../ds18b20Controller_8cpp.html',1,'']]],\n  ['ds18b20controller_2eh_244',['ds18b20Controller.h',['../ds18b20Controller_8h.html',1,'']]],\n  ['dstaddress_245',['dstAddress',['../structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f',1,'comms_queue_item_t']]],\n  ['dstrootca_2eh_246',['dstrootca.h',['../dstrootca_8h.html',1,'']]],\n  ['dstrootca_5fh_247',['DSTROOTCA_H',['../dstrootca_8h.html#ac124c2449b0ec4b04fe4bc4e61632e33',1,'dstrootca.h']]],\n  ['dumprtcdata_248',['dumpRtcData',['../EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c',1,'EnigmaIOTNode.cpp']]],\n  ['design_249',['Design',['../md_docs_technical-background.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_5.js",
    "content": "var searchData=\n[\n  ['empty_250',['empty',['../classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5',1,'EnigmaIOTRingBuffer']]],\n  ['empty_5fname_251',['EMPTY_NAME',['../NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9',1,'NodeList.h']]],\n  ['enable_5frest_5fapi_252',['ENABLE_REST_API',['../EnigmaIoTconfigAdvanced_8h.html#a7961bef0ea455a0913f7bf894b58eac4',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['enable_5fstatus_5fmessages_253',['ENABLE_STATUS_MESSAGES',['../EnigmaIoTconfig_8h.html#ace3e2bfbccf2b3dafab4775343471413',1,'EnigmaIoTconfig.h']]],\n  ['enable_5fweb_5fapi_254',['ENABLE_WEB_API',['../EnigmaIoTconfig_8h.html#ad736e65e20072f63bc4d21d745949962',1,'EnigmaIoTconfig.h']]],\n  ['enablebroadcast_255',['enableBroadcast',['../classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82',1,'EnigmaIOTNodeClass::enableBroadcast()'],['../classNode.html#a2c6ecfa165b71155d3d25331ca56d98e',1,'Node::enableBroadcast()']]],\n  ['enableclocksync_256',['enableClockSync',['../classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4',1,'EnigmaIOTNodeClass']]],\n  ['enabletransmit_257',['enableTransmit',['../classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a',1,'Comms_halClass::enableTransmit()'],['../classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f',1,'Espnow_halClass::enableTransmit()']]],\n  ['encryptbuffer_258',['encryptBuffer',['../classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc',1,'CryptModule']]],\n  ['enigmaiot_259',['ENIGMAIOT',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175',1,'EnigmaIOTGateway.h']]],\n  ['enigmaiot_2dbutton_2dcontroller_2ecpp_260',['EnigmaIOT-Button-Controller.cpp',['../EnigmaIOT-Button-Controller_8cpp.html',1,'']]],\n  ['enigmaiot_2ddashbutton_2dcontroller_2ecpp_261',['EnigmaIOT-DashButton-Controller.cpp',['../EnigmaIOT-DashButton-Controller_8cpp.html',1,'']]],\n  ['enigmaiot_2djson_2dcontroller_2dtemplate_2ecpp_262',['EnigmaIOT-Json-Controller-Template.cpp',['../EnigmaIOT-Json-Controller-Template_8cpp.html',1,'']]],\n  ['enigmaiot_2dled_2dcontroller_2ecpp_263',['EnigmaIOT-Led-Controller.cpp',['../EnigmaIOT-Led-Controller_8cpp.html',1,'']]],\n  ['enigmaiot_2dsensor_2dcontroller_2ecpp_264',['EnigmaIOT-Sensor-Controller.cpp',['../EnigmaIOT-Sensor-Controller_8cpp.html',1,'']]],\n  ['enigmaiot_2dsmartswitch_2dcontroller_2ecpp_265',['EnigmaIOT-SmartSwitch-Controller.cpp',['../EnigmaIOT-SmartSwitch-Controller_8cpp.html',1,'']]],\n  ['enigmaiot_5faddr_5flen_266',['ENIGMAIOT_ADDR_LEN',['../EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['enigmaiot_5fled_5fflasher_2ecpp_267',['enigmaiot_led_flasher.cpp',['../enigmaiot__led__flasher_8cpp.html',1,'']]],\n  ['enigmaiot_5fnode_2ecpp_268',['enigmaiot_node.cpp',['../enigmaiot__node_8cpp.html',1,'']]],\n  ['enigmaiot_5fnode_5fmsgpack_2ecpp_269',['enigmaiot_node_msgpack.cpp',['../enigmaiot__node__msgpack_8cpp.html',1,'']]],\n  ['enigmaiot_5fnode_5fnonsleepy_2ecpp_270',['enigmaiot_node_nonsleepy.cpp',['../enigmaiot__node__nonsleepy_8cpp.html',1,'']]],\n  ['enigmaiot_5fprot_5fvers_271',['ENIGMAIOT_PROT_VERS',['../EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821',1,'EnigmaIoTconfig.h']]],\n  ['enigmaiotconfig_2eh_272',['EnigmaIoTconfig.h',['../EnigmaIoTconfig_8h.html',1,'']]],\n  ['enigmaiotconfigadvanced_2eh_273',['EnigmaIoTconfigAdvanced.h',['../EnigmaIoTconfigAdvanced_8h.html',1,'']]],\n  ['enigmaiotdebug_2eh_274',['EnigmaIOTdebug.h',['../EnigmaIOTdebug_8h.html',1,'']]],\n  ['enigmaiotgateway_275',['enigmaIotGateway',['../classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889',1,'GatewayOutput_generic::enigmaIotGateway()'],['../EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034',1,'EnigmaIOTGateway():&#160;EnigmaIOTGateway.cpp'],['../EnigmaIOTGateway_8h.html#abcd4985de3ef6fbe1994af85093ca034',1,'EnigmaIOTGateway():&#160;EnigmaIOTGateway.cpp']]],\n  ['enigmaiotgateway_2ecpp_276',['EnigmaIOTGateway.cpp',['../EnigmaIOTGateway_8cpp.html',1,'']]],\n  ['enigmaiotgateway_2eh_277',['EnigmaIOTGateway.h',['../EnigmaIOTGateway_8h.html',1,'']]],\n  ['enigmaiotgatewayclass_278',['EnigmaIOTGatewayClass',['../classEnigmaIOTGatewayClass.html',1,'']]],\n  ['enigmaiotgatewaydummy_2ecpp_279',['EnigmaIOTGatewayDummy.cpp',['../EnigmaIOTGatewayDummy_8cpp.html',1,'']]],\n  ['enigmaiotgatewaymqtt_2ecpp_280',['EnigmaIOTGatewayMQTT.cpp',['../EnigmaIOTGatewayMQTT_8cpp.html',1,'']]],\n  ['enigmaiotjsoncontroller_281',['EnigmaIOTjsonController',['../classEnigmaIOTjsonController.html',1,'']]],\n  ['enigmaiotjsoncontroller_2eh_282',['EnigmaIOTjsonController.h',['../EnigmaIOTjsonController_8h.html',1,'']]],\n  ['enigmaiotnode_283',['enigmaIotNode',['../classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde',1,'EnigmaIOTjsonController::enigmaIotNode()'],['../EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af',1,'EnigmaIOTNode():&#160;EnigmaIOTNode.cpp'],['../EnigmaIOTNode_8h.html#aad0a67af9b0ad60557652e3170f8a2af',1,'EnigmaIOTNode():&#160;EnigmaIOTNode.cpp']]],\n  ['enigmaiotnode_2ecpp_284',['EnigmaIOTNode.cpp',['../EnigmaIOTNode_8cpp.html',1,'']]],\n  ['enigmaiotnode_2eh_285',['EnigmaIOTNode.h',['../EnigmaIOTNode_8h.html',1,'']]],\n  ['enigmaiotnodeclass_286',['EnigmaIOTNodeClass',['../classEnigmaIOTNodeClass.html',1,'']]],\n  ['enigmaiotringbuffer_287',['EnigmaIOTRingBuffer',['../classEnigmaIOTRingBuffer.html',1,'EnigmaIOTRingBuffer&lt; Telement &gt;'],['../classEnigmaIOTRingBuffer.html#a1c18bc66f575fffc206be22f96fc6a16',1,'EnigmaIOTRingBuffer::EnigmaIOTRingBuffer()']]],\n  ['enigmaiotringbuffer_2eh_288',['EnigmaIOTRingBuffer.h',['../EnigmaIOTRingBuffer_8h.html',1,'']]],\n  ['enigmaiotringbuffer_3c_20comms_5fqueue_5fitem_5ft_20_3e_289',['EnigmaIOTRingBuffer&lt; comms_queue_item_t &gt;',['../classEnigmaIOTRingBuffer.html',1,'']]],\n  ['enigmaiotringbuffer_3c_20mqtt_5fqueue_5fitem_5ft_20_3e_290',['EnigmaIOTRingBuffer&lt; mqtt_queue_item_t &gt;',['../classEnigmaIOTRingBuffer.html',1,'']]],\n  ['enigmaiotringbuffer_3c_20msg_5fqueue_5fitem_5ft_20_3e_291',['EnigmaIOTRingBuffer&lt; msg_queue_item_t &gt;',['../classEnigmaIOTRingBuffer.html',1,'']]],\n  ['enigmaiotupdate_292',['EnigmaIoTUpdate',['../namespaceEnigmaIoTUpdate.html',1,'']]],\n  ['enigmaiotupdate_2epy_293',['EnigmaIoTUpdate.py',['../EnigmaIoTUpdate_8py.html',1,'']]],\n  ['enigmaiotversion_294',['enigmaIOTVersion',['../classNode.html#a9af4beb0e8a8cf8405116b92077d9027',1,'Node']]],\n  ['entityconfig_295',['entityConfig',['../classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b',1,'HAEntity']]],\n  ['error_296',['ERROR',['../EnigmaIOTdebug_8h.html#a8fe83ac76edc595f6b98cd4a4127aed5',1,'EnigmaIOTdebug.h']]],\n  ['espclient_297',['espClient',['../classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a',1,'GwOutput_MQTT']]],\n  ['espnow_5fhal_298',['Espnow_hal',['../espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e',1,'Espnow_hal():&#160;espnow_hal.cpp'],['../espnow__hal_8h.html#a3eef8679955ce5f4743338cbc6bf1e0e',1,'Espnow_hal():&#160;espnow_hal.cpp']]],\n  ['espnow_5fhal_2ecpp_299',['espnow_hal.cpp',['../espnow__hal_8cpp.html',1,'']]],\n  ['espnow_5fhal_2eh_300',['espnow_hal.h',['../espnow__hal_8h.html',1,'']]],\n  ['espnow_5fhalclass_301',['Espnow_halClass',['../classEspnow__halClass.html',1,'Espnow_halClass'],['../classEspnow__halClass.html#ae9def9fb9d9e8370e70e77367900669f',1,'Espnow_halClass::Espnow_halClass()']]],\n  ['espnowlooptask_302',['espnowLoopTask',['../classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8',1,'Espnow_halClass']]],\n  ['enigmaiot_303',['EnigmaIoT',['../index.html',1,'']]],\n  ['enigmaiot_20button_20controller_304',['EnigmaIOT Button Controller',['../md_examples_EnigmaIOT-Button-Controller_readme.html',1,'']]],\n  ['enigmaiot_20dash_20button_20controller_305',['EnigmaIOT Dash Button Controller',['../md_examples_EnigmaIOT-DashButton-Controller_readme.html',1,'']]],\n  ['enigmaiot_20json_20controller_20template_306',['EnigmaIOT JSON Controller Template',['../md_examples_EnigmaIOT-Json-Controller-Template_readme.html',1,'']]],\n  ['enigmaiot_20led_20controller_307',['EnigmaIOT Led Controller',['../md_examples_EnigmaIOT-Led-Controller_readme.html',1,'']]],\n  ['enigmaiot_20sensor_20controller_308',['EnigmaIOT Sensor Controller',['../md_examples_EnigmaIOT-Sensor-Controller_readme.html',1,'']]],\n  ['enigmaiot_20smartswitch_20controller_309',['EnigmaIOT SmartSwitch Controller',['../md_examples_EnigmaIOT-SmartSwitch-Controller_readme.html',1,'']]],\n  ['enigmaiot_20led_20flasher_20example_310',['EnigmaIOT LED Flasher example',['../md_examples_enigmaiot_led_flasher_readme.html',1,'']]],\n  ['enigmaiot_20msgpack_20example_311',['EnigmaIOT MsgPack example',['../md_examples_enigmaiot_node_msgpack_readme.html',1,'']]],\n  ['enigmaiot_20node_20example_312',['EnigmaIOT Node example',['../md_examples_enigmaiot_node_nonsleepy_readme.html',1,'']]],\n  ['enigmaiot_20node_20example_313',['EnigmaIOT Node example',['../md_examples_enigmaiot_node_readme.html',1,'']]],\n  ['enigmaiot_20gateway_20dummy_314',['EnigmaIOT Gateway Dummy',['../md_examples_EnigmaIOTGatewayDummy_readme.html',1,'']]],\n  ['enigmaiot_20gateway_20mqtt_315',['EnigmaIOT Gateway MQTT',['../md_examples_EnigmaIOTGatewayMQTT_readme.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_6.js",
    "content": "var searchData=\n[\n  ['failsafe_5frtc_5faddress_316',['FAILSAFE_RTC_ADDRESS',['../EnigmaIOT-Button-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['fan_317',['FAN',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73',1,'haEntity.h']]],\n  ['filter_2ecpp_318',['Filter.cpp',['../Filter_8cpp.html',1,'']]],\n  ['filter_2eh_319',['Filter.h',['../Filter_8h.html',1,'']]],\n  ['filterclass_320',['FilterClass',['../classFilterClass.html',1,'FilterClass'],['../classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd',1,'FilterClass::FilterClass()']]],\n  ['filtertype_5ft_321',['FilterType_t',['../Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7',1,'Filter.h']]],\n  ['findemptynode_322',['findEmptyNode',['../classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711',1,'NodeList']]],\n  ['flash_5fled_5ftime_323',['FLASH_LED_TIME',['../EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349',1,'EnigmaIoTconfig.h']]],\n  ['flashblue_324',['flashBlue',['../classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438',1,'EnigmaIOTNodeClass']]],\n  ['flashconnectionled_325',['flashConnectionLed',['../EnigmaIOTGatewayDummy_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a',1,'flashConnectionLed(void *led):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a',1,'flashConnectionLed(void *led):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['flashled_326',['flashLed',['../EnigmaIOTNode_8cpp.html#a2f399d10e625fb459fb5e0b8a3a79ef8',1,'EnigmaIOTNode.cpp']]],\n  ['flashrx_327',['flashRx',['../classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197',1,'EnigmaIOTGatewayClass']]],\n  ['flashtx_328',['flashTx',['../classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae',1,'EnigmaIOTGatewayClass']]],\n  ['front_329',['front',['../classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942',1,'EnigmaIOTRingBuffer']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_7.js",
    "content": "var searchData=\n[\n  ['gateway_330',['gateway',['../classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e',1,'Comms_halClass::gateway()'],['../structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517',1,'rtcmem_data_t::gateway()']]],\n  ['gateway_5fconfig_5ft_331',['gateway_config_t',['../structgateway__config__t.html',1,'']]],\n  ['gatewayapi_332',['GatewayAPI',['../classGatewayAPI.html',1,'GatewayAPI'],['../classEnigmaIOTGatewayClass.html#a0b1bb7ec1dc2b4a244c77ffd04786a0c',1,'EnigmaIOTGatewayClass::GatewayAPI()']]],\n  ['gatewayapi_2ecpp_333',['GatewayAPI.cpp',['../GatewayAPI_8cpp.html',1,'']]],\n  ['gatewayapi_2eh_334',['GatewayAPI.h',['../GatewayAPI_8h.html',1,'']]],\n  ['gatewaymessagetype_5ft_335',['gatewayMessageType_t',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613',1,'EnigmaIOTGateway.h']]],\n  ['gatewayoutput_5fdummy_336',['GatewayOutput_dummy',['../classGatewayOutput__dummy.html',1,'']]],\n  ['gatewayoutput_5fgeneric_337',['GatewayOutput_generic',['../classGatewayOutput__generic.html',1,'']]],\n  ['gatewaypayloadencoding_5ft_338',['gatewayPayloadEncoding_t',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d',1,'EnigmaIOTGateway.h']]],\n  ['gatewaysearchstarted_339',['gatewaySearchStarted',['../classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75',1,'EnigmaIOTNodeClass']]],\n  ['get_5fname_340',['GET_NAME',['../GwOutput__mqtt_8h.html#af8bca12527bac4b474e2ccb5acd8691e',1,'GwOutput_mqtt.h']]],\n  ['get_5fname_5fans_341',['GET_NAME_ANS',['../GwOutput__mqtt_8h.html#a043021359c728f4265337a8c21edfcdb',1,'GwOutput_mqtt.h']]],\n  ['get_5frssi_342',['GET_RSSI',['../GwOutput__mqtt_8h.html#ae274ed0194e5685c280ab9148dbcba69',1,'GwOutput_mqtt.h']]],\n  ['get_5frssi_5fans_343',['GET_RSSI_ANS',['../GwOutput__mqtt_8h.html#a44bf9b184af7520ec127c6b705991c8f',1,'GwOutput_mqtt.h']]],\n  ['get_5fsleep_344',['GET_SLEEP',['../GwOutput__mqtt_8h.html#a8fa3ce9af2986feed0592ad3f82b0e8a',1,'GwOutput_mqtt.h']]],\n  ['get_5fsleep_5fans_345',['GET_SLEEP_ANS',['../GwOutput__mqtt_8h.html#a8d48508893d087bd76ac4061b112cce7',1,'GwOutput_mqtt.h']]],\n  ['get_5fuser_5fdata_346',['GET_USER_DATA',['../GwOutput__mqtt_8h.html#ac6dad41b3de63cebfef84fc4677cded8',1,'GwOutput_mqtt.h']]],\n  ['get_5fversion_347',['GET_VERSION',['../GwOutput__mqtt_8h.html#ae9ef65fac5a6e3c6594811a7c8ee2291',1,'GwOutput_mqtt.h']]],\n  ['get_5fversion_5fans_348',['GET_VERSION_ANS',['../GwOutput__mqtt_8h.html#a1bbd404f93aed82bc0d713238fa2bf6b',1,'GwOutput_mqtt.h']]],\n  ['getactivenodesnumber_349',['getActiveNodesNumber',['../classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb',1,'EnigmaIOTGatewayClass']]],\n  ['getaddresslength_350',['getAddressLength',['../classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92',1,'Comms_halClass::getAddressLength()'],['../classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d',1,'Espnow_halClass::getAddressLength()']]],\n  ['getanouncemessage_351',['getAnounceMessage',['../classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef',1,'HAEntity']]],\n  ['getbroadcastnode_352',['getBroadcastNode',['../classNodeList.html#a0020539e3b49df3706fe66a44bbf3700',1,'NodeList']]],\n  ['getcommsqueue_353',['getCommsQueue',['../classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5',1,'Espnow_halClass']]],\n  ['getdelay_354',['getDelay',['../classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a',1,'TimeManagerClass']]],\n  ['getdh1_355',['getDH1',['../classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1',1,'CryptModule']]],\n  ['getdh2_356',['getDH2',['../classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee',1,'CryptModule']]],\n  ['getdiscoveryjson_357',['getDiscoveryJson',['../classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2',1,'HABinarySensor::getDiscoveryJson()'],['../classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2',1,'HACover::getDiscoveryJson()'],['../classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f',1,'HASensor::getDiscoveryJson()'],['../classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9',1,'HASwitch::getDiscoveryJson()'],['../classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c',1,'HATrigger::getDiscoveryJson()']]],\n  ['getdiscoverytopic_358',['getDiscoveryTopic',['../classHAEntity.html#a264a9779679d77db65566233a952100d',1,'HAEntity']]],\n  ['getencriptionkey_359',['getEncriptionKey',['../classNode.html#a61ac445d996a9304b34fc78a2514364f',1,'Node']]],\n  ['geterrorpackets_360',['getErrorPackets',['../classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b',1,'EnigmaIOTGatewayClass']]],\n  ['getgwinfo_361',['getGwInfo',['../classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a',1,'GatewayAPI']]],\n  ['getgwinfouri_362',['getGwInfoUri',['../GatewayAPI_8cpp.html#a4a9a0e6476327e4b48e47962e42a5b72',1,'GatewayAPI.cpp']]],\n  ['getgwresetturi_363',['getGwResettUri',['../GatewayAPI_8cpp.html#a44442f4218442b3ac5d6bfb5aa457eb4',1,'GatewayAPI.cpp']]],\n  ['getgwrestarturi_364',['getGwRestartUri',['../GatewayAPI_8cpp.html#a4a669b0dba2a947822ae13ed5cbdad36',1,'GatewayAPI.cpp']]],\n  ['getinitassleepy_365',['getInitAsSleepy',['../classNode.html#a89ccd5b416ac31593da426c48ec8562a',1,'Node']]],\n  ['getinputmsgqueue_366',['getInputMsgQueue',['../classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5',1,'EnigmaIOTGatewayClass']]],\n  ['getkeyvalidfrom_367',['getKeyValidFrom',['../classNode.html#a30a8e0aaad582a1baa269c6641150586',1,'Node']]],\n  ['getlastbroadcastmsgcounter_368',['getLastBroadcastMsgCounter',['../classNodeList.html#acfff6ed812a219b7b7514989da7fc34e',1,'NodeList']]],\n  ['getlastcontrolcounter_369',['getLastControlCounter',['../classNode.html#ae4b169a75d7c1fa535eb883c28683001',1,'Node']]],\n  ['getlastdownlinkmsgcounter_370',['getLastDownlinkMsgCounter',['../classNode.html#aecf8d05afddcd5d460472963ee88bd2b',1,'Node']]],\n  ['getlastmessagecounter_371',['getLastMessageCounter',['../classNode.html#ab5c31a536cb60a6c86dec8524117f50e',1,'Node']]],\n  ['getlastmessagetime_372',['getLastMessageTime',['../classNode.html#a15877a320c33f77402c5700774d936cc',1,'Node']]],\n  ['getmacaddress_373',['getMacAddress',['../classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac',1,'Node']]],\n  ['getmaxmessagelength_374',['getMaxMessageLength',['../classEspnow__halClass.html#a3a037c0d31f906bc24a8475b376072fd',1,'Espnow_halClass']]],\n  ['getmaxnodes_375',['getMaxNodes',['../classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c',1,'GatewayAPI']]],\n  ['getmaxnodesuri_376',['getMaxNodesUri',['../GatewayAPI_8cpp.html#a9e381857b19a19f4b04b22466373d7df',1,'GatewayAPI.cpp']]],\n  ['getmqttqueue_377',['getMQTTqueue',['../classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742',1,'GwOutput_MQTT']]],\n  ['getnetworkkey_378',['getNetworkKey',['../classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3',1,'EnigmaIOTGatewayClass']]],\n  ['getnetworkname_379',['getNetworkName',['../classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4',1,'EnigmaIOTGatewayClass']]],\n  ['getnewnode_380',['getNewNode',['../classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2',1,'NodeList']]],\n  ['getnextactivenode_381',['getNextActiveNode',['../classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2',1,'NodeList::getNextActiveNode(uint16_t nodeId)'],['../classNodeList.html#add85a6384d393648fa7ca693a0dba44c',1,'NodeList::getNextActiveNode(Node *node)']]],\n  ['getnextnumber_382',['getNextNumber',['../EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f',1,'EnigmaIOTGateway.cpp']]],\n  ['getnode_383',['getNode',['../classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed',1,'EnigmaIOTNodeClass']]],\n  ['getnodedata_384',['getNodeData',['../classNode.html#a129745eaa2b8e08ac8201809a6e2cb17',1,'Node']]],\n  ['getnodefromid_385',['getNodeFromID',['../classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79',1,'NodeList']]],\n  ['getnodefrommac_386',['getNodeFromMAC',['../classNodeList.html#a08530d06e81c160b346047e37839ee7d',1,'NodeList']]],\n  ['getnodefromname_387',['getNodeFromName',['../classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe',1,'NodeList']]],\n  ['getnodefromparam_388',['getNodeFromParam',['../classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2',1,'GatewayAPI']]],\n  ['getnodeid_389',['getNodeId',['../classNode.html#a2563f7f556d09035dbbf042656d4fa3a',1,'Node']]],\n  ['getnodeinfo_390',['getNodeInfo',['../classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f',1,'GatewayAPI']]],\n  ['getnodename_391',['getNodeName',['../classNode.html#a5c665e844c5f7f121a72baae270a2ba7',1,'Node']]],\n  ['getnodenumber_392',['getNodeNumber',['../classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c',1,'GatewayAPI']]],\n  ['getnodenumberuri_393',['getNodeNumberUri',['../GatewayAPI_8cpp.html#a1840a76ce647f7367adbe0738848153c',1,'GatewayAPI.cpp']]],\n  ['getnoderestarturi_394',['getNodeRestartUri',['../GatewayAPI_8cpp.html#a55ba46dd79121e3af6c3e3dc06e76b2b',1,'GatewayAPI.cpp']]],\n  ['getnodes_395',['getNodes',['../classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213',1,'EnigmaIOTGatewayClass::getNodes()'],['../classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68',1,'GatewayAPI::getNodes()']]],\n  ['getnodesuri_396',['getNodesUri',['../GatewayAPI_8cpp.html#acfd88e792c95d773692f0f5b3160ddbf',1,'GatewayAPI.cpp']]],\n  ['getnodeuri_397',['getNodeUri',['../GatewayAPI_8cpp.html#a43838d21da06df9ccc48b56d5bab438d',1,'GatewayAPI.cpp']]],\n  ['getoffset_398',['getOffset',['../classTimeManagerClass.html#ae188f14a7cf5c38c5ab09b0dc5460490',1,'TimeManagerClass']]],\n  ['getotarunning_399',['getOTArunning',['../classEnigmaIOTNodeClass.html#a3398ebecf52e1d7b5493d34ed011c38f',1,'EnigmaIOTNodeClass']]],\n  ['getpacketshour_400',['getPacketsHour',['../classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0',1,'EnigmaIOTGatewayClass']]],\n  ['getper_401',['getPER',['../classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1',1,'EnigmaIOTGatewayClass']]],\n  ['getprivdhkey_402',['getPrivDHKey',['../classCryptModule.html#a9d106f893f329d8648aba205b3717806',1,'CryptModule']]],\n  ['getpubdhkey_403',['getPubDHKey',['../classCryptModule.html#aefc84d57eee3eceeadc3611866925804',1,'CryptModule']]],\n  ['getrssi_404',['getRSSI',['../classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93',1,'EnigmaIOTNodeClass::getRSSI()'],['../classNode.html#ac9cb809cbf8a76bda02e2c92731b213b',1,'Node::getRSSI()']]],\n  ['getsha256_405',['getSHA256',['../classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16',1,'CryptModule']]],\n  ['getshouldsave_406',['getShouldSave',['../classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6',1,'EnigmaIOTGatewayClass']]],\n  ['getsleeptime_407',['getSleepTime',['../classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c',1,'EnigmaIOTNodeClass']]],\n  ['getsleepy_408',['getSleepy',['../classNode.html#a5bf02d202c9cb76831de89e4d1ef8893',1,'Node']]],\n  ['getstatus_409',['getStatus',['../classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e',1,'EnigmaIOTGatewayClass::getStatus()'],['../classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059',1,'EnigmaIOTNodeClass::getStatus()'],['../classNode.html#a6172f9eb39a02f01b692a53b9ee09c56',1,'Node::getStatus()']]],\n  ['gettopicaddress_410',['getTopicAddress',['../GwOutput__mqtt_8cpp.html#aee4f7d364dbe6c4b29c462b3306bebe7',1,'GwOutput_mqtt.cpp']]],\n  ['gettopictype_411',['getTopicType',['../GwOutput__mqtt_8cpp.html#a0ad2a145294a0b58f6e5b5e3d8ad542f',1,'GwOutput_mqtt.cpp']]],\n  ['gettotalpackets_412',['getTotalPackets',['../classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4',1,'EnigmaIOTGatewayClass']]],\n  ['gettriggersubtypestr_413',['getTriggerSubtypeStr',['../classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b',1,'HATrigger']]],\n  ['gettriggertypestr_414',['getTriggerTypeStr',['../classHATrigger.html#a25585b365d726848d22ad5c4f299d803',1,'HATrigger']]],\n  ['getversion_415',['getVersion',['../classNode.html#a628b04339453635be34148c9fbe66506',1,'Node']]],\n  ['gw_5fstatus_416',['GW_STATUS',['../GwOutput__mqtt_8h.html#a13c1b13340e4cfcf8fa233d3f941853e',1,'GwOutput_mqtt.h']]],\n  ['gwapi_417',['GwAPI',['../GatewayAPI_8cpp.html#a69f499591af56509cd3540f09207f091',1,'GwAPI():&#160;GatewayAPI.cpp'],['../GatewayAPI_8h.html#a69f499591af56509cd3540f09207f091',1,'GwAPI():&#160;GatewayAPI.cpp']]],\n  ['gwconfig_418',['gwConfig',['../classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc',1,'EnigmaIOTGatewayClass']]],\n  ['gwinvalidatereason_5ft_419',['gwInvalidateReason_t',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977',1,'EnigmaIOTGateway.h']]],\n  ['gwoutput_420',['GwOutput',['../GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95',1,'GwOutput():&#160;GwOutput_dummy.cpp'],['../GwOutput__dummy_8h.html#aea3ab74ce495f6e6d8c5916aab3aaa95',1,'GwOutput():&#160;GwOutput_dummy.cpp'],['../GwOutput__mqtt_8cpp.html#afb58b5e941b1e87b27c59c51b730f631',1,'GwOutput():&#160;GwOutput_mqtt.cpp'],['../GwOutput__mqtt_8h.html#afb58b5e941b1e87b27c59c51b730f631',1,'GwOutput():&#160;GwOutput_dummy.cpp']]],\n  ['gwoutput_5fdata_5ftype_421',['GwOutput_data_type',['../GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636',1,'GwOutput_generic.h']]],\n  ['gwoutput_5fdata_5ftype_5ft_422',['GwOutput_data_type_t',['../GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc',1,'GwOutput_generic.h']]],\n  ['gwoutput_5fdummy_2ecpp_423',['GwOutput_dummy.cpp',['../GwOutput__dummy_8cpp.html',1,'']]],\n  ['gwoutput_5fdummy_2eh_424',['GwOutput_dummy.h',['../GwOutput__dummy_8h.html',1,'']]],\n  ['gwoutput_5fgeneric_2eh_425',['GwOutput_generic.h',['../GwOutput__generic_8h.html',1,'']]],\n  ['gwoutput_5fmqtt_426',['GwOutput_MQTT',['../classGwOutput__MQTT.html',1,'GwOutput_MQTT'],['../classGwOutput__MQTT.html#a50976e1efb3c1570e3596672ffd83c56',1,'GwOutput_MQTT::GwOutput_MQTT()']]],\n  ['gwoutput_5fmqtt_2ecpp_427',['GwOutput_mqtt.cpp',['../GwOutput__mqtt_8cpp.html',1,'']]],\n  ['gwoutput_5fmqtt_2eh_428',['GwOutput_mqtt.h',['../GwOutput__mqtt_8h.html',1,'']]],\n  ['gwtopic_429',['gwTopic',['../classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3',1,'GatewayOutput_generic']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_8.js",
    "content": "var searchData=\n[\n  ['ha_5fallow_5fattrib_430',['ha_allow_attrib',['../haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6',1,'haEntity.h']]],\n  ['ha_5fdevice_5fclass_431',['ha_device_class',['../haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3',1,'haEntity.h']]],\n  ['ha_5fdevice_5ftype_432',['ha_device_type',['../haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33',1,'haEntity.h']]],\n  ['ha_5fdisc_5ftype_433',['HA_DISC_TYPE',['../EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd',1,'EnigmaIOTNode.h']]],\n  ['ha_5fdiscovery_5fmessage_434',['HA_DISCOVERY_MESSAGE',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3',1,'HA_DISCOVERY_MESSAGE():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa01b2a3fb2e751c9536ae814b4b8919c3',1,'HA_DISCOVERY_MESSAGE():&#160;EnigmaIOTNode.h']]],\n  ['ha_5fdiscovery_5fprefix_435',['HA_DISCOVERY_PREFIX',['../EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ha_5fexpiration_436',['ha_expiration',['../haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694',1,'haEntity.h']]],\n  ['ha_5ffirst_5fdiscovery_5fdelay_437',['HA_FIRST_DISCOVERY_DELAY',['../EnigmaIoTconfigAdvanced_8h.html#a1ca4cd82c4372161db98aee89cff4868',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ha_5ffirst_5fdiscovery_5fdelay_5fsleepy_438',['HA_FIRST_DISCOVERY_DELAY_SLEEPY',['../EnigmaIoTconfigAdvanced_8h.html#a49e01af100e8659b911c4dc6c8b30ef4',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ha_5fname_5fsufix_439',['ha_name_sufix',['../haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16',1,'haEntity.h']]],\n  ['ha_5fnext_5fdiscovery_5fdelay_440',['HA_NEXT_DISCOVERY_DELAY',['../EnigmaIoTconfigAdvanced_8h.html#a21aa047809e9b061f5712589cf2136f9',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ha_5fnext_5fdiscovery_5fdelay_5fsleepy_441',['HA_NEXT_DISCOVERY_DELAY_SLEEPY',['../EnigmaIoTconfigAdvanced_8h.html#a19844f57e8cb836e57d6418a76e6717f',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ha_5foff_5fdelay_442',['ha_off_delay',['../haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270',1,'haEntity.h']]],\n  ['ha_5fpayload_443',['ha_payload',['../haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14',1,'haEntity.h']]],\n  ['ha_5fpayload_5fclose_444',['ha_payload_close',['../haEntity_8h.html#a244cdb583a7f830630583998a8e840c2',1,'haEntity.h']]],\n  ['ha_5fpayload_5fgoto_445',['ha_payload_goto',['../haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712',1,'haEntity.h']]],\n  ['ha_5fpayload_5foff_446',['ha_payload_off',['../haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a',1,'haEntity.h']]],\n  ['ha_5fpayload_5fon_447',['ha_payload_on',['../haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5',1,'haEntity.h']]],\n  ['ha_5fpayload_5fopen_448',['ha_payload_open',['../haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880',1,'haEntity.h']]],\n  ['ha_5fpayload_5fstop_449',['ha_payload_stop',['../haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6',1,'haEntity.h']]],\n  ['ha_5fposition_5fclosed_450',['ha_position_closed',['../haEntity_8h.html#a05ac358789f765b6277d403be15765ae',1,'haEntity.h']]],\n  ['ha_5fposition_5fopen_451',['ha_position_open',['../haEntity_8h.html#ac4777728d51f1f44cb664a1afdd0fe75',1,'haEntity.h']]],\n  ['ha_5fset_5fposition_5ftemplate_452',['ha_set_position_template',['../haEntity_8h.html#af29b583e27925f5bb557695a24e34874',1,'haEntity.h']]],\n  ['ha_5fstate_5fclosed_453',['ha_state_closed',['../haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d',1,'haEntity.h']]],\n  ['ha_5fstate_5fclosing_454',['ha_state_closing',['../haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f',1,'haEntity.h']]],\n  ['ha_5fstate_5foff_455',['ha_state_off',['../haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230',1,'haEntity.h']]],\n  ['ha_5fstate_5fon_456',['ha_state_on',['../haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a',1,'haEntity.h']]],\n  ['ha_5fstate_5fopen_457',['ha_state_open',['../haEntity_8h.html#afb9503f780f913e1ca94900da8723da7',1,'haEntity.h']]],\n  ['ha_5fstate_5fopening_458',['ha_state_opening',['../haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3',1,'haEntity.h']]],\n  ['ha_5fstate_5fstopped_459',['ha_state_stopped',['../haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b',1,'haEntity.h']]],\n  ['ha_5fsubtype_460',['ha_subtype',['../haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7',1,'haEntity.h']]],\n  ['ha_5ftriggersubtype_5ft_461',['ha_triggerSubtype_t',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b',1,'haTrigger.h']]],\n  ['ha_5ftriggersubtypestr_462',['ha_triggerSubtypeStr',['../haTrigger_8h.html#a291e753178ee4e52fb182fc2af9cd566',1,'haTrigger.h']]],\n  ['ha_5ftriggertype_5ft_463',['ha_triggerType_t',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c',1,'haTrigger.h']]],\n  ['ha_5ftriggertypestr_464',['ha_triggerTypeStr',['../haTrigger_8h.html#a98aa5d190f3afda4339a9f35a8f59eef',1,'haTrigger.h']]],\n  ['ha_5ftype_465',['ha_type',['../haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453',1,'haEntity.h']]],\n  ['ha_5funit_5fof_5fmeasurement_466',['ha_unit_of_measurement',['../haEntity_8h.html#af69343b9e51fbd195d5964407594f653',1,'haEntity.h']]],\n  ['ha_5fvalue_5fkey_467',['ha_value_key',['../haEntity_8h.html#a55797940423863b288e6c60755873026',1,'haEntity.h']]],\n  ['ha_5fvalue_5ftemplate_468',['ha_value_template',['../haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2',1,'haEntity.h']]],\n  ['habinarysensor_469',['HABinarySensor',['../classHABinarySensor.html',1,'HABinarySensor'],['../classHABinarySensor.html#a24cc503973f65dadac7575a2bba823b6',1,'HABinarySensor::HABinarySensor()']]],\n  ['habinarysensor_2ecpp_470',['haBinarySensor.cpp',['../haBinarySensor_8cpp.html',1,'']]],\n  ['habinarysensor_2eh_471',['haBinarySensor.h',['../haBinarySensor_8h.html',1,'']]],\n  ['habinarysensorclass_5ft_472',['haBinarySensorClass_t',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7',1,'haEntity.h']]],\n  ['hacover_473',['HACover',['../classHACover.html',1,'HACover'],['../classHACover.html#acc7fe4e246ebd9af4ff958447ec78d86',1,'HACover::HACover()']]],\n  ['hacover_2ecpp_474',['haCover.cpp',['../haCover_8cpp.html',1,'']]],\n  ['hacover_2eh_475',['haCover.h',['../haCover_8h.html',1,'']]],\n  ['hacoverclass_5ft_476',['haCoverClass_t',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14',1,'haEntity.h']]],\n  ['hadevicetype_5ft_477',['haDeviceType_t',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76d',1,'haEntity.h']]],\n  ['haentity_478',['HAEntity',['../classHAEntity.html',1,'HAEntity'],['../classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3',1,'HAEntity::HAEntity()']]],\n  ['haentity_2eh_479',['haEntity.h',['../haEntity_8h.html',1,'']]],\n  ['handle_480',['handle',['../classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04',1,'Comms_halClass::handle()'],['../classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b',1,'EnigmaIOTGatewayClass::handle()'],['../classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252',1,'EnigmaIOTNodeClass::handle()'],['../classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9',1,'Espnow_halClass::handle()']]],\n  ['hasclocksync_481',['hasClockSync',['../classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e',1,'EnigmaIOTNodeClass']]],\n  ['hasensor_482',['HASensor',['../classHASensor.html',1,'HASensor'],['../classHASensor.html#a07979a82942d08d6f24db5b76e6fe269',1,'HASensor::HASensor()']]],\n  ['hasensor_2ecpp_483',['haSensor.cpp',['../haSensor_8cpp.html',1,'']]],\n  ['hasensor_2eh_484',['haSensor.h',['../haSensor_8h.html',1,'']]],\n  ['hasensorclass_5ft_485',['haSensorClass_t',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2',1,'haEntity.h']]],\n  ['haswitch_486',['HASwitch',['../classHASwitch.html',1,'HASwitch'],['../classHASwitch.html#a282ac7ec44e7fc43d0d6493808e68ba3',1,'HASwitch::HASwitch()']]],\n  ['haswitch_2ecpp_487',['haSwitch.cpp',['../haSwitch_8cpp.html',1,'']]],\n  ['haswitch_2eh_488',['haSwitch.h',['../haSwitch_8h.html',1,'']]],\n  ['hatrigger_489',['HATrigger',['../classHATrigger.html',1,'HATrigger'],['../classHATrigger.html#a91af9e612da244483b5704c4ed835d0f',1,'HATrigger::HATrigger()']]],\n  ['hatrigger_2ecpp_490',['haTrigger.cpp',['../haTrigger_8cpp.html',1,'']]],\n  ['hatrigger_2eh_491',['haTrigger.h',['../haTrigger_8h.html',1,'']]],\n  ['helperfunctions_2ecpp_492',['helperFunctions.cpp',['../helperFunctions_8cpp.html',1,'']]],\n  ['helperfunctions_2eh_493',['helperFunctions.h',['../helperFunctions_8h.html',1,'']]],\n  ['howto_2emd_494',['howto.md',['../howto_8md.html',1,'']]],\n  ['hvac_495',['HVAC',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2',1,'haEntity.h']]],\n  ['howto_496',['howto',['../md_docs_howto.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_9.js",
    "content": "var searchData=\n[\n  ['identify_497',['IDENTIFY',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6',1,'NodeList.h']]],\n  ['identify_5ftimeout_498',['IDENTIFY_TIMEOUT',['../EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5',1,'EnigmaIoTconfig.h']]],\n  ['identifystart_499',['identifyStart',['../classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad',1,'EnigmaIOTNodeClass']]],\n  ['idx_500',['idx',['../namespaceEnigmaIoTUpdate.html#a5069992755f7ebc78fa8218e65550c64',1,'EnigmaIoTUpdate']]],\n  ['ikmsg_5flen_501',['IKMSG_LEN',['../EnigmaIOTGateway_8cpp.html#a568f6925a7027004598c4ad288dd11f0',1,'IKMSG_LEN():&#160;EnigmaIOTGateway.cpp'],['../EnigmaIOTNode_8cpp.html#a568f6925a7027004598c4ad288dd11f0',1,'IKMSG_LEN():&#160;EnigmaIOTNode.cpp']]],\n  ['inclastbroadcastmsgcounter_502',['incLastBroadcastMsgCounter',['../classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042',1,'NodeList']]],\n  ['indentifying_503',['indentifying',['../classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a',1,'EnigmaIOTNodeClass']]],\n  ['info_504',['INFO',['../EnigmaIOTdebug_8h.html#ae1103fea1e1b3c41ca3322d5389f7162',1,'EnigmaIOTdebug.h']]],\n  ['init_505',['INIT',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36',1,'NodeList.h']]],\n  ['initassleepy_506',['initAsSleepy',['../classNode.html#ac492ae71e392fe59002e9900fb0d8c03',1,'Node']]],\n  ['initbroadcastnode_507',['initBroadcastNode',['../classNodeList.html#a956635fa60412a9a026ea64245dd4443',1,'NodeList']]],\n  ['initcomms_508',['initComms',['../classComms__halClass.html#a67d74c717b8f3919307738be9d963312',1,'Comms_halClass::initComms()'],['../classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9',1,'Espnow_halClass::initComms()']]],\n  ['initratefilter_509',['initRateFilter',['../classNode.html#a90d944dd41d445ec73a5b9534483329f',1,'Node']]],\n  ['initwifi_510',['initWiFi',['../helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3',1,'initWiFi(uint8_t channel, const char *networkName, const char *networkKey, uint8_t role):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a5efcbae54fb852b8a9b23a25931e3f7a',1,'initWiFi(uint8_t channel, const char *networkName, const char *networkKey=NULL, uint8_t role=0):&#160;helperFunctions.cpp']]],\n  ['input_5fqueue_511',['input_queue',['../classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40',1,'EnigmaIOTGatewayClass']]],\n  ['insidethermometer_512',['insideThermometer',['../classCONTROLLER__CLASS__NAME.html#ab6ae5865908255a9379c8c60632a3e3b',1,'CONTROLLER_CLASS_NAME']]],\n  ['invalid_513',['INVALID',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2',1,'NodeList.h']]],\n  ['invalidate_5fkey_514',['INVALIDATE_KEY',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543',1,'INVALIDATE_KEY():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa32637f9c9b67f884990ed21097ebc543',1,'INVALIDATE_KEY():&#160;EnigmaIOTNode.h']]],\n  ['invalidatekey_515',['invalidateKey',['../classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33',1,'EnigmaIOTGatewayClass']]],\n  ['invalidatereason_516',['invalidateReason',['../classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8',1,'EnigmaIOTNodeClass']]],\n  ['irrelevant_517',['IRRELEVANT',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087',1,'NodeList.h']]],\n  ['isbroadcastkeyrequested_518',['isBroadcastKeyRequested',['../classNode.html#a30aa0104f6df938075c7ff4ac64b3f41',1,'Node']]],\n  ['isfull_519',['isFull',['../classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374',1,'EnigmaIOTRingBuffer']]],\n  ['ishexchar_520',['isHexChar',['../EnigmaIOTGateway_8cpp.html#ad08e6ed992bb54d4ab67627295e7fcf0',1,'EnigmaIOTGateway.cpp']]],\n  ['iskeyvalid_521',['isKeyValid',['../classNode.html#aa382c421546fc99b22b4698acb36c3d8',1,'Node']]],\n  ['isnumber_522',['isNumber',['../helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b',1,'isNumber(const char *input):&#160;helperFunctions.cpp'],['../helperFunctions_8cpp.html#a26eaeecca0f44f0e5cf47b1f044a1306',1,'isNumber(const char *input, size_t len):&#160;helperFunctions.cpp'],['../helperFunctions_8cpp.html#a8d64848792adcc6a1094ea0eef6bed51',1,'isNumber(String input):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b',1,'isNumber(const char *input):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a26eaeecca0f44f0e5cf47b1f044a1306',1,'isNumber(const char *input, size_t len):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a8d64848792adcc6a1094ea0eef6bed51',1,'isNumber(String input):&#160;helperFunctions.cpp']]],\n  ['isregistered_523',['isRegistered',['../classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf',1,'EnigmaIOTNodeClass::isRegistered()'],['../classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8',1,'Node::isRegistered()']]],\n  ['istimeadjusted_524',['isTimeAdjusted',['../classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615',1,'TimeManagerClass']]],\n  ['iv_5flength_525',['IV_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6',1,'EnigmaIoTconfigAdvanced.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_a.js",
    "content": "var searchData=\n[\n  ['key_526',['key',['../structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2',1,'node_instance::key()'],['../classNode.html#aad088b52de3eb46a8c89e6cb87bdf887',1,'Node::key()']]],\n  ['key_5fexpired_527',['KEY_EXPIRED',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe',1,'KEY_EXPIRED():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a09a1d3d5daa36af5469fa79c12a027fe',1,'KEY_EXPIRED():&#160;EnigmaIOTNode.h']]],\n  ['key_5flength_528',['KEY_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['keyvalid_529',['keyValid',['../structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f',1,'node_instance::keyValid()'],['../classNode.html#a03e424c2251b5b96fb68444f008f6f17',1,'Node::keyValid()']]],\n  ['keyvalidfrom_530',['keyValidFrom',['../structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96',1,'node_instance::keyValidFrom()'],['../classNode.html#afad1c640f8fc2623996d3d2a174ad763',1,'Node::keyValidFrom()']]],\n  ['kicked_531',['KICKED',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6',1,'EnigmaIOTGateway.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_b.js",
    "content": "var searchData=\n[\n  ['lastbroadcastmsgcounter_532',['lastBroadcastMsgCounter',['../classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa',1,'EnigmaIOTNodeClass::lastBroadcastMsgCounter()'],['../classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7',1,'NodeList::lastBroadcastMsgCounter()']]],\n  ['lastcontrolcounter_533',['lastControlCounter',['../structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78',1,'rtcmem_data_t::lastControlCounter()'],['../structnode__instance.html#aee6b3fdf81d44af5053d138136d0f7f5',1,'node_instance::lastControlCounter()'],['../classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2',1,'Node::lastControlCounter()']]],\n  ['lastdownlinkmsgcounter_534',['lastDownlinkMsgCounter',['../structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d',1,'rtcmem_data_t::lastDownlinkMsgCounter()'],['../structnode__instance.html#a6ac60e31e921d2e101c86584eb5a5489',1,'node_instance::lastDownlinkMsgCounter()'],['../classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54',1,'Node::lastDownlinkMsgCounter()']]],\n  ['lastmessagecounter_535',['lastMessageCounter',['../structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114',1,'rtcmem_data_t::lastMessageCounter()'],['../structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91',1,'node_instance::lastMessageCounter()'],['../classNode.html#af2378f7b085ccdc06314b12263fd2d34',1,'Node::lastMessageCounter()']]],\n  ['lastmessagetime_536',['lastMessageTime',['../structnode__instance.html#a7eadabd847f82e2383dd440fd3cddc37',1,'node_instance::lastMessageTime()'],['../classNode.html#a2d56bbba3211927eff545e385ef5d162',1,'Node::lastMessageTime()']]],\n  ['lastotamsg_537',['lastOTAmsg',['../classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd',1,'EnigmaIOTNodeClass::lastOTAmsg()'],['../EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a',1,'lastOTAmsg():&#160;EnigmaIOTGateway.cpp']]],\n  ['led_538',['led',['../classCONTROLLER__CLASS__NAME.html#aa202545b98827df6cdfeea82898cba6c',1,'CONTROLLER_CLASS_NAME::led()'],['../classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781',1,'EnigmaIOTNodeClass::led()'],['../EnigmaIOT-Button-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['led_5fbuiltin_539',['LED_BUILTIN',['../EnigmaIOT-Button-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;enigmaiot_node_nonsleepy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['led_5foff_540',['LED_OFF',['../enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29',1,'LED_OFF():&#160;enigmaiot_led_flasher.cpp'],['../EnigmaIOTGateway_8h.html#a80700bb63bd56ebabbb4728aa433fd29',1,'LED_OFF():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a80700bb63bd56ebabbb4728aa433fd29',1,'LED_OFF():&#160;EnigmaIOTNode.h']]],\n  ['led_5fon_541',['LED_ON',['../enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25',1,'LED_ON():&#160;enigmaiot_led_flasher.cpp'],['../EnigmaIOTGateway_8h.html#af2e697ac60e05813d45ea2c9c9e79c25',1,'LED_ON():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25',1,'LED_ON():&#160;EnigmaIOTNode.h']]],\n  ['led_5fpin_542',['LED_PIN',['../LedController_8h.html#ab4553be4db9860d940f81d7447173b2f',1,'LedController.h']]],\n  ['ledcontroller_2ecpp_543',['LedController.cpp',['../LedController_8cpp.html',1,'']]],\n  ['ledcontroller_2eh_544',['LedController.h',['../LedController_8h.html',1,'']]],\n  ['ledkey_545',['ledKey',['../LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da',1,'LedController.cpp']]],\n  ['ledontime_546',['ledOnTime',['../classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1',1,'EnigmaIOTNodeClass']]],\n  ['len_547',['len',['../structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65',1,'msg_queue_item_t']]],\n  ['license_2emd_548',['LICENSE.md',['../LICENSE_8md.html',1,'']]],\n  ['light_549',['LIGHT',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb',1,'haEntity.h']]],\n  ['linked_550',['linked',['../structsmartSwitchControllerHw__t.html#a311c8e216f6f9b9f492a4bf6758edf80',1,'smartSwitchControllerHw_t']]],\n  ['linkkey_551',['linkKey',['../SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21',1,'SmartSwitchController.cpp']]],\n  ['loadconfig_552',['loadConfig',['../classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9',1,'CONTROLLER_CLASS_NAME::loadConfig() override'],['../classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b',1,'CONTROLLER_CLASS_NAME::loadConfig()'],['../classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b',1,'CONTROLLER_CLASS_NAME::loadConfig()'],['../classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b',1,'CONTROLLER_CLASS_NAME::loadConfig()'],['../classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b',1,'CONTROLLER_CLASS_NAME::loadConfig()'],['../classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b',1,'CONTROLLER_CLASS_NAME::loadConfig()'],['../classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa',1,'GatewayOutput_dummy::loadConfig()'],['../classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f',1,'GwOutput_MQTT::loadConfig()'],['../classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10',1,'EnigmaIOTjsonController::loadConfig()'],['../classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73',1,'GatewayOutput_generic::loadConfig()']]],\n  ['loadflashdata_553',['loadFlashData',['../classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331',1,'EnigmaIOTGatewayClass::loadFlashData()'],['../classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2',1,'EnigmaIOTNodeClass::loadFlashData()']]],\n  ['loadrtcdata_554',['loadRTCData',['../classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893',1,'EnigmaIOTNodeClass']]],\n  ['localled_555',['localLed',['../EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524',1,'EnigmaIOTNode.cpp']]],\n  ['lock_556',['LOCK',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48',1,'haEntity.h']]],\n  ['loop_557',['loop',['../classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671',1,'CONTROLLER_CLASS_NAME::loop() override'],['../classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5',1,'CONTROLLER_CLASS_NAME::loop()'],['../classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5',1,'CONTROLLER_CLASS_NAME::loop()'],['../classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5',1,'CONTROLLER_CLASS_NAME::loop()'],['../classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5',1,'CONTROLLER_CLASS_NAME::loop()'],['../classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5',1,'CONTROLLER_CLASS_NAME::loop()'],['../classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7',1,'GatewayOutput_dummy::loop()'],['../classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0',1,'GwOutput_MQTT::loop()'],['../classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf',1,'EnigmaIOTjsonController::loop()'],['../classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343',1,'GatewayOutput_generic::loop()'],['../EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;enigmaiot_node_nonsleepy.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['lost_5fmessages_558',['LOST_MESSAGES',['../GwOutput__mqtt_8h.html#a2aa30d8c4ad4f2895fefd1b1d425ee66',1,'GwOutput_mqtt.h']]],\n  ['lostmessages_559',['lostmessages',['../GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff',1,'GwOutput_generic.h']]],\n  ['license_560',['LICENSE',['../md_LICENSE.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_c.js",
    "content": "var searchData=\n[\n  ['mac_561',['mac',['../structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6',1,'node_instance::mac()'],['../classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2',1,'Node::mac()']]],\n  ['mac2str_562',['mac2str',['../helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f',1,'mac2str(const uint8_t *mac, char *extBuffer):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#aa4d5213c3c8ecf522b12f0469ffbe840',1,'mac2str(const uint8_t *mac, char *extBuffer=NULL):&#160;helperFunctions.cpp']]],\n  ['macstr_563',['MACSTR',['../helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849',1,'helperFunctions.cpp']]],\n  ['main_564',['main',['../namespaceEnigmaIoTUpdate.html#a0625a265d8105bb0e6aa1503f88e21cd',1,'EnigmaIoTUpdate']]],\n  ['managemessage_565',['manageMessage',['../classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e',1,'EnigmaIOTGatewayClass::manageMessage()'],['../classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93',1,'EnigmaIOTNodeClass::manageMessage()']]],\n  ['max_5fconsecutive_5fboot_566',['MAX_CONSECUTIVE_BOOT',['../EnigmaIOT-Button-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['max_5fdata_5fpayload_5flength_567',['MAX_DATA_PAYLOAD_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['max_5fdata_5fpayload_5fsize_568',['MAX_DATA_PAYLOAD_SIZE',['../EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['max_5finput_5fqueue_5fsize_569',['MAX_INPUT_QUEUE_SIZE',['../EnigmaIoTconfig_8h.html#a2909f9f6e8ecc4dfd6947911e4eb2d96',1,'EnigmaIoTconfig.h']]],\n  ['max_5fkey_5fvalidity_570',['MAX_KEY_VALIDITY',['../EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79',1,'EnigmaIoTconfig.h']]],\n  ['max_5fmessage_5flength_571',['MAX_MESSAGE_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['max_5fmqtt_5fpld_5flen_572',['MAX_MQTT_PLD_LEN',['../GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d',1,'GwOutput_mqtt.h']]],\n  ['max_5fmqtt_5fqueue_5fsize_573',['MAX_MQTT_QUEUE_SIZE',['../EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d',1,'EnigmaIoTconfig.h']]],\n  ['max_5fmqtt_5ftopic_5flen_574',['MAX_MQTT_TOPIC_LEN',['../GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9',1,'GwOutput_mqtt.h']]],\n  ['max_5fnode_5finactivity_575',['MAX_NODE_INACTIVITY',['../EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011',1,'EnigmaIoTconfig.h']]],\n  ['max_5forder_576',['MAX_ORDER',['../Filter_8h.html#ab08dffec08ac450d78d4c062b571939e',1,'Filter.h']]],\n  ['max_5fstr_5flen_577',['MAX_STR_LEN',['../helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6',1,'helperFunctions.cpp']]],\n  ['maxsize_578',['maxSize',['../classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa',1,'EnigmaIOTRingBuffer']]],\n  ['measuremessage_579',['measureMessage',['../classHAEntity.html#ad299ecdb73519da56e2f5439941af544',1,'HAEntity']]],\n  ['median_5ffilter_580',['MEDIAN_FILTER',['../Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91',1,'Filter.h']]],\n  ['medianfilter_581',['medianFilter',['../classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d',1,'FilterClass']]],\n  ['memstr_582',['memstr',['../EnigmaIOTGateway_8cpp.html#aab651c53aaa5c935e3cc662399d0f091',1,'EnigmaIOTGateway.cpp']]],\n  ['methodtostring_583',['methodToString',['../GatewayAPI_8cpp.html#a444bff15005e31fc8680af5c3a822984',1,'methodToString(WebRequestMethodComposite method):&#160;GatewayAPI.cpp'],['../GatewayAPI_8h.html#a444bff15005e31fc8680af5c3a822984',1,'methodToString(WebRequestMethodComposite method):&#160;GatewayAPI.cpp']]],\n  ['min_5forder_584',['MIN_ORDER',['../Filter_8h.html#a23bae2b7cd4008c90256be146e21cccf',1,'Filter.h']]],\n  ['min_5fsync_5faccuracy_585',['MIN_SYNC_ACCURACY',['../EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['mqtt_5fbuffer_5fsize_586',['MQTT_BUFFER_SIZE',['../GwOutput__mqtt_8h.html#a4f9d3fafe897148f4e44e0db74816a9c',1,'GwOutput_mqtt.h']]],\n  ['mqtt_5fclient_587',['mqtt_client',['../classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327',1,'GwOutput_MQTT']]],\n  ['mqtt_5fpass_588',['mqtt_pass',['../structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31',1,'mqttgw_config_t']]],\n  ['mqtt_5fport_589',['mqtt_port',['../structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd',1,'mqttgw_config_t']]],\n  ['mqtt_5fqueue_590',['mqtt_queue',['../classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163',1,'GwOutput_MQTT']]],\n  ['mqtt_5fqueue_5fitem_5ft_591',['mqtt_queue_item_t',['../structmqtt__queue__item__t.html',1,'']]],\n  ['mqtt_5fserver_592',['mqtt_server',['../structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326',1,'mqttgw_config_t']]],\n  ['mqtt_5fuser_593',['mqtt_user',['../structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe',1,'mqttgw_config_t']]],\n  ['mqttgw_5fconfig_594',['mqttgw_config',['../classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516',1,'GwOutput_MQTT']]],\n  ['mqttgw_5fconfig_5ft_595',['mqttgw_config_t',['../structmqttgw__config__t.html',1,'']]],\n  ['mqttpassparam_596',['mqttPassParam',['../classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53',1,'GwOutput_MQTT']]],\n  ['mqttportparam_597',['mqttPortParam',['../classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d',1,'GwOutput_MQTT']]],\n  ['mqttserverparam_598',['mqttServerParam',['../classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef',1,'GwOutput_MQTT']]],\n  ['mqttuserparam_599',['mqttUserParam',['../classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f',1,'GwOutput_MQTT']]],\n  ['msg_5fpack_600',['MSG_PACK',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc',1,'MSG_PACK():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba578494bedfca043a7f16b17ae27c75bc',1,'MSG_PACK():&#160;EnigmaIOTNode.h']]],\n  ['msg_5fqueue_5fitem_5ft_601',['msg_queue_item_t',['../structmsg__queue__item__t.html',1,'']]],\n  ['mypublickey_602',['myPublicKey',['../classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31',1,'EnigmaIOTGatewayClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_d.js",
    "content": "var searchData=\n[\n  ['name_5fans_603',['NAME_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb',1,'NodeList.h']]],\n  ['name_5fget_604',['NAME_GET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee',1,'NodeList.h']]],\n  ['name_5fok_605',['NAME_OK',['../NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0',1,'NodeList.h']]],\n  ['name_5fset_606',['NAME_SET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17',1,'NodeList.h']]],\n  ['netname_607',['netName',['../classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa',1,'GatewayOutput_generic']]],\n  ['network_5fname_5flength_608',['NETWORK_NAME_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['networkkey_609',['networkKey',['../structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f',1,'gateway_config_t::networkKey()'],['../structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd',1,'rtcmem_data_t::networkKey()']]],\n  ['networkname_610',['networkName',['../structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6',1,'gateway_config_t::networkName()'],['../structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d',1,'rtcmem_data_t::networkName()']]],\n  ['newnodeconnected_611',['newNodeConnected',['../EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948',1,'newNodeConnected(uint8_t *mac, uint16_t node_id, char *nodeName=NULL):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#aa1ed5eb542d16a6542d77742a8b62677',1,'newNodeConnected(uint8_t *mac, uint16_t node_id, char *nodeName=nullptr):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['newnodesend_612',['newNodeSend',['../classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4',1,'GatewayOutput_dummy::newNodeSend()'],['../classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c',1,'GwOutput_MQTT::newNodeSend()'],['../classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b',1,'GatewayOutput_generic::newNodeSend()']]],\n  ['no_5fdebug_613',['NO_DEBUG',['../EnigmaIOTdebug_8h.html#a424f1b989129c5519f4df8f61ad6dcaf',1,'EnigmaIOTdebug.h']]],\n  ['node_614',['Node',['../classNode.html',1,'Node'],['../classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067',1,'EnigmaIOTGatewayClass::node()'],['../classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435',1,'EnigmaIOTNodeClass::node()'],['../classNode.html#ad7a34779cad45d997bfd6d3d8043c75f',1,'Node::Node()'],['../classNode.html#a45db0ed8c3ce61c3cee9d2070e20493f',1,'Node::Node(node_t nodeData)']]],\n  ['node_2dota_2dupdate_2emd_615',['node-ota-update.md',['../node-ota-update_8md.html',1,'']]],\n  ['node_5fdata_616',['NODE_DATA',['../GwOutput__mqtt_8h.html#af1dcc05117b1f2ccb5922611c540e241',1,'GwOutput_mqtt.h']]],\n  ['node_5finstance_617',['node_instance',['../structnode__instance.html',1,'']]],\n  ['node_5fname_5flength_618',['NODE_NAME_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['node_5fname_5fresult_619',['NODE_NAME_RESULT',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf',1,'NODE_NAME_RESULT():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae69668f8ce604a1b3d09c3314cdba5bf',1,'NODE_NAME_RESULT():&#160;EnigmaIOTNode.h']]],\n  ['node_5fname_5fset_620',['NODE_NAME_SET',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224',1,'NODE_NAME_SET():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa766d5c890baa0b6a0e7e1e3f5cb0b224',1,'NODE_NAME_SET():&#160;EnigmaIOTNode.h']]],\n  ['node_5fstatus_621',['node_status',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a',1,'node_status():&#160;NodeList.h'],['../GwOutput__mqtt_8h.html#a82ea7d9552d7d2c2d977c578587e94dc',1,'NODE_STATUS():&#160;GwOutput_mqtt.h']]],\n  ['node_5ft_622',['node_t',['../NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6',1,'NodeList.h']]],\n  ['nodeaddrparam_623',['nodeAddrParam',['../GatewayAPI_8cpp.html#ad9a0cbae2e14a9562307948b2ac1434a',1,'GatewayAPI.cpp']]],\n  ['nodeconnectionledflashing_624',['nodeConnectionLedFlashing',['../EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa',1,'EnigmaIOTNode.cpp']]],\n  ['nodedisconnected_625',['nodeDisconnected',['../EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230',1,'nodeDisconnected(uint8_t *mac, gwInvalidateReason_t reason):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#ade106fbc95d08320451d9b901aafd230',1,'nodeDisconnected(uint8_t *mac, gwInvalidateReason_t reason):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['nodedisconnectedsend_626',['nodeDisconnectedSend',['../classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949',1,'GatewayOutput_dummy::nodeDisconnectedSend()'],['../classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a',1,'GwOutput_MQTT::nodeDisconnectedSend()'],['../classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58',1,'GatewayOutput_generic::nodeDisconnectedSend()']]],\n  ['nodeid_627',['nodeId',['../structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481',1,'rtcmem_data_t::nodeId()'],['../structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f',1,'node_instance::nodeId()'],['../classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0',1,'Node::nodeId()']]],\n  ['nodeidparam_628',['nodeIdParam',['../GatewayAPI_8cpp.html#affc0d6e756f8b8eb7c21751494b5e8b2',1,'GatewayAPI.cpp']]],\n  ['nodeinvalidatereason_5ft_629',['nodeInvalidateReason_t',['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6',1,'EnigmaIOTNode.h']]],\n  ['nodekey_630',['nodeKey',['../structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2',1,'rtcmem_data_t']]],\n  ['nodekeyvalid_631',['nodeKeyValid',['../structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463',1,'rtcmem_data_t']]],\n  ['nodelist_632',['NodeList',['../classNodeList.html',1,'NodeList'],['../classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17',1,'EnigmaIOTGatewayClass::nodelist()'],['../classNode.html#a796dbbcdb4e627658df143380ddb88fa',1,'Node::NodeList()'],['../classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f',1,'NodeList::NodeList()']]],\n  ['nodelist_2ecpp_633',['NodeList.cpp',['../NodeList_8cpp.html',1,'']]],\n  ['nodelist_2eh_634',['NodeList.h',['../NodeList_8h.html',1,'']]],\n  ['nodemessagetype_635',['nodeMessageType',['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f',1,'EnigmaIOTNode.h']]],\n  ['nodemessagetype_5ft_636',['nodeMessageType_t',['../EnigmaIOTNode_8h.html#acbdfeab1a5e492bc200768fa91041445',1,'EnigmaIOTNode.h']]],\n  ['nodename_637',['nodeName',['../structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d',1,'rtcmem_data_t::nodeName()'],['../structnode__instance.html#ad979924ffe46421c554052889ee590fb',1,'node_instance::nodeName()'],['../classNode.html#aa270ef450c28e630de129a94c6992805',1,'Node::nodeName()']]],\n  ['nodenameparam_638',['nodeNameParam',['../GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a',1,'GatewayAPI.cpp']]],\n  ['nodenamesetrespose_639',['nodeNameSetRespose',['../classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381',1,'EnigmaIOTGatewayClass']]],\n  ['nodenamestatus_5ft_640',['nodeNameStatus_t',['../NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9a',1,'NodeList.h']]],\n  ['nodeop_641',['nodeOp',['../classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec',1,'GatewayAPI']]],\n  ['nodepayloadencoding_5ft_642',['nodePayloadEncoding_t',['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb',1,'EnigmaIOTNode.h']]],\n  ['noderegisterstatus_643',['nodeRegisterStatus',['../structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496',1,'rtcmem_data_t']]],\n  ['nodes_644',['nodes',['../classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa',1,'NodeList']]],\n  ['notifyconnection_645',['notifyConnection',['../classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72',1,'EnigmaIOTNodeClass']]],\n  ['notifydata_646',['notifyData',['../classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9',1,'EnigmaIOTGatewayClass::notifyData()'],['../classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549',1,'EnigmaIOTNodeClass::notifyData()']]],\n  ['notifydisconnection_647',['notifyDisconnection',['../classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc',1,'EnigmaIOTNodeClass']]],\n  ['notifyhadiscovery_648',['notifyHADiscovery',['../classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967',1,'EnigmaIOTGatewayClass']]],\n  ['notifynewnode_649',['notifyNewNode',['../classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3',1,'EnigmaIOTGatewayClass']]],\n  ['notifynodedisconnection_650',['notifyNodeDisconnection',['../classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061',1,'EnigmaIOTGatewayClass']]],\n  ['notifyrestartrequested_651',['notifyRestartRequested',['../classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b',1,'EnigmaIOTGatewayClass']]],\n  ['notifywifimanagerexit_652',['notifyWiFiManagerExit',['../classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba',1,'EnigmaIOTGatewayClass::notifyWiFiManagerExit()'],['../classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4',1,'EnigmaIOTNodeClass::notifyWiFiManagerExit()']]],\n  ['notifywifimanagerstarted_653',['notifyWiFiManagerStarted',['../classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251',1,'EnigmaIOTGatewayClass::notifyWiFiManagerStarted()'],['../classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9',1,'EnigmaIOTNodeClass::notifyWiFiManagerStarted()']]],\n  ['ntp_5fserver_5f1_654',['NTP_SERVER_1',['../EnigmaIoTconfig_8h.html#ad2cbd556e432924a29a3efa1d13668af',1,'EnigmaIoTconfig.h']]],\n  ['ntp_5fserver_5f2_655',['NTP_SERVER_2',['../EnigmaIoTconfig_8h.html#a562447c925663fec9c7e923f6c46fa7d',1,'EnigmaIoTconfig.h']]],\n  ['num_5fnodes_656',['NUM_NODES',['../EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2',1,'EnigmaIoTconfig.h']]],\n  ['numelements_657',['numElements',['../classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237',1,'EnigmaIOTRingBuffer']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_e.js",
    "content": "var searchData=\n[\n  ['ota_20update_658',['OTA Update',['../md_docs_node-ota-update.html',1,'']]],\n  ['off_659',['OFF',['../SmartSwitchController_8h.html#a29e413f6725b2ba32d165ffaa35b01e5',1,'SmartSwitchController.h']]],\n  ['offset_660',['offset',['../classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95',1,'TimeManagerClass']]],\n  ['on_661',['ON',['../SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2',1,'SmartSwitchController.h']]],\n  ['on_5fconnect_662',['on_connect',['../namespaceEnigmaIoTUpdate.html#a9e979dfe91c5de2dfa6660efcf30bb9a',1,'EnigmaIoTUpdate']]],\n  ['on_5fmessage_663',['on_message',['../namespaceEnigmaIoTUpdate.html#a162ca4b2a6c3e338d7e86162b09eb13a',1,'EnigmaIoTUpdate']]],\n  ['on_5fstate_664',['ON_STATE',['../structsmartSwitchControllerHw__t.html#a4655115d731c63e4f4e98f3b2cf0f743',1,'smartSwitchControllerHw_t']]],\n  ['onconnected_665',['onConnected',['../classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f',1,'EnigmaIOTNodeClass']]],\n  ['onconnected_5ft_666',['onConnected_t',['../EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386',1,'EnigmaIOTNode.h']]],\n  ['ondatarcvd_667',['onDataRcvd',['../classComms__halClass.html#a0db88323996d12342a9c60143d90c51f',1,'Comms_halClass::onDataRcvd()'],['../classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77',1,'Espnow_halClass::onDataRcvd()']]],\n  ['ondatarx_668',['onDataRx',['../classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8',1,'EnigmaIOTGatewayClass::onDataRx()'],['../classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4',1,'EnigmaIOTNodeClass::onDataRx()']]],\n  ['ondatasent_669',['onDataSent',['../classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa',1,'Comms_halClass::onDataSent()'],['../classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b',1,'Espnow_halClass::onDataSent()']]],\n  ['ondisconnected_670',['onDisconnected',['../classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0',1,'EnigmaIOTNodeClass']]],\n  ['ondisconnected_5ft_671',['onDisconnected_t',['../EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9',1,'EnigmaIOTNode.h']]],\n  ['ondldata_672',['onDlData',['../classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9',1,'GwOutput_MQTT']]],\n  ['ondldata_5ft_673',['onDlData_t',['../GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b',1,'GwOutput_generic.h']]],\n  ['ondownlinkdata_674',['onDownlinkData',['../EnigmaIOTGatewayDummy_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8',1,'onDownlinkData(uint8_t *address, char *nodeName, control_message_type_t msgType, char *data, unsigned int len):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8',1,'onDownlinkData(uint8_t *address, char *nodeName, control_message_type_t msgType, char *data, unsigned int len):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['one_5fwire_5fbus_675',['ONE_WIRE_BUS',['../ds18b20Controller_8cpp.html#a4260ed8874da804fb9ef9abba200b487',1,'ds18b20Controller.cpp']]],\n  ['onewire_676',['oneWire',['../classCONTROLLER__CLASS__NAME.html#aa83d1a9fa08dfeb08690d132e77883db',1,'CONTROLLER_CLASS_NAME']]],\n  ['ongatewayrestartrequested_677',['onGatewayRestartRequested',['../classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db',1,'EnigmaIOTGatewayClass']]],\n  ['ongwdatarx_5ft_678',['onGwDataRx_t',['../EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b',1,'EnigmaIOTGateway.h']]],\n  ['onhadiscovery_679',['onHADiscovery',['../classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83',1,'EnigmaIOTGatewayClass']]],\n  ['onnewnode_680',['onNewNode',['../classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526',1,'EnigmaIOTGatewayClass']]],\n  ['onnewnode_5ft_681',['onNewNode_t',['../EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7',1,'EnigmaIOTGateway.h']]],\n  ['onnodedatarx_5ft_682',['onNodeDataRx_t',['../EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8',1,'EnigmaIOTNode.h']]],\n  ['onnodedisconnected_683',['onNodeDisconnected',['../classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2',1,'EnigmaIOTGatewayClass']]],\n  ['onnodedisconnected_5ft_684',['onNodeDisconnected_t',['../EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666',1,'EnigmaIOTGateway.h']]],\n  ['onnotfound_685',['onNotFound',['../classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef',1,'GatewayAPI']]],\n  ['onwifimanagerexit_686',['onWiFiManagerExit',['../classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48',1,'EnigmaIOTGatewayClass::onWiFiManagerExit()'],['../classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae',1,'EnigmaIOTNodeClass::onWiFiManagerExit()']]],\n  ['onwifimanagerexit_5ft_687',['onWiFiManagerExit_t',['../EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891',1,'onWiFiManagerExit_t():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012',1,'onWiFiManagerExit_t():&#160;EnigmaIOTNode.h']]],\n  ['onwifimanagerstarted_688',['onWiFiManagerStarted',['../classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca',1,'EnigmaIOTGatewayClass::onWiFiManagerStarted()'],['../classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799',1,'EnigmaIOTNodeClass::onWiFiManagerStarted()']]],\n  ['onwifimanagerstarted_5ft_689',['onWiFiManagerStarted_t',['../EnigmaIOTNode_8h.html#aeafba3e3725226cdcb14a23c4e57c97a',1,'EnigmaIOTNode.h']]],\n  ['ota_690',['OTA',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71',1,'NodeList.h']]],\n  ['ota_5fans_691',['OTA_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e',1,'NodeList.h']]],\n  ['ota_5fcheck_5ffail_692',['OTA_CHECK_FAIL',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513',1,'NodeList.h']]],\n  ['ota_5fcheck_5fok_693',['OTA_CHECK_OK',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc',1,'NodeList.h']]],\n  ['ota_5ferror_5frestart_694',['OTA_ERROR_RESTART',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434',1,'NodeList.h']]],\n  ['ota_5ffinished_695',['OTA_FINISHED',['../namespaceEnigmaIoTUpdate.html#a56955d84eb178a78a16db3ed6e2a1c7e',1,'EnigmaIoTUpdate.OTA_FINISHED()'],['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a',1,'OTA_FINISHED():&#160;NodeList.h']]],\n  ['ota_5fgw_5ftimeout_696',['OTA_GW_TIMEOUT',['../EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ota_5fout_5fof_5fsequence_697',['OTA_OUT_OF_SEQUENCE',['../namespaceEnigmaIoTUpdate.html#ad815631b097bdf448ecd824fc28bfec6',1,'EnigmaIoTUpdate.OTA_OUT_OF_SEQUENCE()'],['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236',1,'OTA_OUT_OF_SEQUENCE():&#160;NodeList.h']]],\n  ['ota_5fstart_5ferror_698',['OTA_START_ERROR',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450',1,'NodeList.h']]],\n  ['ota_5fstarted_699',['OTA_STARTED',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf',1,'NodeList.h']]],\n  ['ota_5fstatus_700',['ota_status',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4',1,'NodeList.h']]],\n  ['ota_5fstatus_5ft_701',['ota_status_t',['../NodeList_8h.html#afca510572b2bed862d3aae57a6eff6f7',1,'NodeList.h']]],\n  ['ota_5ftimeout_702',['OTA_TIMEOUT',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad',1,'NodeList.h']]],\n  ['ota_5ftimeout_5ftime_703',['OTA_TIMEOUT_TIME',['../EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['otaerror_704',['otaError',['../classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6',1,'EnigmaIOTNodeClass']]],\n  ['otafinished_705',['otaFinished',['../namespaceEnigmaIoTUpdate.html#a1efdbd8359ee1708af1bcf3be3eff850',1,'EnigmaIoTUpdate']]],\n  ['otaok_706',['otaOK',['../namespaceEnigmaIoTUpdate.html#af461562efece05d0467c0e17edd2e58f',1,'EnigmaIoTUpdate']]],\n  ['otaongoing_707',['OTAongoing',['../EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f',1,'EnigmaIOTGateway.cpp']]],\n  ['otaoutofsequenceerror_708',['otaOutOfSequenceError',['../namespaceEnigmaIoTUpdate.html#ade24b0154bfadccc5f69ee560a33de8b',1,'EnigmaIoTUpdate']]],\n  ['otaresulttopic_709',['otaResultTopic',['../namespaceEnigmaIoTUpdate.html#af04fd96058043d8861cd38175cb99e6c',1,'EnigmaIoTUpdate']]],\n  ['otarunning_710',['otaRunning',['../classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888',1,'EnigmaIOTNodeClass']]],\n  ['otasettopic_711',['otaSetTopic',['../namespaceEnigmaIoTUpdate.html#aefdb455c166193127480d7b5afe88a66',1,'EnigmaIoTUpdate']]],\n  ['out_5fqueue_712',['out_queue',['../classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92',1,'Espnow_halClass']]],\n  ['outputcontrolsend_713',['outputControlSend',['../classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a',1,'GatewayOutput_dummy::outputControlSend()'],['../classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84',1,'GwOutput_MQTT::outputControlSend()'],['../classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07',1,'GatewayOutput_generic::outputControlSend()']]],\n  ['outputdatasend_714',['outputDataSend',['../classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00',1,'GatewayOutput_dummy::outputDataSend()'],['../classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778',1,'GwOutput_MQTT::outputDataSend()'],['../classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5',1,'GatewayOutput_generic::outputDataSend()']]]\n];\n"
  },
  {
    "path": "docs/html/search/all_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/all_f.js",
    "content": "var searchData=\n[\n  ['packeterrors_715',['packetErrors',['../classNode.html#a4e2e4c6afb4bf93ca10e60d239fd87c5',1,'Node']]],\n  ['packetnumber_716',['packetNumber',['../classNode.html#aedfde4376c7c84dd8c88c2c530b3b102',1,'Node']]],\n  ['packetshour_717',['packetsHour',['../classNode.html#abc1ad898434142e44923f7220b6a2ae4',1,'Node']]],\n  ['payload_718',['payload',['../structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3',1,'mqtt_queue_item_t::payload()'],['../structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5',1,'comms_queue_item_t::payload()']]],\n  ['payload_5flen_719',['payload_len',['../structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71',1,'mqtt_queue_item_t::payload_len()'],['../structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860',1,'comms_queue_item_t::payload_len()']]],\n  ['peertype_5ft_720',['peerType_t',['../Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4',1,'Comms_hal.h']]],\n  ['per_721',['per',['../classNode.html#a2f8f6419cc10c972285178991b2cec78',1,'Node']]],\n  ['plainnetkey_722',['plainNetKey',['../classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded',1,'EnigmaIOTGatewayClass']]],\n  ['pop_723',['pop',['../classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8',1,'EnigmaIOTRingBuffer']]],\n  ['popcommsqueue_724',['popCommsQueue',['../classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1',1,'Espnow_halClass']]],\n  ['popinputmsgqueue_725',['popInputMsgQueue',['../classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b',1,'EnigmaIOTGatewayClass']]],\n  ['popmqttqueue_726',['popMQTTqueue',['../classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a',1,'GwOutput_MQTT']]],\n  ['post_5freg_5fdelay_727',['POST_REG_DELAY',['../EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed',1,'EnigmaIoTconfig.h']]],\n  ['pre_5freg_5fdelay_728',['PRE_REG_DELAY',['../EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a',1,'EnigmaIoTconfig.h']]],\n  ['printhexbuffer_729',['printHexBuffer',['../helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09',1,'printHexBuffer(const uint8_t *buffer, uint16_t len):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09',1,'printHexBuffer(const uint8_t *buffer, uint16_t len):&#160;helperFunctions.cpp']]],\n  ['printtoserial_730',['printToSerial',['../classNode.html#a36b675e4186420fb1f8e324fc0987cbd',1,'Node::printToSerial()'],['../classNodeList.html#a239930df15810784dab9a3284730a35f',1,'NodeList::printToSerial()']]],\n  ['privatedhkey_731',['privateDHKey',['../classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3',1,'CryptModule']]],\n  ['processbroadcastkeymessage_732',['processBroadcastKeyMessage',['../classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b',1,'EnigmaIOTNodeClass']]],\n  ['processclienthello_733',['processClientHello',['../classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350',1,'EnigmaIOTGatewayClass']]],\n  ['processclockrequest_734',['processClockRequest',['../classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07',1,'EnigmaIOTGatewayClass']]],\n  ['processclockresponse_735',['processClockResponse',['../classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67',1,'EnigmaIOTNodeClass']]],\n  ['processcontrolcommand_736',['processControlCommand',['../classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696',1,'EnigmaIOTNodeClass']]],\n  ['processcontrolmessage_737',['processControlMessage',['../classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767',1,'EnigmaIOTGatewayClass']]],\n  ['processdatamessage_738',['processDataMessage',['../classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130',1,'EnigmaIOTGatewayClass']]],\n  ['processdownstreamdata_739',['processDownstreamData',['../classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63',1,'EnigmaIOTNodeClass']]],\n  ['processgetnamecommand_740',['processGetNameCommand',['../classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c',1,'EnigmaIOTNodeClass']]],\n  ['processgetrssicommand_741',['processGetRSSICommand',['../classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd',1,'EnigmaIOTNodeClass']]],\n  ['processgetsleeptimecommand_742',['processGetSleepTimeCommand',['../classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274',1,'EnigmaIOTNodeClass']]],\n  ['processinvalidatekey_743',['processInvalidateKey',['../classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768',1,'EnigmaIOTNodeClass']]],\n  ['processnodenameset_744',['processNodeNameSet',['../classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0',1,'EnigmaIOTGatewayClass']]],\n  ['processotacommand_745',['processOTACommand',['../classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2',1,'EnigmaIOTNodeClass']]],\n  ['processrxcommand_746',['processRxCommand',['../classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override'],['../classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)'],['../classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)'],['../classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)'],['../classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)'],['../classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)'],['../classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca',1,'EnigmaIOTjsonController::processRxCommand()']]],\n  ['processrxcontroldata_747',['processRxControlData',['../EnigmaIOTGatewayDummy_8cpp.html#acecaff385e13802f95e84d1ece4f6322',1,'processRxControlData(char *macStr, uint8_t *data, uint8_t length):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#acecaff385e13802f95e84d1ece4f6322',1,'processRxControlData(char *macStr, uint8_t *data, uint8_t length):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['processrxdata_748',['processRxData',['../EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a15c150763c9e39ec5e7b94a5fddcb95f',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t encoding):&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;enigmaiot_node_nonsleepy.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c',1,'processRxData(uint8_t *mac, uint8_t *buffer, uint8_t length, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char *nodeName=NULL):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c',1,'processRxData(uint8_t *mac, uint8_t *buffer, uint8_t length, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char *nodeName=NULL):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['processserverhello_749',['processServerHello',['../classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0',1,'EnigmaIOTNodeClass']]],\n  ['processsetidentifycommand_750',['processSetIdentifyCommand',['../classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263',1,'EnigmaIOTNodeClass']]],\n  ['processsetnamecommand_751',['processSetNameCommand',['../classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035',1,'EnigmaIOTNodeClass']]],\n  ['processsetnameresponse_752',['processSetNameResponse',['../classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e',1,'EnigmaIOTNodeClass']]],\n  ['processsetresetconfigcommand_753',['processSetResetConfigCommand',['../classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d',1,'EnigmaIOTNodeClass']]],\n  ['processsetrestartcommand_754',['processSetRestartCommand',['../classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56',1,'EnigmaIOTNodeClass']]],\n  ['processsetsleeptimecommand_755',['processSetSleepTimeCommand',['../classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241',1,'EnigmaIOTNodeClass']]],\n  ['processunencrypteddatamessage_756',['processUnencryptedDataMessage',['../classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc',1,'EnigmaIOTGatewayClass']]],\n  ['processversioncommand_757',['processVersionCommand',['../classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615',1,'EnigmaIOTNodeClass']]],\n  ['prot_5fbuf_758',['PROT_BUF',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da4d6491239946f63d9cc27a2984c4fe59',1,'PROT_BUF():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba4d6491239946f63d9cc27a2984c4fe59',1,'PROT_BUF():&#160;EnigmaIOTNode.h']]],\n  ['protectota_759',['protectOTA',['../classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0',1,'EnigmaIOTNodeClass']]],\n  ['publicdhkey_760',['publicDHKey',['../classCryptModule.html#ae55611b17617615a79de5325d2c3c02d',1,'CryptModule']]],\n  ['publishmqtt_761',['publishMQTT',['../classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162',1,'GwOutput_MQTT']]],\n  ['push_762',['push',['../classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a',1,'EnigmaIOTRingBuffer']]],\n  ['pushreleased_763',['pushReleased',['../classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be',1,'CONTROLLER_CLASS_NAME']]],\n  ['pushtriggered_764',['pushTriggered',['../classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a',1,'CONTROLLER_CLASS_NAME']]]\n];\n"
  },
  {
    "path": "docs/html/search/classes_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"classes_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/classes_0.js",
    "content": "var searchData=\n[\n  ['comms_5fhalclass_1026',['Comms_halClass',['../classComms__halClass.html',1,'']]],\n  ['comms_5fqueue_5fitem_5ft_1027',['comms_queue_item_t',['../structcomms__queue__item__t.html',1,'']]],\n  ['controller_5fclass_5fname_1028',['CONTROLLER_CLASS_NAME',['../classCONTROLLER__CLASS__NAME.html',1,'']]],\n  ['cryptmodule_1029',['CryptModule',['../classCryptModule.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/classes_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"classes_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/classes_1.js",
    "content": "var searchData=\n[\n  ['enigmaiotgatewayclass_1030',['EnigmaIOTGatewayClass',['../classEnigmaIOTGatewayClass.html',1,'']]],\n  ['enigmaiotjsoncontroller_1031',['EnigmaIOTjsonController',['../classEnigmaIOTjsonController.html',1,'']]],\n  ['enigmaiotnodeclass_1032',['EnigmaIOTNodeClass',['../classEnigmaIOTNodeClass.html',1,'']]],\n  ['enigmaiotringbuffer_1033',['EnigmaIOTRingBuffer',['../classEnigmaIOTRingBuffer.html',1,'']]],\n  ['enigmaiotringbuffer_3c_20comms_5fqueue_5fitem_5ft_20_3e_1034',['EnigmaIOTRingBuffer&lt; comms_queue_item_t &gt;',['../classEnigmaIOTRingBuffer.html',1,'']]],\n  ['enigmaiotringbuffer_3c_20mqtt_5fqueue_5fitem_5ft_20_3e_1035',['EnigmaIOTRingBuffer&lt; mqtt_queue_item_t &gt;',['../classEnigmaIOTRingBuffer.html',1,'']]],\n  ['enigmaiotringbuffer_3c_20msg_5fqueue_5fitem_5ft_20_3e_1036',['EnigmaIOTRingBuffer&lt; msg_queue_item_t &gt;',['../classEnigmaIOTRingBuffer.html',1,'']]],\n  ['espnow_5fhalclass_1037',['Espnow_halClass',['../classEspnow__halClass.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/classes_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"classes_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/classes_2.js",
    "content": "var searchData=\n[\n  ['filterclass_1038',['FilterClass',['../classFilterClass.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/classes_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"classes_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/classes_3.js",
    "content": "var searchData=\n[\n  ['gateway_5fconfig_5ft_1039',['gateway_config_t',['../structgateway__config__t.html',1,'']]],\n  ['gatewayapi_1040',['GatewayAPI',['../classGatewayAPI.html',1,'']]],\n  ['gatewayoutput_5fdummy_1041',['GatewayOutput_dummy',['../classGatewayOutput__dummy.html',1,'']]],\n  ['gatewayoutput_5fgeneric_1042',['GatewayOutput_generic',['../classGatewayOutput__generic.html',1,'']]],\n  ['gwoutput_5fmqtt_1043',['GwOutput_MQTT',['../classGwOutput__MQTT.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/classes_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"classes_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/classes_4.js",
    "content": "var searchData=\n[\n  ['habinarysensor_1044',['HABinarySensor',['../classHABinarySensor.html',1,'']]],\n  ['hacover_1045',['HACover',['../classHACover.html',1,'']]],\n  ['haentity_1046',['HAEntity',['../classHAEntity.html',1,'']]],\n  ['hasensor_1047',['HASensor',['../classHASensor.html',1,'']]],\n  ['haswitch_1048',['HASwitch',['../classHASwitch.html',1,'']]],\n  ['hatrigger_1049',['HATrigger',['../classHATrigger.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/classes_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"classes_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/classes_5.js",
    "content": "var searchData=\n[\n  ['mqtt_5fqueue_5fitem_5ft_1050',['mqtt_queue_item_t',['../structmqtt__queue__item__t.html',1,'']]],\n  ['mqttgw_5fconfig_5ft_1051',['mqttgw_config_t',['../structmqttgw__config__t.html',1,'']]],\n  ['msg_5fqueue_5fitem_5ft_1052',['msg_queue_item_t',['../structmsg__queue__item__t.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/classes_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"classes_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/classes_6.js",
    "content": "var searchData=\n[\n  ['node_1053',['Node',['../classNode.html',1,'']]],\n  ['node_5finstance_1054',['node_instance',['../structnode__instance.html',1,'']]],\n  ['nodelist_1055',['NodeList',['../classNodeList.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/classes_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"classes_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/classes_7.js",
    "content": "var searchData=\n[\n  ['rtcmem_5fdata_5ft_1056',['rtcmem_data_t',['../structrtcmem__data__t.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/classes_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"classes_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/classes_8.js",
    "content": "var searchData=\n[\n  ['smartswitchcontrollerhw_5ft_1057',['smartSwitchControllerHw_t',['../structsmartSwitchControllerHw__t.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/classes_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"classes_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/classes_9.js",
    "content": "var searchData=\n[\n  ['timemanagerclass_1058',['TimeManagerClass',['../classTimeManagerClass.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_0.js",
    "content": "var searchData=\n[\n  ['_5fled_5foff_1987',['_LED_OFF',['../LedController_8h.html#af88429de4c8d15fc065a7ea1c07bedde',1,'LedController.h']]],\n  ['_5fled_5fon_1988',['_LED_ON',['../LedController_8h.html#af5793e03d17141eff8c3dc885f6cd0ea',1,'LedController.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_1.js",
    "content": "var searchData=\n[\n  ['blue_5fled_1989',['BLUE_LED',['../EnigmaIOT-Button-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;enigmaiot_node_nonsleepy.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a41c7fcbe209a1c236fd1b8e35bd8b55a',1,'BLUE_LED():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['builtin_5fled_1990',['BUILTIN_LED',['../EnigmaIOTGatewayDummy_8cpp.html#a4a71aecac635579082c10addb16df4a0',1,'EnigmaIOTGatewayDummy.cpp']]],\n  ['button_5fpin_1991',['BUTTON_PIN',['../ButtonController_8h.html#abc2ad14f0789907024ac765711ffd3da',1,'ButtonController.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_10.js",
    "content": "var searchData=\n[\n  ['verbose_2060',['VERBOSE',['../EnigmaIOTdebug_8h.html#a42f8c497a1968074f38bf5055c650dca',1,'EnigmaIOTdebug.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_11.js",
    "content": "var searchData=\n[\n  ['warn_2061',['WARN',['../EnigmaIOTdebug_8h.html#a271d8f7f52be750e5c744a394ec71344',1,'EnigmaIOTdebug.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_2.js",
    "content": "var searchData=\n[\n  ['chmsg_5flen_1992',['CHMSG_LEN',['../EnigmaIOTGateway_8cpp.html#a2bd3dd6873079bda9c22994760e817dc',1,'CHMSG_LEN():&#160;EnigmaIOTGateway.cpp'],['../EnigmaIOTNode_8cpp.html#a2bd3dd6873079bda9c22994760e817dc',1,'CHMSG_LEN():&#160;EnigmaIOTNode.cpp']]],\n  ['connect_5fto_5fwifi_5fap_1993',['CONNECT_TO_WIFI_AP',['../EnigmaIoTconfig_8h.html#a3be8ceb481b00916205f536e6028e2f5',1,'EnigmaIoTconfig.h']]],\n  ['controller_5fclass_5fname_1994',['CONTROLLER_CLASS_NAME',['../ButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;ButtonController.h'],['../DashButtonController_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;DashButtonController.h'],['../BasicController_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;BasicController.h'],['../LedController_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;LedController.h'],['../ds18b20Controller_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;ds18b20Controller.h'],['../SmartSwitchController_8h.html#a8257556540571a0fe1f5f05eb434af87',1,'CONTROLLER_CLASS_NAME():&#160;SmartSwitchController.h']]],\n  ['cryptmodule_5fdebug_5ftag_1995',['CRYPTMODULE_DEBUG_TAG',['../cryptModule_8h.html#a589540d306f62e7810a03bcfa28fbeef',1,'cryptModule.h']]],\n  ['cypher_5ftype_1996',['CYPHER_TYPE',['../EnigmaIoTconfigAdvanced_8h.html#a60424869b9d0955e8745158aadcd95b0',1,'EnigmaIoTconfigAdvanced.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_3.js",
    "content": "var searchData=\n[\n  ['dbg_1997',['DBG',['../EnigmaIOTdebug_8h.html#a49606be7356624568932ec81c0d429f4',1,'EnigmaIOTdebug.h']]],\n  ['debug_5fesp_5fport_1998',['DEBUG_ESP_PORT',['../EnigmaIoTconfig_8h.html#a59484fb7e3490df6600b5add60badbb7',1,'EnigmaIoTconfig.h']]],\n  ['debug_5flevel_1999',['DEBUG_LEVEL',['../EnigmaIoTconfig_8h.html#ac2d33ccaf63f5d5b66552b95426c0137',1,'EnigmaIoTconfig.h']]],\n  ['default_5fbutton_5fpin_2000',['DEFAULT_BUTTON_PIN',['../SmartSwitchController_8h.html#a64de7d7ca01199243ccc9876fcd596c6',1,'SmartSwitchController.h']]],\n  ['default_5frelay_5fpin_2001',['DEFAULT_RELAY_PIN',['../SmartSwitchController_8h.html#a77b012ee4a034b57e61216c2f25b92bf',1,'SmartSwitchController.h']]],\n  ['dstrootca_5fh_2002',['DSTROOTCA_H',['../dstrootca_8h.html#ac124c2449b0ec4b04fe4bc4e61632e33',1,'dstrootca.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_4.js",
    "content": "var searchData=\n[\n  ['enable_5frest_5fapi_2003',['ENABLE_REST_API',['../EnigmaIoTconfigAdvanced_8h.html#a7961bef0ea455a0913f7bf894b58eac4',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['enable_5fstatus_5fmessages_2004',['ENABLE_STATUS_MESSAGES',['../EnigmaIoTconfig_8h.html#ace3e2bfbccf2b3dafab4775343471413',1,'EnigmaIoTconfig.h']]],\n  ['enable_5fweb_5fapi_2005',['ENABLE_WEB_API',['../EnigmaIoTconfig_8h.html#ad736e65e20072f63bc4d21d745949962',1,'EnigmaIoTconfig.h']]],\n  ['error_2006',['ERROR',['../EnigmaIOTdebug_8h.html#a8fe83ac76edc595f6b98cd4a4127aed5',1,'EnigmaIOTdebug.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_5.js",
    "content": "var searchData=\n[\n  ['get_5fname_2007',['GET_NAME',['../GwOutput__mqtt_8h.html#af8bca12527bac4b474e2ccb5acd8691e',1,'GwOutput_mqtt.h']]],\n  ['get_5fname_5fans_2008',['GET_NAME_ANS',['../GwOutput__mqtt_8h.html#a043021359c728f4265337a8c21edfcdb',1,'GwOutput_mqtt.h']]],\n  ['get_5frssi_2009',['GET_RSSI',['../GwOutput__mqtt_8h.html#ae274ed0194e5685c280ab9148dbcba69',1,'GwOutput_mqtt.h']]],\n  ['get_5frssi_5fans_2010',['GET_RSSI_ANS',['../GwOutput__mqtt_8h.html#a44bf9b184af7520ec127c6b705991c8f',1,'GwOutput_mqtt.h']]],\n  ['get_5fsleep_2011',['GET_SLEEP',['../GwOutput__mqtt_8h.html#a8fa3ce9af2986feed0592ad3f82b0e8a',1,'GwOutput_mqtt.h']]],\n  ['get_5fsleep_5fans_2012',['GET_SLEEP_ANS',['../GwOutput__mqtt_8h.html#a8d48508893d087bd76ac4061b112cce7',1,'GwOutput_mqtt.h']]],\n  ['get_5fuser_5fdata_2013',['GET_USER_DATA',['../GwOutput__mqtt_8h.html#ac6dad41b3de63cebfef84fc4677cded8',1,'GwOutput_mqtt.h']]],\n  ['get_5fversion_2014',['GET_VERSION',['../GwOutput__mqtt_8h.html#ae9ef65fac5a6e3c6594811a7c8ee2291',1,'GwOutput_mqtt.h']]],\n  ['get_5fversion_5fans_2015',['GET_VERSION_ANS',['../GwOutput__mqtt_8h.html#a1bbd404f93aed82bc0d713238fa2bf6b',1,'GwOutput_mqtt.h']]],\n  ['gw_5fstatus_2016',['GW_STATUS',['../GwOutput__mqtt_8h.html#a13c1b13340e4cfcf8fa233d3f941853e',1,'GwOutput_mqtt.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_6.js",
    "content": "var searchData=\n[\n  ['ha_5ffirst_5fdiscovery_5fdelay_2017',['HA_FIRST_DISCOVERY_DELAY',['../EnigmaIoTconfigAdvanced_8h.html#a1ca4cd82c4372161db98aee89cff4868',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ha_5ffirst_5fdiscovery_5fdelay_5fsleepy_2018',['HA_FIRST_DISCOVERY_DELAY_SLEEPY',['../EnigmaIoTconfigAdvanced_8h.html#a49e01af100e8659b911c4dc6c8b30ef4',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ha_5fnext_5fdiscovery_5fdelay_2019',['HA_NEXT_DISCOVERY_DELAY',['../EnigmaIoTconfigAdvanced_8h.html#a21aa047809e9b061f5712589cf2136f9',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ha_5fnext_5fdiscovery_5fdelay_5fsleepy_2020',['HA_NEXT_DISCOVERY_DELAY_SLEEPY',['../EnigmaIoTconfigAdvanced_8h.html#a19844f57e8cb836e57d6418a76e6717f',1,'EnigmaIoTconfigAdvanced.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_7.js",
    "content": "var searchData=\n[\n  ['ikmsg_5flen_2021',['IKMSG_LEN',['../EnigmaIOTGateway_8cpp.html#a568f6925a7027004598c4ad288dd11f0',1,'IKMSG_LEN():&#160;EnigmaIOTGateway.cpp'],['../EnigmaIOTNode_8cpp.html#a568f6925a7027004598c4ad288dd11f0',1,'IKMSG_LEN():&#160;EnigmaIOTNode.cpp']]],\n  ['info_2022',['INFO',['../EnigmaIOTdebug_8h.html#ae1103fea1e1b3c41ca3322d5389f7162',1,'EnigmaIOTdebug.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_8.js",
    "content": "var searchData=\n[\n  ['led_5fbuiltin_2023',['LED_BUILTIN',['../EnigmaIOT-Button-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;enigmaiot_node_nonsleepy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a450a7c16ead7b3c7b882536b08f30a00',1,'LED_BUILTIN():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['led_5foff_2024',['LED_OFF',['../enigmaiot__led__flasher_8cpp.html#a80700bb63bd56ebabbb4728aa433fd29',1,'LED_OFF():&#160;enigmaiot_led_flasher.cpp'],['../EnigmaIOTGateway_8h.html#a80700bb63bd56ebabbb4728aa433fd29',1,'LED_OFF():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a80700bb63bd56ebabbb4728aa433fd29',1,'LED_OFF():&#160;EnigmaIOTNode.h']]],\n  ['led_5fon_2025',['LED_ON',['../enigmaiot__led__flasher_8cpp.html#af2e697ac60e05813d45ea2c9c9e79c25',1,'LED_ON():&#160;enigmaiot_led_flasher.cpp'],['../EnigmaIOTGateway_8h.html#af2e697ac60e05813d45ea2c9c9e79c25',1,'LED_ON():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#af2e697ac60e05813d45ea2c9c9e79c25',1,'LED_ON():&#160;EnigmaIOTNode.h']]],\n  ['led_5fpin_2026',['LED_PIN',['../LedController_8h.html#ab4553be4db9860d940f81d7447173b2f',1,'LedController.h']]],\n  ['lost_5fmessages_2027',['LOST_MESSAGES',['../GwOutput__mqtt_8h.html#a2aa30d8c4ad4f2895fefd1b1d425ee66',1,'GwOutput_mqtt.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_9.js",
    "content": "var searchData=\n[\n  ['macstr_2028',['MACSTR',['../helperFunctions_8cpp.html#ad6e69a2870c8f219cc679677af110849',1,'helperFunctions.cpp']]],\n  ['max_5forder_2029',['MAX_ORDER',['../Filter_8h.html#ab08dffec08ac450d78d4c062b571939e',1,'Filter.h']]],\n  ['max_5fstr_5flen_2030',['MAX_STR_LEN',['../helperFunctions_8cpp.html#a58ce36916c399104e18d32ff090f21c6',1,'helperFunctions.cpp']]],\n  ['min_5forder_2031',['MIN_ORDER',['../Filter_8h.html#a23bae2b7cd4008c90256be146e21cccf',1,'Filter.h']]],\n  ['mqtt_5fbuffer_5fsize_2032',['MQTT_BUFFER_SIZE',['../GwOutput__mqtt_8h.html#a4f9d3fafe897148f4e44e0db74816a9c',1,'GwOutput_mqtt.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_a.js",
    "content": "var searchData=\n[\n  ['no_5fdebug_2033',['NO_DEBUG',['../EnigmaIOTdebug_8h.html#a424f1b989129c5519f4df8f61ad6dcaf',1,'EnigmaIOTdebug.h']]],\n  ['node_5fdata_2034',['NODE_DATA',['../GwOutput__mqtt_8h.html#af1dcc05117b1f2ccb5922611c540e241',1,'GwOutput_mqtt.h']]],\n  ['node_5fstatus_2035',['NODE_STATUS',['../GwOutput__mqtt_8h.html#a82ea7d9552d7d2c2d977c578587e94dc',1,'GwOutput_mqtt.h']]],\n  ['ntp_5fserver_5f1_2036',['NTP_SERVER_1',['../EnigmaIoTconfig_8h.html#ad2cbd556e432924a29a3efa1d13668af',1,'EnigmaIoTconfig.h']]],\n  ['ntp_5fserver_5f2_2037',['NTP_SERVER_2',['../EnigmaIoTconfig_8h.html#a562447c925663fec9c7e923f6c46fa7d',1,'EnigmaIoTconfig.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_b.js",
    "content": "var searchData=\n[\n  ['off_2038',['OFF',['../SmartSwitchController_8h.html#a29e413f6725b2ba32d165ffaa35b01e5',1,'SmartSwitchController.h']]],\n  ['on_2039',['ON',['../SmartSwitchController_8h.html#ad76d1750a6cdeebd506bfcd6752554d2',1,'SmartSwitchController.h']]],\n  ['one_5fwire_5fbus_2040',['ONE_WIRE_BUS',['../ds18b20Controller_8cpp.html#a4260ed8874da804fb9ef9abba200b487',1,'ds18b20Controller.cpp']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_c.js",
    "content": "var searchData=\n[\n  ['red_5fled_2041',['RED_LED',['../EnigmaIOTGatewayDummy_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d',1,'RED_LED():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a073dbcb7f5bc4f4b45dc048b55eaff3d',1,'RED_LED():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['reset_5fpin_2042',['RESET_PIN',['../EnigmaIOT-Button-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a08bca59db4b190eaaea4d47b7562869c',1,'RESET_PIN():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['restart_5fnotif_2043',['RESTART_NOTIF',['../GwOutput__mqtt_8h.html#ae2f0ef8f36c0b685940124089172e6c3',1,'GwOutput_mqtt.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_d.js",
    "content": "var searchData=\n[\n  ['set_5fidentify_2044',['SET_IDENTIFY',['../GwOutput__mqtt_8h.html#a523454d3069bcc08356f43906870a8eb',1,'GwOutput_mqtt.h']]],\n  ['set_5fname_2045',['SET_NAME',['../GwOutput__mqtt_8h.html#a947ddc46cf5393a05a60422574c68dd0',1,'GwOutput_mqtt.h']]],\n  ['set_5fota_2046',['SET_OTA',['../GwOutput__mqtt_8h.html#a03d78690a77ad7c71da69356e13f4111',1,'GwOutput_mqtt.h']]],\n  ['set_5fota_5fans_2047',['SET_OTA_ANS',['../GwOutput__mqtt_8h.html#a82391b9a9738bbf392fbad554f7ef527',1,'GwOutput_mqtt.h']]],\n  ['set_5freset_5fans_2048',['SET_RESET_ANS',['../GwOutput__mqtt_8h.html#a7e8363a72c676c15de7221529988ee48',1,'GwOutput_mqtt.h']]],\n  ['set_5freset_5fconfig_2049',['SET_RESET_CONFIG',['../GwOutput__mqtt_8h.html#a9ed6c45eceed73f4dc32d6147957fed5',1,'GwOutput_mqtt.h']]],\n  ['set_5frestart_5fmcu_2050',['SET_RESTART_MCU',['../GwOutput__mqtt_8h.html#a2e46d7b49d143e76a290f06fc6892aa3',1,'GwOutput_mqtt.h']]],\n  ['set_5fsleep_2051',['SET_SLEEP',['../GwOutput__mqtt_8h.html#a0ffae85da5eb98e796fd818c50ac147a',1,'GwOutput_mqtt.h']]],\n  ['set_5fuser_5fdata_2052',['SET_USER_DATA',['../GwOutput__mqtt_8h.html#ad7c2efab8087395f360a163faecc66eb',1,'GwOutput_mqtt.h']]],\n  ['shmsg_5flen_2053',['SHMSG_LEN',['../EnigmaIOTGateway_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0',1,'SHMSG_LEN():&#160;EnigmaIOTGateway.cpp'],['../EnigmaIOTNode_8cpp.html#ab9b144ebcf09f24dd9b85f95e6d118d0',1,'SHMSG_LEN():&#160;EnigmaIOTNode.cpp']]],\n  ['sleepy_2054',['SLEEPY',['../EnigmaIOT-Button-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#af040306e47883ec3c541ae1a43f77a1d',1,'SLEEPY():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['support_5fha_5fdiscovery_2055',['SUPPORT_HA_DISCOVERY',['../EnigmaIoTconfigAdvanced_8h.html#a16e6dc75c832482efe3cc26d5f187201',1,'EnigmaIoTconfigAdvanced.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_e.js",
    "content": "var searchData=\n[\n  ['test_2056',['TEST',['../ds18b20Controller_8cpp.html#ab946e2e7f7679350627acfded8e2658b',1,'ds18b20Controller.cpp']]],\n  ['tzinfo_2057',['TZINFO',['../EnigmaIoTconfig_8h.html#a77cde0d6b3da9d409d46bdc85147724a',1,'EnigmaIoTconfig.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/defines_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"defines_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/defines_f.js",
    "content": "var searchData=\n[\n  ['use_5fflash_5finstead_5frtc_2058',['USE_FLASH_INSTEAD_RTC',['../EnigmaIoTconfigAdvanced_8h.html#a3adc46611e76e71d60021e6c87d11dcc',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['use_5fserial_2059',['USE_SERIAL',['../EnigmaIOT-Button-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2cb4a65422d8c7bd10ff4436e8a79b1b',1,'USE_SERIAL():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]]\n];\n"
  },
  {
    "path": "docs/html/search/enums_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enums_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enums_0.js",
    "content": "var searchData=\n[\n  ['bootrelaystatus_5ft_1790',['bootRelayStatus_t',['../SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a',1,'SmartSwitchController.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enums_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enums_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enums_1.js",
    "content": "var searchData=\n[\n  ['control_5fmessage_5ftype_1791',['control_message_type',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enums_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enums_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enums_2.js",
    "content": "var searchData=\n[\n  ['datamessagetype_5ft_1792',['dataMessageType_t',['../EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2',1,'EnigmaIOTNode.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enums_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enums_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enums_3.js",
    "content": "var searchData=\n[\n  ['filtertype_5ft_1793',['FilterType_t',['../Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7',1,'Filter.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enums_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enums_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enums_4.js",
    "content": "var searchData=\n[\n  ['gatewaymessagetype_5ft_1794',['gatewayMessageType_t',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613',1,'EnigmaIOTGateway.h']]],\n  ['gatewaypayloadencoding_5ft_1795',['gatewayPayloadEncoding_t',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8d',1,'EnigmaIOTGateway.h']]],\n  ['gwinvalidatereason_5ft_1796',['gwInvalidateReason_t',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977',1,'EnigmaIOTGateway.h']]],\n  ['gwoutput_5fdata_5ftype_1797',['GwOutput_data_type',['../GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636',1,'GwOutput_generic.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enums_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enums_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enums_5.js",
    "content": "var searchData=\n[\n  ['ha_5ftriggersubtype_5ft_1798',['ha_triggerSubtype_t',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421b',1,'haTrigger.h']]],\n  ['ha_5ftriggertype_5ft_1799',['ha_triggerType_t',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72c',1,'haTrigger.h']]],\n  ['habinarysensorclass_5ft_1800',['haBinarySensorClass_t',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7',1,'haEntity.h']]],\n  ['hacoverclass_5ft_1801',['haCoverClass_t',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14',1,'haEntity.h']]],\n  ['hadevicetype_5ft_1802',['haDeviceType_t',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76d',1,'haEntity.h']]],\n  ['hasensorclass_5ft_1803',['haSensorClass_t',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2',1,'haEntity.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enums_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enums_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enums_6.js",
    "content": "var searchData=\n[\n  ['node_5fstatus_1804',['node_status',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6a',1,'NodeList.h']]],\n  ['nodeinvalidatereason_5ft_1805',['nodeInvalidateReason_t',['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6',1,'EnigmaIOTNode.h']]],\n  ['nodemessagetype_1806',['nodeMessageType',['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7f',1,'EnigmaIOTNode.h']]],\n  ['nodenamestatus_5ft_1807',['nodeNameStatus_t',['../NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9a',1,'NodeList.h']]],\n  ['nodepayloadencoding_5ft_1808',['nodePayloadEncoding_t',['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eb',1,'EnigmaIOTNode.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enums_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enums_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enums_7.js",
    "content": "var searchData=\n[\n  ['ota_5fstatus_1809',['ota_status',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enums_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enums_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enums_8.js",
    "content": "var searchData=\n[\n  ['peertype_5ft_1810',['peerType_t',['../Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4',1,'Comms_hal.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enums_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enums_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enums_9.js",
    "content": "var searchData=\n[\n  ['restartreason_5ft_1811',['restartReason_t',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_0.js",
    "content": "var searchData=\n[\n  ['alarm_5fpanel_1812',['ALARM_PANEL',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da86dc47adbf1b1bee2f57a1f0dca1b762',1,'haEntity.h']]],\n  ['already_5fused_1813',['ALREADY_USED',['../NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aabd3eb5ed8742b0ed080b3e7e4a9a590d',1,'NodeList.h']]],\n  ['average_5ffilter_1814',['AVERAGE_FILTER',['../Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7ac9041674b910fde6edc5bf029cd3bbf9',1,'Filter.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_1.js",
    "content": "var searchData=\n[\n  ['binary_5fsensor_1815',['BINARY_SENSOR',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da11179cbe93f8ce9e3c34cf0a7ce1f2c3',1,'haEntity.h']]],\n  ['brcast_5fkey_1816',['BRCAST_KEY',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aec211b6bccb5a92d2d8012ffdb2b53f6',1,'NodeList.h']]],\n  ['broadcast_5fkey_5frequest_1817',['BROADCAST_KEY_REQUEST',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a45ed732c2c1b8f670d6730e6f7a684b5',1,'BROADCAST_KEY_REQUEST():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa45ed732c2c1b8f670d6730e6f7a684b5',1,'BROADCAST_KEY_REQUEST():&#160;EnigmaIOTNode.h']]],\n  ['broadcast_5fkey_5fresponse_1818',['BROADCAST_KEY_RESPONSE',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aebca9b745a0bd1dedae14258e54e1838',1,'BROADCAST_KEY_RESPONSE():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faebca9b745a0bd1dedae14258e54e1838',1,'BROADCAST_KEY_RESPONSE():&#160;EnigmaIOTNode.h']]],\n  ['bs_5fbattery_1819',['bs_battery',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a936a2e3c713f30841fa3c94b5e862a27',1,'haEntity.h']]],\n  ['bs_5fbattery_5fcharging_1820',['bs_battery_charging',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7af9b06db65e4058d6cb29ebe20ef49711',1,'haEntity.h']]],\n  ['bs_5fcold_1821',['bs_cold',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ad6cf9d4beaf78de9c79806143182aaae',1,'haEntity.h']]],\n  ['bs_5fconnectivity_1822',['bs_connectivity',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7affc59dae9089902b9346ed7b702cf074',1,'haEntity.h']]],\n  ['bs_5fdoor_1823',['bs_door',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a3cbf61659f7afd3b97e7604e25ed77fe',1,'haEntity.h']]],\n  ['bs_5fgarage_5fdoor_1824',['bs_garage_door',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a2b2ffc73a44d0ff421c6ea86c510384a',1,'haEntity.h']]],\n  ['bs_5fgas_1825',['bs_gas',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a156028a85b8f8c01fe0c2d9a00e75ea6',1,'haEntity.h']]],\n  ['bs_5fheat_1826',['bs_heat',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab5f568d895c351882ca46075c26efdfd',1,'haEntity.h']]],\n  ['bs_5flight_1827',['bs_light',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7abe95e949a022db1fb8609ae4ab3f0a99',1,'haEntity.h']]],\n  ['bs_5flock_1828',['bs_lock',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6a643332136943f46aca815f9768094e',1,'haEntity.h']]],\n  ['bs_5fmoisture_1829',['bs_moisture',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a6690ecc5acb7daf704e34b79847a127c',1,'haEntity.h']]],\n  ['bs_5fmotion_1830',['bs_motion',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8e402ec2025593ad5d594485b508d609',1,'haEntity.h']]],\n  ['bs_5fmoving_1831',['bs_moving',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7acc2eb4811a5e24fad8dc43f023301c4d',1,'haEntity.h']]],\n  ['bs_5fnone_1832',['bs_none',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab55a8009d7b4d5be2ef7b983b6edfec8',1,'haEntity.h']]],\n  ['bs_5foccupancy_1833',['bs_occupancy',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a78cc7b8e127f6b5eb968b479c7923047',1,'haEntity.h']]],\n  ['bs_5fopening_1834',['bs_opening',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a8fe09c2bf58bc92dcef06091ed5799a7',1,'haEntity.h']]],\n  ['bs_5fplug_1835',['bs_plug',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a92912ba7645859827d3882e3c8cdc7c5',1,'haEntity.h']]],\n  ['bs_5fpower_1836',['bs_power',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a42052722531262a68f4e9c4b5a386690',1,'haEntity.h']]],\n  ['bs_5fpresence_1837',['bs_presence',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7aafe566e9957e1a47f7819927491d3114',1,'haEntity.h']]],\n  ['bs_5fproblem_1838',['bs_problem',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab43ff56fda1e1dd8d6e73cb2a1cf22c5',1,'haEntity.h']]],\n  ['bs_5fsafety_1839',['bs_safety',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ab2127b1f167b95d30dfa6d29a936cf17',1,'haEntity.h']]],\n  ['bs_5fsmoke_1840',['bs_smoke',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a5bc1d83fa8d0ec2553e1d3132a76995c',1,'haEntity.h']]],\n  ['bs_5fsound_1841',['bs_sound',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a56a09cfe03eb14e08b402decb86b37cf',1,'haEntity.h']]],\n  ['bs_5fvibration_1842',['bs_vibration',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7ac55d7cd82731f977e4993e30432a8807',1,'haEntity.h']]],\n  ['bs_5fwindow_1843',['bs_window',['../haEntity_8h.html#a5e77b90b0b440c9d440d4912c1c0c3e7a83f32ecfcfe2398b44e3bfb92663e26a',1,'haEntity.h']]],\n  ['bson_1844',['BSON',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da311c13f8df1217b0cd4d5537cb91311f',1,'BSON():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba311c13f8df1217b0cd4d5537cb91311f',1,'BSON():&#160;EnigmaIOTNode.h']]],\n  ['button_5f1_1845',['button_1',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bab88fb2cedb251997ed82375d9931b0e7',1,'haTrigger.h']]],\n  ['button_5f2_1846',['button_2',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9482c259cff58c7784eed9f35f927400',1,'haTrigger.h']]],\n  ['button_5f3_1847',['button_3',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba791944b6979069dd5f7d962556ddc604',1,'haTrigger.h']]],\n  ['button_5f4_1848',['button_4',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba9db0c27b13d686faf831f1515a9a5340',1,'haTrigger.h']]],\n  ['button_5f5_1849',['button_5',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba45efbed920db6ce550810ced085e9b18',1,'haTrigger.h']]],\n  ['button_5f6_1850',['button_6',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba75095d206ff15c14e627d1f21ed3dcd8',1,'haTrigger.h']]],\n  ['button_5fdouble_5fpress_1851',['button_double_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca9cfbd94dabbbdcb25bdff5a9fbcead58',1,'haTrigger.h']]],\n  ['button_5flong_5fpress_1852',['button_long_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cadc63942310d712596e55a8f04680fa60',1,'haTrigger.h']]],\n  ['button_5flong_5frelease_1853',['button_long_release',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca762074f9733bc47a3bc38344c36d1a29',1,'haTrigger.h']]],\n  ['button_5fquadruple_5fpress_1854',['button_quadruple_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca000c3a771115a30a1c497a9cb8a19014',1,'haTrigger.h']]],\n  ['button_5fquintuple_5fpress_1855',['button_quintuple_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae05ec267f99b1d000eeef2b40c183ed6',1,'haTrigger.h']]],\n  ['button_5fshort_5fpress_1856',['button_short_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72caf1dd6651bf9013b816cca0dd1759b5e2',1,'haTrigger.h']]],\n  ['button_5fshort_5frelease_1857',['button_short_release',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72ca6ba5b8432af7d558ba016c02ee898712',1,'haTrigger.h']]],\n  ['button_5ftriple_5fpress_1858',['button_triple_press',['../haTrigger_8h.html#ada6f3c61fe343e74af1f533d73d3c72cae310001a87f47b0d5398c055f0dac403',1,'haTrigger.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_10.js",
    "content": "var searchData=\n[\n  ['tag_5fscanner_1965',['TAG_SCANNER',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9bb18e11e9cbd7e2405ccf8f95c4a607',1,'haEntity.h']]],\n  ['too_5flong_1966',['TOO_LONG',['../NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1e7470fde4a4906c98bc6f18a5d6c51f',1,'NodeList.h']]],\n  ['turn_5foff_1967',['turn_off',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421ba83ee6b65c9abe8a11ed4d9692b0a5ae7',1,'haTrigger.h']]],\n  ['turn_5fon_1968',['turn_on',['../haTrigger_8h.html#a4f9c1c9c9344d12ea72582134ba7421bac8473ad51167f78c23ee4cb4719852f1',1,'haTrigger.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_11.js",
    "content": "var searchData=\n[\n  ['undefined_1969',['UNDEFINED',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da605159e8a4c32319fd69b5d151369d93',1,'haEntity.h']]],\n  ['unencrypted_5fnode_5fdata_1970',['UNENCRYPTED_NODE_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a84d08335ed131183ff525c55c14f3148',1,'UNENCRYPTED_NODE_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa84d08335ed131183ff525c55c14f3148',1,'UNENCRYPTED_NODE_DATA():&#160;EnigmaIOTNode.h']]],\n  ['unknown_5ferror_1971',['UNKNOWN_ERROR',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a8216aa4b3a817cdf8c15ed32aa946e83',1,'UNKNOWN_ERROR():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a8216aa4b3a817cdf8c15ed32aa946e83',1,'UNKNOWN_ERROR():&#160;EnigmaIOTNode.h']]],\n  ['unknown_5freason_1972',['UNKNOWN_REASON',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601ab309433c1c035ba010b3aff8756d1637',1,'NodeList.h']]],\n  ['unregistered_1973',['UNREGISTERED',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b',1,'NodeList.h']]],\n  ['unregistered_5fnode_1974',['UNREGISTERED_NODE',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a975e594ca3839a0687f31cfbbdb6c90f',1,'UNREGISTERED_NODE():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a975e594ca3839a0687f31cfbbdb6c90f',1,'UNREGISTERED_NODE():&#160;EnigmaIOTNode.h']]],\n  ['user_5freset_1975',['USER_RESET',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601ad1616fcb099e2febf3ffc5d115a99441',1,'NodeList.h']]],\n  ['userdata_5fget_1976',['USERDATA_GET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a6f9d7725dd746da9da11c3ffb962ad27',1,'NodeList.h']]],\n  ['userdata_5fset_1977',['USERDATA_SET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3dd9efceb547a4ec14bdb1d58c4844be',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_12.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_12.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_12.js",
    "content": "var searchData=\n[\n  ['vacuum_1978',['VACUUM',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da227181ec341c2ea61382da6028f2754f',1,'haEntity.h']]],\n  ['version_1979',['VERSION',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a52f49aba124a600ad9581caabe6a099a',1,'NodeList.h']]],\n  ['version_5fans_1980',['VERSION_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4add26dcee8bcd784582e3cc6bfcf988fe',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_13.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_13.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_13.js",
    "content": "var searchData=\n[\n  ['wait_5ffor_5fdownlink_1981',['WAIT_FOR_DOWNLINK',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad9a6dd624e6987b425f7cc371d0f458f',1,'NodeList.h']]],\n  ['wait_5ffor_5fserver_5fhello_1982',['WAIT_FOR_SERVER_HELLO',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa54286ecc8277fb2878edbd8381deff6f',1,'NodeList.h']]],\n  ['wrong_5fclient_5fhello_1983',['WRONG_CLIENT_HELLO',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977ad6e9d0b3e3d479305eb2ce4233f4eca6',1,'WRONG_CLIENT_HELLO():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6ad6e9d0b3e3d479305eb2ce4233f4eca6',1,'WRONG_CLIENT_HELLO():&#160;EnigmaIOTNode.h']]],\n  ['wrong_5fdata_1984',['WRONG_DATA',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a4d7f512e433223ce2caa44e787a2ddff',1,'WRONG_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a4d7f512e433223ce2caa44e787a2ddff',1,'WRONG_DATA():&#160;EnigmaIOTNode.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_2.js",
    "content": "var searchData=\n[\n  ['camera_1859',['CAMERA',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76dada31f516cdf218b68b790fb31e8a6956',1,'haEntity.h']]],\n  ['cayennelpp_1860',['CAYENNELPP',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da3d171f2ae3fd4bb6ad27448ecac8c7c4',1,'CAYENNELPP():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba3d171f2ae3fd4bb6ad27448ecac8c7c4',1,'CAYENNELPP():&#160;EnigmaIOTNode.h']]],\n  ['cbor_1861',['CBOR',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da56f7b9e0a4250b6a5c73811ae092e686',1,'CBOR():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba56f7b9e0a4250b6a5c73811ae092e686',1,'CBOR():&#160;EnigmaIOTNode.h']]],\n  ['client_5fhello_1862',['CLIENT_HELLO',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a0c8da6c451065bed79ea70684e6f3fca',1,'CLIENT_HELLO():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa0c8da6c451065bed79ea70684e6f3fca',1,'CLIENT_HELLO():&#160;EnigmaIOTNode.h']]],\n  ['clock_5frequest_1863',['CLOCK_REQUEST',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a50ab02cc83b80322e63edd2e2779a735',1,'CLOCK_REQUEST():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa50ab02cc83b80322e63edd2e2779a735',1,'CLOCK_REQUEST():&#160;EnigmaIOTNode.h']]],\n  ['clock_5fresponse_1864',['CLOCK_RESPONSE',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a597b515e2c48496c513e6d502a7528c0',1,'CLOCK_RESPONSE():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa597b515e2c48496c513e6d502a7528c0',1,'CLOCK_RESPONSE():&#160;EnigmaIOTNode.h']]],\n  ['comm_5fgateway_1865',['COMM_GATEWAY',['../Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a7ee38eec056c6cb849a066a7a4e9d3e0',1,'Comms_hal.h']]],\n  ['comm_5fnode_1866',['COMM_NODE',['../Comms__hal_8h.html#ae3f1dec7ee0f3731002fa17598e6e7b4a460e495e522978c8c19f3904a623c5c5',1,'Comms_hal.h']]],\n  ['config_5freset_1867',['CONFIG_RESET',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601af4b7eabf7d198b2f9b47d8c7a36c7d0f',1,'NodeList.h']]],\n  ['control_5fdata_1868',['CONTROL_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a6b9b36c3722a1256ac7fa097bf10f4de',1,'CONTROL_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa6b9b36c3722a1256ac7fa097bf10f4de',1,'CONTROL_DATA():&#160;EnigmaIOTNode.h']]],\n  ['control_5ftype_1869',['CONTROL_TYPE',['../EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a26f7e9eda4c234f149d2064ed6d81e96',1,'EnigmaIOTNode.h']]],\n  ['cover_1870',['COVER',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da3e42dd1b6613a3294c0cb937ebe6b989',1,'haEntity.h']]],\n  ['cover_5fawning_1871',['cover_awning',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a74a13425807ab6029b4df1f86a5a551c',1,'haEntity.h']]],\n  ['cover_5fblind_1872',['cover_blind',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8d35861479e88df4aea44d7f15867e5e',1,'haEntity.h']]],\n  ['cover_5fcurtain_1873',['cover_curtain',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14af34e774d640d4476601980b8fdb63208',1,'haEntity.h']]],\n  ['cover_5fdamper_1874',['cover_damper',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14ac9990e5a7d512b779dd893901598479f',1,'haEntity.h']]],\n  ['cover_5fdoor_1875',['cover_door',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a8edd06fc26028bb3f014b659232a040a',1,'haEntity.h']]],\n  ['cover_5fgarage_1876',['cover_garage',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a81f3c4d52f615867ac8fbf036e782fb1',1,'haEntity.h']]],\n  ['cover_5fgate_1877',['cover_gate',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14afe540b1b14eba377f9897ed5362a9770',1,'haEntity.h']]],\n  ['cover_5fnone_1878',['cover_none',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a82fac0f4a4ec8e409b3931149fdd434e',1,'haEntity.h']]],\n  ['cover_5fshade_1879',['cover_shade',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a504364c95381d9e33a66dc3c9b00c46d',1,'haEntity.h']]],\n  ['cover_5fshutter_1880',['cover_shutter',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a09e316355a9e5eee9e4757ecd2d6ebf3',1,'haEntity.h']]],\n  ['cover_5fwindow_1881',['cover_window',['../haEntity_8h.html#a4068d7314037bd1d4d5b24c9cf6f8e14a7140794b952fb594c7501da417477bb4',1,'haEntity.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_3.js",
    "content": "var searchData=\n[\n  ['data_1882',['data',['../GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a604ac82e88d7a367d4c2830411520c2b',1,'GwOutput_generic.h']]],\n  ['data_5ftype_1883',['DATA_TYPE',['../EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2a66b2cf49a1e6f25c381fd9602bed19d6',1,'EnigmaIOTNode.h']]],\n  ['device_5ftracker_1884',['DEVICE_TRACKER',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da68bc7b1808d1b2a923f76d5fe34b613c',1,'haEntity.h']]],\n  ['device_5ftrigger_1885',['DEVICE_TRIGGER',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9d2a31821cef38922da5a67e03c1013e',1,'haEntity.h']]],\n  ['downstream_5fbrcast_5fctrl_5fdata_1886',['DOWNSTREAM_BRCAST_CTRL_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ade8205c810264376dfc45dc2b72e116c',1,'DOWNSTREAM_BRCAST_CTRL_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fade8205c810264376dfc45dc2b72e116c',1,'DOWNSTREAM_BRCAST_CTRL_DATA():&#160;EnigmaIOTNode.h']]],\n  ['downstream_5fbrcast_5fdata_5fget_1887',['DOWNSTREAM_BRCAST_DATA_GET',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae5aa3bb71dda4aa9ba38ca2a5eeba422',1,'DOWNSTREAM_BRCAST_DATA_GET():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae5aa3bb71dda4aa9ba38ca2a5eeba422',1,'DOWNSTREAM_BRCAST_DATA_GET():&#160;EnigmaIOTNode.h']]],\n  ['downstream_5fbrcast_5fdata_5fset_1888',['DOWNSTREAM_BRCAST_DATA_SET',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a3b0c314d51c09e5960e07704bb05f4ab',1,'DOWNSTREAM_BRCAST_DATA_SET():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa3b0c314d51c09e5960e07704bb05f4ab',1,'DOWNSTREAM_BRCAST_DATA_SET():&#160;EnigmaIOTNode.h']]],\n  ['downstream_5fctrl_5fdata_1889',['DOWNSTREAM_CTRL_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ad2c18ef749d0eca5f53ecfb0fb0af0bc',1,'DOWNSTREAM_CTRL_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fad2c18ef749d0eca5f53ecfb0fb0af0bc',1,'DOWNSTREAM_CTRL_DATA():&#160;EnigmaIOTNode.h']]],\n  ['downstream_5fdata_5fget_1890',['DOWNSTREAM_DATA_GET',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ac8a74f458aed6681bf199f1ce2f9eb03',1,'DOWNSTREAM_DATA_GET():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fac8a74f458aed6681bf199f1ce2f9eb03',1,'DOWNSTREAM_DATA_GET():&#160;EnigmaIOTNode.h']]],\n  ['downstream_5fdata_5fset_1891',['DOWNSTREAM_DATA_SET',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a21ca6763c97e4804ee6957d039443d2d',1,'DOWNSTREAM_DATA_SET():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa21ca6763c97e4804ee6957d039443d2d',1,'DOWNSTREAM_DATA_SET():&#160;EnigmaIOTNode.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_4.js",
    "content": "var searchData=\n[\n  ['empty_5fname_1892',['EMPTY_NAME',['../NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa1ee63461cc9c0098b6e9e463d971f1f9',1,'NodeList.h']]],\n  ['enigmaiot_1893',['ENIGMAIOT',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da8659eeed31ac2f38d8a14ee36175d175',1,'EnigmaIOTGateway.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_5.js",
    "content": "var searchData=\n[\n  ['fan_1894',['FAN',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da9c9f442fa6e4d2b297452bc0235d4f73',1,'haEntity.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_6.js",
    "content": "var searchData=\n[\n  ['ha_5fdisc_5ftype_1895',['HA_DISC_TYPE',['../EnigmaIOTNode_8h.html#a3716f5ccb3d0e7f9222a842f67b9d0a2af6cf7c4e34dc4cb2aca96d3b4a09cacd',1,'EnigmaIOTNode.h']]],\n  ['ha_5fdiscovery_5fmessage_1896',['HA_DISCOVERY_MESSAGE',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a01b2a3fb2e751c9536ae814b4b8919c3',1,'HA_DISCOVERY_MESSAGE():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa01b2a3fb2e751c9536ae814b4b8919c3',1,'HA_DISCOVERY_MESSAGE():&#160;EnigmaIOTNode.h']]],\n  ['hvac_1897',['HVAC',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da15423c2c19d137e7d386efeff1a924b2',1,'haEntity.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_7.js",
    "content": "var searchData=\n[\n  ['identify_1898',['IDENTIFY',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a3b53675250beaefa566e7ff804d9f5d6',1,'NodeList.h']]],\n  ['init_1899',['INIT',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa0cb1b2c6a7db1f1084886c98909a3f36',1,'NodeList.h']]],\n  ['invalid_1900',['INVALID',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aef2863a469df3ea6871d640e3669a2f2',1,'NodeList.h']]],\n  ['invalidate_5fkey_1901',['INVALIDATE_KEY',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a32637f9c9b67f884990ed21097ebc543',1,'INVALIDATE_KEY():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa32637f9c9b67f884990ed21097ebc543',1,'INVALIDATE_KEY():&#160;EnigmaIOTNode.h']]],\n  ['irrelevant_1902',['IRRELEVANT',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601a7ab4f74994f981fa208cb6bd567fe087',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_8.js",
    "content": "var searchData=\n[\n  ['key_5fexpired_1903',['KEY_EXPIRED',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977a09a1d3d5daa36af5469fa79c12a027fe',1,'KEY_EXPIRED():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a1c3e9c34675da8090182cab1de105bc6a09a1d3d5daa36af5469fa79c12a027fe',1,'KEY_EXPIRED():&#160;EnigmaIOTNode.h']]],\n  ['kicked_1904',['KICKED',['../EnigmaIOTGateway_8h.html#a4272866ccf327ab11a97c334d16cf977aae112b2131f8b1534ffbb23597e440e6',1,'EnigmaIOTGateway.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_9.js",
    "content": "var searchData=\n[\n  ['light_1905',['LIGHT',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76daf917d6c11c85b4ac32e30d1cc9da25eb',1,'haEntity.h']]],\n  ['lock_1906',['LOCK',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da438b68412f24003b09e0993b62dc7b48',1,'haEntity.h']]],\n  ['lostmessages_1907',['lostmessages',['../GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a578bc29a6176784c297413e1c5f78fff',1,'GwOutput_generic.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_a.js",
    "content": "var searchData=\n[\n  ['median_5ffilter_1908',['MEDIAN_FILTER',['../Filter_8h.html#a0c87b1dd8bef5bbb8464d1652f929ff7a2cd10a4b2a1d39cab5a13aede9b33e91',1,'Filter.h']]],\n  ['msg_5fpack_1909',['MSG_PACK',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da578494bedfca043a7f16b17ae27c75bc',1,'MSG_PACK():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba578494bedfca043a7f16b17ae27c75bc',1,'MSG_PACK():&#160;EnigmaIOTNode.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_b.js",
    "content": "var searchData=\n[\n  ['name_5fans_1910',['NAME_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ac8f0b49ac90edfbfa5d65d1a7eb72bdb',1,'NodeList.h']]],\n  ['name_5fget_1911',['NAME_GET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a878e5d0640951fb77c3fb2d3533fe9ee',1,'NodeList.h']]],\n  ['name_5fok_1912',['NAME_OK',['../NodeList_8h.html#a1c9a1577fe153d9fa2548bd7c0b04b9aa4493131e6263d0e185304838b73552e0',1,'NodeList.h']]],\n  ['name_5fset_1913',['NAME_SET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a83de809daf9debe54298977470c4cb17',1,'NodeList.h']]],\n  ['node_5fname_5fresult_1914',['NODE_NAME_RESULT',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613ae69668f8ce604a1b3d09c3314cdba5bf',1,'NODE_NAME_RESULT():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fae69668f8ce604a1b3d09c3314cdba5bf',1,'NODE_NAME_RESULT():&#160;EnigmaIOTNode.h']]],\n  ['node_5fname_5fset_1915',['NODE_NAME_SET',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a766d5c890baa0b6a0e7e1e3f5cb0b224',1,'NODE_NAME_SET():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa766d5c890baa0b6a0e7e1e3f5cb0b224',1,'NODE_NAME_SET():&#160;EnigmaIOTNode.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_c.js",
    "content": "var searchData=\n[\n  ['ota_1916',['OTA',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4af80e473af8c30c1a5b46b31b16a98d71',1,'NodeList.h']]],\n  ['ota_5fans_1917',['OTA_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4acae0d211be2418b0658ab3434b84835e',1,'NodeList.h']]],\n  ['ota_5fcheck_5ffail_1918',['OTA_CHECK_FAIL',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a9a70526562f0658d24c805c22d54a513',1,'NodeList.h']]],\n  ['ota_5fcheck_5fok_1919',['OTA_CHECK_OK',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a07aff2a31f86d97f94267367f78113dc',1,'NodeList.h']]],\n  ['ota_5ferror_5frestart_1920',['OTA_ERROR_RESTART',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601a519d98e7a592355e986f3b51d3c30434',1,'NodeList.h']]],\n  ['ota_5ffinished_1921',['OTA_FINISHED',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a2b1864027e692829ee112bf2bd42b88a',1,'NodeList.h']]],\n  ['ota_5fout_5fof_5fsequence_1922',['OTA_OUT_OF_SEQUENCE',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a0bac1ff6d740d59bb4d8298120c7e236',1,'NodeList.h']]],\n  ['ota_5fstart_5ferror_1923',['OTA_START_ERROR',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a3e70b739fe1b1afba9f135931e792450',1,'NodeList.h']]],\n  ['ota_5fstarted_1924',['OTA_STARTED',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4aabbced4dc6a2570f1e2860a618bb83cf',1,'NodeList.h']]],\n  ['ota_5ftimeout_1925',['OTA_TIMEOUT',['../NodeList_8h.html#adf9286a280a40f6ac98ad07d0ba308c4a5b388e1500c49706a49379d6710553ad',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_d.js",
    "content": "var searchData=\n[\n  ['prot_5fbuf_1926',['PROT_BUF',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da4d6491239946f63d9cc27a2984c4fe59',1,'PROT_BUF():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba4d6491239946f63d9cc27a2984c4fe59',1,'PROT_BUF():&#160;EnigmaIOTNode.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_e.js",
    "content": "var searchData=\n[\n  ['raw_1927',['RAW',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8dabdeded99fe7d3f2773014a9a2cfb73d7',1,'RAW():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669ebabdeded99fe7d3f2773014a9a2cfb73d7',1,'RAW():&#160;EnigmaIOTNode.h']]],\n  ['registered_1928',['REGISTERED',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa89af859e5ad61a519a9e407a67b26568',1,'NodeList.h']]],\n  ['relay_5foff_1929',['RELAY_OFF',['../SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf7b0b99355931f08cb01f2df09edb57f',1,'SmartSwitchController.h']]],\n  ['relay_5fon_1930',['RELAY_ON',['../SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aa171ec95a8d90b0a5dc5dbc66869befa2',1,'SmartSwitchController.h']]],\n  ['reset_1931',['RESET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a589b7d94a3d91d145720e2fed0eb3a05',1,'NodeList.h']]],\n  ['reset_5fans_1932',['RESET_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4aff67e54361d4815a1ecdb3824986f445',1,'NodeList.h']]],\n  ['restart_5fafter_5fota_1933',['RESTART_AFTER_OTA',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601afd0bff819d68cc36c4af673885b864d6',1,'NodeList.h']]],\n  ['restart_5fconfirm_1934',['RESTART_CONFIRM',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a003a4c40de03d7e675a62ee0ce3c4e23',1,'NodeList.h']]],\n  ['restart_5fnode_1935',['RESTART_NODE',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a097f6e05e093104ec6784476d88639b4',1,'NodeList.h']]],\n  ['restart_5frequested_1936',['RESTART_REQUESTED',['../NodeList_8h.html#a410abac5350706d6651d4e9242730601a932eb5aa1dade183bbb8c0fd123f1e06',1,'NodeList.h']]],\n  ['rssi_5fans_1937',['RSSI_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a11a1e8fc74a27e4e59a430903fad58f1',1,'NodeList.h']]],\n  ['rssi_5fget_1938',['RSSI_GET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a4a8d5a4e8248c14514159e133ed08824',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/enumvalues_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"enumvalues_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/enumvalues_f.js",
    "content": "var searchData=\n[\n  ['save_5frelay_5fstatus_1939',['SAVE_RELAY_STATUS',['../SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064aaf752369ce8a81e8c0b0f6f3773554cdf',1,'SmartSwitchController.h']]],\n  ['scene_1940',['SCENE',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da258b6b325fff309a34d66a54219afbc4',1,'haEntity.h']]],\n  ['sensor_1941',['SENSOR',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da6d497d39379053324114e5611323b558',1,'haEntity.h']]],\n  ['sensor_5fbattery_1942',['sensor_battery',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a685a70c9fa4146802d937f12f0e93e73',1,'haEntity.h']]],\n  ['sensor_5fbrcast_5fdata_1943',['SENSOR_BRCAST_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613affd78f537f0c30f76f209e5afd106843',1,'SENSOR_BRCAST_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faffd78f537f0c30f76f209e5afd106843',1,'SENSOR_BRCAST_DATA():&#160;EnigmaIOTNode.h']]],\n  ['sensor_5fcurrent_1944',['sensor_current',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a6760896e976eca9a3447457ac9ba1ea3',1,'haEntity.h']]],\n  ['sensor_5fdata_1945',['SENSOR_DATA',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613aa8ba55203a30122cc271cc66b2909b21',1,'SENSOR_DATA():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7faa8ba55203a30122cc271cc66b2909b21',1,'SENSOR_DATA():&#160;EnigmaIOTNode.h']]],\n  ['sensor_5fenergy_1946',['sensor_energy',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a32e4c8204cd66ebbf18304098877f293',1,'haEntity.h']]],\n  ['sensor_5fhumidity_1947',['sensor_humidity',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a0a4ef95abd6b1267dd6bc7a8516c8736',1,'haEntity.h']]],\n  ['sensor_5filluminance_1948',['sensor_illuminance',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a3f50e8f5c60bcbf38d03839e1bfdc818',1,'haEntity.h']]],\n  ['sensor_5fnone_1949',['sensor_none',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af5a50d51bbe97f406aedf8aa69318ea6',1,'haEntity.h']]],\n  ['sensor_5fpower_1950',['sensor_power',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ac59300625d7c3f494494a4bc0933cd29',1,'haEntity.h']]],\n  ['sensor_5fpower_5ffactor_1951',['sensor_power_factor',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2add74055d43eaaf28f8a5ea27a6ccf321',1,'haEntity.h']]],\n  ['sensor_5fpressure_1952',['sensor_pressure',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2ab062e410d722be2f3d4d66258289c284',1,'haEntity.h']]],\n  ['sensor_5fsignal_5fstrength_1953',['sensor_signal_strength',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a64d6507c696faf456fad1bad7151f537',1,'haEntity.h']]],\n  ['sensor_5ftemperature_1954',['sensor_temperature',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a7967e2b8bd64a68ddbd968a9b460374e',1,'haEntity.h']]],\n  ['sensor_5ftimestamp_1955',['sensor_timestamp',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2af481d57816f8addaecc65f43e23e3a82',1,'haEntity.h']]],\n  ['sensor_5fvoltage_1956',['sensor_voltage',['../haEntity_8h.html#a69d83255396b1bd9a325fffa797f77c2a156579d85baa0d78483f7bead4779d4c',1,'haEntity.h']]],\n  ['server_5fhello_1957',['SERVER_HELLO',['../EnigmaIOTGateway_8h.html#a7493ad6706df484ac2749d7613266613a28914d3bb26ec8c2bd2d5ad9781cbf8c',1,'SERVER_HELLO():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#a040804a4fb880b7e7dfe5c489f7bdf7fa28914d3bb26ec8c2bd2d5ad9781cbf8c',1,'SERVER_HELLO():&#160;EnigmaIOTNode.h']]],\n  ['sleep_1958',['SLEEP',['../NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aad6137abebe4fdc59e2f0f2c84bdbe3fa',1,'NodeList.h']]],\n  ['sleep_5fans_1959',['SLEEP_ANS',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a0b79c77071b6b916a7b7d085add225f6',1,'NodeList.h']]],\n  ['sleep_5fget_1960',['SLEEP_GET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4a9b7d7a8e645683d52bb2347e7d7273aa',1,'NodeList.h']]],\n  ['sleep_5fset_1961',['SLEEP_SET',['../NodeList_8h.html#af7c3a73e42834705926eba633e55daa4ab0cab5d4c3d13577a1157e2929019a55',1,'NodeList.h']]],\n  ['smile_1962',['SMILE',['../EnigmaIOTGateway_8h.html#a404510882576d212315fd2ed67280d8da298f796cee1bd5d6decfe81d4a98b554',1,'SMILE():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac183d8bfcebdc9231366539a77b669eba298f796cee1bd5d6decfe81d4a98b554',1,'SMILE():&#160;EnigmaIOTNode.h']]],\n  ['status_1963',['status',['../GwOutput__generic_8h.html#a0cab60406a9b7a79387a3ad8b212e636a9a6940c3bba41cdd6dacae1a00176a30',1,'GwOutput_generic.h']]],\n  ['switch_1964',['SWITCH',['../haEntity_8h.html#aa0743062e1533ced64df39be6177d76da53396ea1193548270407675ea4eeee2b',1,'haEntity.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_0.js",
    "content": "var searchData=\n[\n  ['api_2emd_1060',['api.md',['../api_8md.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_1.js",
    "content": "var searchData=\n[\n  ['basiccontroller_2ecpp_1061',['BasicController.cpp',['../BasicController_8cpp.html',1,'']]],\n  ['basiccontroller_2eh_1062',['BasicController.h',['../BasicController_8h.html',1,'']]],\n  ['buttoncontroller_2ecpp_1063',['ButtonController.cpp',['../ButtonController_8cpp.html',1,'']]],\n  ['buttoncontroller_2eh_1064',['ButtonController.h',['../ButtonController_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_2.js",
    "content": "var searchData=\n[\n  ['comms_5fhal_2eh_1065',['Comms_hal.h',['../Comms__hal_8h.html',1,'']]],\n  ['cryptmodule_2ecpp_1066',['cryptModule.cpp',['../cryptModule_8cpp.html',1,'']]],\n  ['cryptmodule_2eh_1067',['cryptModule.h',['../cryptModule_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_3.js",
    "content": "var searchData=\n[\n  ['dashbuttoncontroller_2ecpp_1068',['DashButtonController.cpp',['../DashButtonController_8cpp.html',1,'']]],\n  ['dashbuttoncontroller_2eh_1069',['DashButtonController.h',['../DashButtonController_8h.html',1,'']]],\n  ['ds18b20controller_2ecpp_1070',['ds18b20Controller.cpp',['../ds18b20Controller_8cpp.html',1,'']]],\n  ['ds18b20controller_2eh_1071',['ds18b20Controller.h',['../ds18b20Controller_8h.html',1,'']]],\n  ['dstrootca_2eh_1072',['dstrootca.h',['../dstrootca_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_4.js",
    "content": "var searchData=\n[\n  ['enigmaiot_2dbutton_2dcontroller_2ecpp_1073',['EnigmaIOT-Button-Controller.cpp',['../EnigmaIOT-Button-Controller_8cpp.html',1,'']]],\n  ['enigmaiot_2ddashbutton_2dcontroller_2ecpp_1074',['EnigmaIOT-DashButton-Controller.cpp',['../EnigmaIOT-DashButton-Controller_8cpp.html',1,'']]],\n  ['enigmaiot_2djson_2dcontroller_2dtemplate_2ecpp_1075',['EnigmaIOT-Json-Controller-Template.cpp',['../EnigmaIOT-Json-Controller-Template_8cpp.html',1,'']]],\n  ['enigmaiot_2dled_2dcontroller_2ecpp_1076',['EnigmaIOT-Led-Controller.cpp',['../EnigmaIOT-Led-Controller_8cpp.html',1,'']]],\n  ['enigmaiot_2dsensor_2dcontroller_2ecpp_1077',['EnigmaIOT-Sensor-Controller.cpp',['../EnigmaIOT-Sensor-Controller_8cpp.html',1,'']]],\n  ['enigmaiot_2dsmartswitch_2dcontroller_2ecpp_1078',['EnigmaIOT-SmartSwitch-Controller.cpp',['../EnigmaIOT-SmartSwitch-Controller_8cpp.html',1,'']]],\n  ['enigmaiot_5fled_5fflasher_2ecpp_1079',['enigmaiot_led_flasher.cpp',['../enigmaiot__led__flasher_8cpp.html',1,'']]],\n  ['enigmaiot_5fnode_2ecpp_1080',['enigmaiot_node.cpp',['../enigmaiot__node_8cpp.html',1,'']]],\n  ['enigmaiot_5fnode_5fmsgpack_2ecpp_1081',['enigmaiot_node_msgpack.cpp',['../enigmaiot__node__msgpack_8cpp.html',1,'']]],\n  ['enigmaiot_5fnode_5fnonsleepy_2ecpp_1082',['enigmaiot_node_nonsleepy.cpp',['../enigmaiot__node__nonsleepy_8cpp.html',1,'']]],\n  ['enigmaiotconfig_2eh_1083',['EnigmaIoTconfig.h',['../EnigmaIoTconfig_8h.html',1,'']]],\n  ['enigmaiotconfigadvanced_2eh_1084',['EnigmaIoTconfigAdvanced.h',['../EnigmaIoTconfigAdvanced_8h.html',1,'']]],\n  ['enigmaiotdebug_2eh_1085',['EnigmaIOTdebug.h',['../EnigmaIOTdebug_8h.html',1,'']]],\n  ['enigmaiotgateway_2ecpp_1086',['EnigmaIOTGateway.cpp',['../EnigmaIOTGateway_8cpp.html',1,'']]],\n  ['enigmaiotgateway_2eh_1087',['EnigmaIOTGateway.h',['../EnigmaIOTGateway_8h.html',1,'']]],\n  ['enigmaiotgatewaydummy_2ecpp_1088',['EnigmaIOTGatewayDummy.cpp',['../EnigmaIOTGatewayDummy_8cpp.html',1,'']]],\n  ['enigmaiotgatewaymqtt_2ecpp_1089',['EnigmaIOTGatewayMQTT.cpp',['../EnigmaIOTGatewayMQTT_8cpp.html',1,'']]],\n  ['enigmaiotjsoncontroller_2eh_1090',['EnigmaIOTjsonController.h',['../EnigmaIOTjsonController_8h.html',1,'']]],\n  ['enigmaiotnode_2ecpp_1091',['EnigmaIOTNode.cpp',['../EnigmaIOTNode_8cpp.html',1,'']]],\n  ['enigmaiotnode_2eh_1092',['EnigmaIOTNode.h',['../EnigmaIOTNode_8h.html',1,'']]],\n  ['enigmaiotringbuffer_2eh_1093',['EnigmaIOTRingBuffer.h',['../EnigmaIOTRingBuffer_8h.html',1,'']]],\n  ['enigmaiotupdate_2epy_1094',['EnigmaIoTUpdate.py',['../EnigmaIoTUpdate_8py.html',1,'']]],\n  ['espnow_5fhal_2ecpp_1095',['espnow_hal.cpp',['../espnow__hal_8cpp.html',1,'']]],\n  ['espnow_5fhal_2eh_1096',['espnow_hal.h',['../espnow__hal_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_5.js",
    "content": "var searchData=\n[\n  ['filter_2ecpp_1097',['Filter.cpp',['../Filter_8cpp.html',1,'']]],\n  ['filter_2eh_1098',['Filter.h',['../Filter_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_6.js",
    "content": "var searchData=\n[\n  ['gatewayapi_2ecpp_1099',['GatewayAPI.cpp',['../GatewayAPI_8cpp.html',1,'']]],\n  ['gatewayapi_2eh_1100',['GatewayAPI.h',['../GatewayAPI_8h.html',1,'']]],\n  ['gwoutput_5fdummy_2ecpp_1101',['GwOutput_dummy.cpp',['../GwOutput__dummy_8cpp.html',1,'']]],\n  ['gwoutput_5fdummy_2eh_1102',['GwOutput_dummy.h',['../GwOutput__dummy_8h.html',1,'']]],\n  ['gwoutput_5fgeneric_2eh_1103',['GwOutput_generic.h',['../GwOutput__generic_8h.html',1,'']]],\n  ['gwoutput_5fmqtt_2ecpp_1104',['GwOutput_mqtt.cpp',['../GwOutput__mqtt_8cpp.html',1,'']]],\n  ['gwoutput_5fmqtt_2eh_1105',['GwOutput_mqtt.h',['../GwOutput__mqtt_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_7.js",
    "content": "var searchData=\n[\n  ['habinarysensor_2ecpp_1106',['haBinarySensor.cpp',['../haBinarySensor_8cpp.html',1,'']]],\n  ['habinarysensor_2eh_1107',['haBinarySensor.h',['../haBinarySensor_8h.html',1,'']]],\n  ['hacover_2ecpp_1108',['haCover.cpp',['../haCover_8cpp.html',1,'']]],\n  ['hacover_2eh_1109',['haCover.h',['../haCover_8h.html',1,'']]],\n  ['haentity_2eh_1110',['haEntity.h',['../haEntity_8h.html',1,'']]],\n  ['hasensor_2ecpp_1111',['haSensor.cpp',['../haSensor_8cpp.html',1,'']]],\n  ['hasensor_2eh_1112',['haSensor.h',['../haSensor_8h.html',1,'']]],\n  ['haswitch_2ecpp_1113',['haSwitch.cpp',['../haSwitch_8cpp.html',1,'']]],\n  ['haswitch_2eh_1114',['haSwitch.h',['../haSwitch_8h.html',1,'']]],\n  ['hatrigger_2ecpp_1115',['haTrigger.cpp',['../haTrigger_8cpp.html',1,'']]],\n  ['hatrigger_2eh_1116',['haTrigger.h',['../haTrigger_8h.html',1,'']]],\n  ['helperfunctions_2ecpp_1117',['helperFunctions.cpp',['../helperFunctions_8cpp.html',1,'']]],\n  ['helperfunctions_2eh_1118',['helperFunctions.h',['../helperFunctions_8h.html',1,'']]],\n  ['howto_2emd_1119',['howto.md',['../howto_8md.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_8.js",
    "content": "var searchData=\n[\n  ['ledcontroller_2ecpp_1120',['LedController.cpp',['../LedController_8cpp.html',1,'']]],\n  ['ledcontroller_2eh_1121',['LedController.h',['../LedController_8h.html',1,'']]],\n  ['license_2emd_1122',['LICENSE.md',['../LICENSE_8md.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_9.js",
    "content": "var searchData=\n[\n  ['node_2dota_2dupdate_2emd_1123',['node-ota-update.md',['../node-ota-update_8md.html',1,'']]],\n  ['nodelist_2ecpp_1124',['NodeList.cpp',['../NodeList_8cpp.html',1,'']]],\n  ['nodelist_2eh_1125',['NodeList.h',['../NodeList_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_a.js",
    "content": "var searchData=\n[\n  ['readme_2emd_1126',['readme.md',['../examples_2EnigmaIOT-Button-Controller_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOT-DashButton-Controller_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOT-Json-Controller-Template_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOT-Led-Controller_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOT-Sensor-Controller_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOT-SmartSwitch-Controller_2readme_8md.html',1,'(Global Namespace)'],['../examples_2enigmaiot__led__flasher_2readme_8md.html',1,'(Global Namespace)'],['../examples_2enigmaiot__node_2readme_8md.html',1,'(Global Namespace)'],['../examples_2enigmaiot__node__msgpack_2readme_8md.html',1,'(Global Namespace)'],['../examples_2enigmaiot__node__nonsleepy_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOTGatewayDummy_2readme_8md.html',1,'(Global Namespace)'],['../examples_2EnigmaIOTGatewayMQTT_2readme_8md.html',1,'(Global Namespace)'],['../readme_8md.html',1,'(Global Namespace)']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_b.js",
    "content": "var searchData=\n[\n  ['smartswitchcontroller_2ecpp_1127',['SmartSwitchController.cpp',['../SmartSwitchController_8cpp.html',1,'']]],\n  ['smartswitchcontroller_2eh_1128',['SmartSwitchController.h',['../SmartSwitchController_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/files_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/files_c.js",
    "content": "var searchData=\n[\n  ['technical_2dbackground_2emd_1129',['technical-background.md',['../technical-background_8md.html',1,'']]],\n  ['timemanager_2ecpp_1130',['timeManager.cpp',['../timeManager_8cpp.html',1,'']]],\n  ['timemanager_2eh_1131',['timeManager.h',['../timeManager_8h.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_0.js",
    "content": "var searchData=\n[\n  ['addexpiration_1132',['addExpiration',['../classHABinarySensor.html#a857bc07743e8564db8476907f925c48e',1,'HABinarySensor']]],\n  ['addinputmsgqueue_1133',['addInputMsgQueue',['../classEnigmaIOTGatewayClass.html#a43043a36c73d7de2ffe49e551cc6ae43',1,'EnigmaIOTGatewayClass']]],\n  ['addmqttqueue_1134',['addMQTTqueue',['../classGwOutput__MQTT.html#a4b889e6434caf7abb8dc52796fadb20f',1,'GwOutput_MQTT']]],\n  ['addpeer_1135',['addPeer',['../classEspnow__halClass.html#aa7c4c848bc0fc5b4f93f9b02dd10d986',1,'Espnow_halClass']]],\n  ['addvalue_1136',['addValue',['../classFilterClass.html#aa6e318ba33cab0094c7b6528e3e50337',1,'FilterClass']]],\n  ['addweigth_1137',['addWeigth',['../classFilterClass.html#a2236fab04bae686f3a30006ab0259c4f',1,'FilterClass']]],\n  ['addwifimanagerparameter_1138',['addWiFiManagerParameter',['../classEnigmaIOTGatewayClass.html#ad900c9546a9b2f0e99d2c7bec781dad7',1,'EnigmaIOTGatewayClass::addWiFiManagerParameter()'],['../classEnigmaIOTNodeClass.html#a8d168a19f1c868e2cdcd7f11f70e0742',1,'EnigmaIOTNodeClass::addWiFiManagerParameter()']]],\n  ['adjusttime_1139',['adjustTime',['../classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2',1,'TimeManagerClass']]],\n  ['allowsendattributes_1140',['allowSendAttributes',['../classHAEntity.html#a2b81d38a3d72a0848b81f6d240b781da',1,'HAEntity']]],\n  ['arduinootaconfigure_1141',['arduinoOTAConfigure',['../EnigmaIOTGatewayMQTT_8cpp.html#a8d52c8107e0bcc9687be62f7e0b388ae',1,'EnigmaIOTGatewayMQTT.cpp']]],\n  ['avefilter_1142',['aveFilter',['../classFilterClass.html#a8571bc0e05f848a4372c3b40f7598a78',1,'FilterClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_1.js",
    "content": "var searchData=\n[\n  ['begin_1143',['begin',['../classGatewayOutput__dummy.html#a39a2abbde4e46e34c30e418b87e8d0b8',1,'GatewayOutput_dummy::begin()'],['../classGwOutput__MQTT.html#a0ef6cb16df04d8d2dc8b854eec0529f3',1,'GwOutput_MQTT::begin()'],['../classComms__halClass.html#a1b7f86efd799761dead77fcccf036d1d',1,'Comms_halClass::begin()'],['../classEnigmaIOTGatewayClass.html#a9a6b2d2a88c39a839f414e9ce861c5a0',1,'EnigmaIOTGatewayClass::begin()'],['../classEnigmaIOTNodeClass.html#abff1de59af5ff0f9fd2e89b996f31f06',1,'EnigmaIOTNodeClass::begin()'],['../classEspnow__halClass.html#aa1c3a507c1615699d4f730c77dc52b50',1,'Espnow_halClass::begin()'],['../classGatewayAPI.html#af7c82da248870648a385a112d298ed78',1,'GatewayAPI::begin()'],['../classGatewayOutput__generic.html#af234219fb72002629fbef3ea2301ef03',1,'GatewayOutput_generic::begin()']]],\n  ['broadcastisenabled_1144',['broadcastIsEnabled',['../classEnigmaIOTNodeClass.html#a742b9e627fee356913b069c64499cd5f',1,'EnigmaIOTNodeClass::broadcastIsEnabled()'],['../classNode.html#ae6768d968b8f72fb12001fa3895a4670',1,'Node::broadcastIsEnabled()']]],\n  ['buildgetname_1145',['buildGetName',['../EnigmaIOTGateway_8cpp.html#aae12028b7a1857ceb320c435832b09b5',1,'EnigmaIOTGateway.cpp']]],\n  ['buildgetrssi_1146',['buildGetRSSI',['../EnigmaIOTGateway_8cpp.html#a20d09b7746e96e3f2706652522c121fa',1,'EnigmaIOTGateway.cpp']]],\n  ['buildgetsleep_1147',['buildGetSleep',['../EnigmaIOTGateway_8cpp.html#a90e4277194db83896803d38387ec0369',1,'EnigmaIOTGateway.cpp']]],\n  ['buildgetversion_1148',['buildGetVersion',['../EnigmaIOTGateway_8cpp.html#a7bb1ee00fcd42cf937a7f6173e2a8647',1,'EnigmaIOTGateway.cpp']]],\n  ['buildgwinfo_1149',['buildGwInfo',['../classGatewayAPI.html#abdf2646841af0c08ab90b4bddb961b2f',1,'GatewayAPI']]],\n  ['buildhadiscovery_1150',['buildHADiscovery',['../classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915',1,'CONTROLLER_CLASS_NAME::buildHADiscovery()'],['../classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915',1,'CONTROLLER_CLASS_NAME::buildHADiscovery()'],['../classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915',1,'CONTROLLER_CLASS_NAME::buildHADiscovery()'],['../classCONTROLLER__CLASS__NAME.html#ab5ec6ad2c5cd0f6edfb7635aba862915',1,'CONTROLLER_CLASS_NAME::buildHADiscovery()']]],\n  ['buildhalinkdiscovery_1151',['buildHALinkDiscovery',['../classCONTROLLER__CLASS__NAME.html#ade4924f6fec6b9984ecb542fb0e6aae8',1,'CONTROLLER_CLASS_NAME']]],\n  ['buildhaswitchdiscovery_1152',['buildHASwitchDiscovery',['../classCONTROLLER__CLASS__NAME.html#a7c56c54fe627a7668789e2d5bc6d89e1',1,'CONTROLLER_CLASS_NAME']]],\n  ['buildhatriggerdiscovery_1153',['buildHATriggerDiscovery',['../classCONTROLLER__CLASS__NAME.html#a273cc1f87e12fd51fd630b9716760071',1,'CONTROLLER_CLASS_NAME']]],\n  ['buildotamsg_1154',['buildOtaMsg',['../EnigmaIOTGateway_8cpp.html#acc743eebc6ec1a9480db25fa0f59332a',1,'EnigmaIOTGateway.cpp']]],\n  ['buildrestartnode_1155',['buildRestartNode',['../EnigmaIOTGateway_8cpp.html#a000e9c08be2b294e884d9a76d447c7ca',1,'EnigmaIOTGateway.cpp']]],\n  ['buildsendbrcastkey_1156',['buildSendBrcastKey',['../EnigmaIOTGateway_8cpp.html#aa713b61843ba50cdd12bba2d34d1065e',1,'EnigmaIOTGateway.cpp']]],\n  ['buildsetidentify_1157',['buildSetIdentify',['../EnigmaIOTGateway_8cpp.html#ada98ad7b4543b42a5d57f458528bf2d6',1,'EnigmaIOTGateway.cpp']]],\n  ['buildsetname_1158',['buildSetName',['../EnigmaIOTGateway_8cpp.html#aa4eb5b74c01643d49f6b82908e85cc32',1,'EnigmaIOTGateway.cpp']]],\n  ['buildsetresetconfig_1159',['buildSetResetConfig',['../EnigmaIOTGateway_8cpp.html#a322bbbaa773a92c19c2ec8daee290bc5',1,'EnigmaIOTGateway.cpp']]],\n  ['buildsetsleep_1160',['buildSetSleep',['../EnigmaIOTGateway_8cpp.html#aab70cbb2f23008e90d70b1d744d3e71c',1,'EnigmaIOTGateway.cpp']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_10.js",
    "content": "var searchData=\n[\n  ['saveconfig_1373',['saveConfig',['../classCONTROLLER__CLASS__NAME.html#a4a58511842391487187927dd1b87a0dc',1,'CONTROLLER_CLASS_NAME::saveConfig() override'],['../classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807',1,'CONTROLLER_CLASS_NAME::saveConfig()'],['../classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807',1,'CONTROLLER_CLASS_NAME::saveConfig()'],['../classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807',1,'CONTROLLER_CLASS_NAME::saveConfig()'],['../classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807',1,'CONTROLLER_CLASS_NAME::saveConfig()'],['../classCONTROLLER__CLASS__NAME.html#ae572fe1f0d2bb7b4fb99067d815d5807',1,'CONTROLLER_CLASS_NAME::saveConfig()'],['../classGatewayOutput__dummy.html#af0fdc3e06a73dc2c635eb6ed53963eb5',1,'GatewayOutput_dummy::saveConfig()'],['../classGwOutput__MQTT.html#aa085f629e0d58f053325f35c5ae6c2a1',1,'GwOutput_MQTT::saveConfig()'],['../classEnigmaIOTjsonController.html#a83069acbd6d2b8c1c9b36974fdb35b1e',1,'EnigmaIOTjsonController::saveConfig()'],['../classGatewayOutput__generic.html#a6c0e416d09397b930b94f05967389cbd',1,'GatewayOutput_generic::saveConfig()']]],\n  ['saveflashdata_1374',['saveFlashData',['../classEnigmaIOTGatewayClass.html#a179ab2224b2cb38ea355e8d770dc0d9a',1,'EnigmaIOTGatewayClass::saveFlashData()'],['../classEnigmaIOTNodeClass.html#a77b2c62dbadc2b7546d74d8ebf931cc2',1,'EnigmaIOTNodeClass::saveFlashData()']]],\n  ['savertcdata_1375',['saveRTCData',['../classEnigmaIOTNodeClass.html#ae1bb8b93c739fced2c695e47a5242f9a',1,'EnigmaIOTNodeClass']]],\n  ['searchforgateway_1376',['searchForGateway',['../classEnigmaIOTNodeClass.html#ad7a98adabe272649c3c65efd1c2cfe45',1,'EnigmaIOTNodeClass']]],\n  ['send_1377',['send',['../classComms__halClass.html#ac5a613a21aca12c2d2efbff02a2f0ff5',1,'Comms_halClass::send()'],['../classEspnow__halClass.html#a1e0d23a1dedf362fc1f451c7272bff2b',1,'Espnow_halClass::send()']]],\n  ['sendbootstatus_1378',['sendBootStatus',['../classCONTROLLER__CLASS__NAME.html#a5f1c10369d22214cc912239f6973202b',1,'CONTROLLER_CLASS_NAME']]],\n  ['sendbroadcastkey_1379',['sendBroadcastKey',['../classEnigmaIOTGatewayClass.html#a2fbf2cc61a51bdce3254f8478268f0c3',1,'EnigmaIOTGatewayClass']]],\n  ['sendcommandresp_1380',['sendCommandResp',['../classCONTROLLER__CLASS__NAME.html#a68bf2951e6f5ba11894856104e062e6e',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result) override'],['../classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result)'],['../classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result)'],['../classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result)'],['../classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result)'],['../classCONTROLLER__CLASS__NAME.html#a0965ba804f4f0d1533f888fa9011aa86',1,'CONTROLLER_CLASS_NAME::sendCommandResp(const char *command, bool result)'],['../classEnigmaIOTjsonController.html#acfcc6e0243941ac00830f848cc8315eb',1,'EnigmaIOTjsonController::sendCommandResp()']]],\n  ['senddata_1381',['sendData',['../classEnigmaIOTNodeClass.html#af83a2fb76f23a90f98f42bdb6856213b',1,'EnigmaIOTNodeClass::sendData(const uint8_t *data, size_t len, dataMessageType_t dataMsgType, bool encrypt=true, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)'],['../classEnigmaIOTNodeClass.html#a15f69c66601b59bfc4bae47cf6075e55',1,'EnigmaIOTNodeClass::sendData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding=CAYENNELPP)']]],\n  ['senddatacallback_1382',['sendDataCallback',['../classEnigmaIOTjsonController.html#ae59a645aaed1e5b550bdc7967c45c170',1,'EnigmaIOTjsonController']]],\n  ['senddownstream_1383',['sendDownstream',['../classEnigmaIOTGatewayClass.html#a5d5ce4312735008866cf84559bc645c4',1,'EnigmaIOTGatewayClass']]],\n  ['sendespnowmessage_1384',['sendEspNowMessage',['../classEspnow__halClass.html#aaae5f86d25fa7b47a4e5799a79ab1297',1,'Espnow_halClass']]],\n  ['sendhadiscoveryjson_1385',['sendHADiscoveryJSON',['../classEnigmaIOTGatewayClass.html#ae7c947e8bfc28c1b3731a5da874e24a7',1,'EnigmaIOTGatewayClass']]],\n  ['sendhadiscoverymessage_1386',['sendHADiscoveryMessage',['../classEnigmaIOTNodeClass.html#a436eb0a595405e52dc3a937c5968447f',1,'EnigmaIOTNodeClass']]],\n  ['sendjson_1387',['sendJson',['../classEnigmaIOTjsonController.html#ae5ece1c030d9063e46127b8a48b7bfa9',1,'EnigmaIOTjsonController']]],\n  ['sendledstatus_1388',['sendLedStatus',['../classCONTROLLER__CLASS__NAME.html#a47fedfe44e3cd9d8055adddce8b2b40a',1,'CONTROLLER_CLASS_NAME']]],\n  ['sendlinkstatus_1389',['sendLinkStatus',['../classCONTROLLER__CLASS__NAME.html#a4dea211610b294d5c4cce6f272fc1c9e',1,'CONTROLLER_CLASS_NAME']]],\n  ['sendnodenameset_1390',['sendNodeNameSet',['../classEnigmaIOTNodeClass.html#a45670fbcb6213e0a028e97569d988249',1,'EnigmaIOTNodeClass']]],\n  ['sendrelaystatus_1391',['sendRelayStatus',['../classCONTROLLER__CLASS__NAME.html#aebfd793413a629a8dad7b9565c6fa5d6',1,'CONTROLLER_CLASS_NAME']]],\n  ['sendrestart_1392',['sendRestart',['../classEnigmaIOTNodeClass.html#a55aa8affe03e929129ee30ac33c954c5',1,'EnigmaIOTNodeClass']]],\n  ['sendstartanouncement_1393',['sendStartAnouncement',['../classCONTROLLER__CLASS__NAME.html#aef6618576cf2ac9afa7e8685ae953b5d',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement() override'],['../classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement()'],['../classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement()'],['../classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement()'],['../classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement()'],['../classCONTROLLER__CLASS__NAME.html#a2af1a99bb4a2d7b83125861f127279e8',1,'CONTROLLER_CLASS_NAME::sendStartAnouncement()'],['../classEnigmaIOTjsonController.html#a8156ca47dce60feaff56f2b819a87c58',1,'EnigmaIOTjsonController::sendStartAnouncement()']]],\n  ['sendtemperature_1394',['sendTemperature',['../classCONTROLLER__CLASS__NAME.html#a195ba73498234d43ed74f44eb849ff99',1,'CONTROLLER_CLASS_NAME']]],\n  ['sendunencrypteddata_1395',['sendUnencryptedData',['../classEnigmaIOTNodeClass.html#a2e6973be4195ba354607c631c587297e',1,'EnigmaIOTNodeClass']]],\n  ['senduplinkdata_1396',['sendUplinkData',['../EnigmaIOT-Button-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a2d577988d753f4702c13e41090c705a4',1,'sendUplinkData(const uint8_t *data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType):&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['serverhello_1397',['serverHello',['../classEnigmaIOTGatewayClass.html#aec8a0e96ff309d34ef19a5eaa66c40e0',1,'EnigmaIOTGatewayClass']]],\n  ['setboot_1398',['setBoot',['../classCONTROLLER__CLASS__NAME.html#a129f24f1d0d268144edb3760f2153897',1,'CONTROLLER_CLASS_NAME']]],\n  ['setbroadcastkeyrequested_1399',['setBroadcastKeyRequested',['../classNode.html#a0e298bac431d8ac9e98fb12b71292de1',1,'Node']]],\n  ['setclock_1400',['setClock',['../classGwOutput__MQTT.html#ae4531996cc3ce965edfdd1ca3e6b85d7',1,'GwOutput_MQTT']]],\n  ['setdeviceclass_1401',['setDeviceClass',['../classHABinarySensor.html#af305236afbd0405010d1611eac965530',1,'HABinarySensor::setDeviceClass()'],['../classHACover.html#add81f3124d1f1f66745798d27b467098',1,'HACover::setDeviceClass()'],['../classHASensor.html#acdd930c6953bd7383eac0d58b3693f71',1,'HASensor::setDeviceClass()']]],\n  ['setdlcallback_1402',['setDlCallback',['../classGatewayOutput__dummy.html#a6f9117dde5be2d5c40b41c3b44287dbd',1,'GatewayOutput_dummy::setDlCallback()'],['../classGatewayOutput__generic.html#a93d8b7a91fb2d99aef4a441713da0f86',1,'GatewayOutput_generic::setDlCallback()']]],\n  ['setencryptionkey_1403',['setEncryptionKey',['../classNode.html#ae7b7337fdc178fe350ac4ce2f4675040',1,'Node']]],\n  ['setexpiretime_1404',['setExpireTime',['../classHASensor.html#afcb6f12671331f88f5bc2b940be9221f',1,'HASensor']]],\n  ['setinitassleepy_1405',['setInitAsSleepy',['../classNode.html#a3621fd27cee1a28145a7daa167ad0b3d',1,'Node']]],\n  ['setkeyvalid_1406',['setKeyValid',['../classNode.html#a81ded601038e157ecb03daa7fb85242d',1,'Node']]],\n  ['setkeyvalidfrom_1407',['setKeyValidFrom',['../classNode.html#a65284f939ba9d70cff90e7e508ac1a13',1,'Node']]],\n  ['setlastcontrolcounter_1408',['setLastControlCounter',['../classNode.html#a2d876405390237c8cbbd4689fb2f960b',1,'Node']]],\n  ['setlastdownlinkmsgcounter_1409',['setLastDownlinkMsgCounter',['../classNode.html#a68eac7f22f879dbe7bb1dec0615c5ce9',1,'Node']]],\n  ['setlastmessagecounter_1410',['setLastMessageCounter',['../classNode.html#aaa07721114c6b57152caf9a7b8cd4c23',1,'Node']]],\n  ['setlastmessagetime_1411',['setLastMessageTime',['../classNode.html#ae7d5f900dd1290910a30692175dc8e23',1,'Node']]],\n  ['setled_1412',['setLed',['../classEnigmaIOTNodeClass.html#a187f3eb82f9948d5b53bd7eb480f1dd4',1,'EnigmaIOTNodeClass']]],\n  ['setlinked_1413',['setLinked',['../classCONTROLLER__CLASS__NAME.html#a70aba1aad4cbd0a4b833b61bf67bcca9',1,'CONTROLLER_CLASS_NAME']]],\n  ['setmacaddress_1414',['setMacAddress',['../classNode.html#aea12cab858f40940a1ab5c61596b6355',1,'Node']]],\n  ['setnamesufix_1415',['setNameSufix',['../classHAEntity.html#a1bd8a543ed665f9e48ca47b220123063',1,'HAEntity']]],\n  ['setnodeaddress_1416',['setNodeAddress',['../classEnigmaIOTNodeClass.html#a13509c40faa91f1ea6fa1bb9fa0097c6',1,'EnigmaIOTNodeClass']]],\n  ['setnodeid_1417',['setNodeId',['../classNode.html#a3615b98da7f0ea0d8615a8f45519a715',1,'Node']]],\n  ['setnodename_1418',['setNodeName',['../classNode.html#a31c7b1dce5c26d81ead2cabf5395d935',1,'Node']]],\n  ['setoffdelay_1419',['setOffDelay',['../classHABinarySensor.html#a3195d26bdb20255ce0e07c0e2c0d3af7',1,'HABinarySensor']]],\n  ['setpayload_1420',['setPayload',['../classHATrigger.html#a42e581722e8a914238bf0d06d8f8f51b',1,'HATrigger']]],\n  ['setpayloadclose_1421',['setPayloadClose',['../classHACover.html#a372d3fac011d58154daca97311fb5a94',1,'HACover']]],\n  ['setpayloadgoto_1422',['setPayloadGoto',['../classHACover.html#ac2f06095a52cd09cf77fb881754bffd4',1,'HACover']]],\n  ['setpayloadoff_1423',['setPayloadOff',['../classHABinarySensor.html#a3fc9f50d176634428630c03bb15a8d59',1,'HABinarySensor::setPayloadOff(const char *payload)'],['../classHABinarySensor.html#a48a5415389f3b0a03e35c883f764ab45',1,'HABinarySensor::setPayloadOff(int payload)'],['../classHASwitch.html#ad34555ca78f7d9c9ccd49139751ed831',1,'HASwitch::setPayloadOff(const char *payload)'],['../classHASwitch.html#ad87f7ed8d117684176195abb75de10fd',1,'HASwitch::setPayloadOff(int payload)']]],\n  ['setpayloadon_1424',['setPayloadOn',['../classHABinarySensor.html#a9192b104b2c2ac607dc66b98237ff4c4',1,'HABinarySensor::setPayloadOn(const char *payload)'],['../classHABinarySensor.html#ae7d585e8eed2eda20125b9d2eb5c4b9c',1,'HABinarySensor::setPayloadOn(int payload)'],['../classHASwitch.html#a58d4755d08863514f81805d29d96605b',1,'HASwitch::setPayloadOn(const char *payload)'],['../classHASwitch.html#adb657f3c1e7a6d0dd201ae1ae58c4c61',1,'HASwitch::setPayloadOn(int payload)']]],\n  ['setpayloadopen_1425',['setPayloadOpen',['../classHACover.html#a20860a2f4181be32c69a583104cf9181',1,'HACover']]],\n  ['setpayloadstop_1426',['setPayloadStop',['../classHACover.html#a727afd76b2e852a0e177c5d64fff5894',1,'HACover']]],\n  ['setrelay_1427',['setRelay',['../classCONTROLLER__CLASS__NAME.html#ae06988e4ad4c8ca29e1979d14e787488',1,'CONTROLLER_CLASS_NAME']]],\n  ['setresetpin_1428',['setResetPin',['../classEnigmaIOTNodeClass.html#a50b37ec711dc25df93a1aba827d59263',1,'EnigmaIOTNodeClass']]],\n  ['setrssi_1429',['setRSSI',['../classNode.html#aa14110f23c8cfe73c44e1a87382a1081',1,'Node']]],\n  ['setrxled_1430',['setRxLed',['../classEnigmaIOTGatewayClass.html#a514a694eb41c0cbb43e43c1621313187',1,'EnigmaIOTGatewayClass']]],\n  ['setsleeptime_1431',['setSleepTime',['../classEnigmaIOTNodeClass.html#a6432011ed34012e55d393bfd0c99219e',1,'EnigmaIOTNodeClass']]],\n  ['setsleepy_1432',['setSleepy',['../classNode.html#ae1a2a8c747a1af2e7d9467ae9199edd7',1,'Node']]],\n  ['setstateclosed_1433',['setStateClosed',['../classHACover.html#a7caf15ccd3d71002c83f67ef65e814d0',1,'HACover']]],\n  ['setstateclosing_1434',['setStateClosing',['../classHACover.html#a4bfa8996be4012ccf22cae3385ddcc69',1,'HACover']]],\n  ['setstateoff_1435',['setStateOff',['../classHASwitch.html#a8498809d5a4ba56039c8397e1c22f272',1,'HASwitch::setStateOff(const char *payload)'],['../classHASwitch.html#a92d97f25fd24278191e3ded747f1eac9',1,'HASwitch::setStateOff(int payload)']]],\n  ['setstateon_1436',['setStateOn',['../classHASwitch.html#aa59604bf62e63caaf3dcd6a2ad67814f',1,'HASwitch::setStateOn(const char *payload)'],['../classHASwitch.html#a8a83e4675f294b203737539245e13c34',1,'HASwitch::setStateOn(int payload)']]],\n  ['setstateopen_1437',['setStateOpen',['../classHACover.html#ac7086eaf2411420d3a36df4ba3a55d42',1,'HACover']]],\n  ['setstateopening_1438',['setStateOpening',['../classHACover.html#a4b984a52e4dae0e93fcd2a360be339d2',1,'HACover']]],\n  ['setstatestopped_1439',['setStateStopped',['../classHACover.html#a2341ee037b2dae238703f15bf95e6ccf',1,'HACover']]],\n  ['setstatus_1440',['setStatus',['../classNode.html#a7590c6b11a260ca766a2ad46f2b0cf27',1,'Node']]],\n  ['setsubtype_1441',['setSubtype',['../classHATrigger.html#a4fb9c73855aba7474fb26e13bd74f3cf',1,'HATrigger::setSubtype(ha_triggerSubtype_t subtype)'],['../classHATrigger.html#ab16d63fc344bac17dd99834be15585aa',1,'HATrigger::setSubtype(const char *subtype)']]],\n  ['settimesyncenabled_1442',['setTimeSyncEnabled',['../classNode.html#a121f5ac6ef71317bd8900b97a8abc65a',1,'Node']]],\n  ['settxled_1443',['setTxLed',['../classEnigmaIOTGatewayClass.html#a330863b8dd757d66f990a14298f2faf0',1,'EnigmaIOTGatewayClass']]],\n  ['settype_1444',['setType',['../classHATrigger.html#adda48fb69d4ad6c9f95dfb7f7f92b79c',1,'HATrigger::setType(ha_triggerType_t type)'],['../classHATrigger.html#af86406b876cfddbe13ef433582600658',1,'HATrigger::setType(const char *type)']]],\n  ['setunitofmeasurement_1445',['setUnitOfMeasurement',['../classHASensor.html#adad5ecbe11d2c2fcdc62be14acc8b89e',1,'HASensor']]],\n  ['setup_1446',['setup',['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classCONTROLLER__CLASS__NAME.html#a826124fa1f5c24d99cc8e4f49c555bee',1,'CONTROLLER_CLASS_NAME::setup(EnigmaIOTNodeClass *node, void *data=NULL)'],['../classEnigmaIOTjsonController.html#a56e99497e68b8f6f9d31822c4ecaf3ea',1,'EnigmaIOTjsonController::setup()'],['../EnigmaIOT-Button-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;enigmaiot_node_nonsleepy.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'setup():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['setvaluefield_1447',['setValueField',['../classHABinarySensor.html#a55c51daf4f6f4c37723ce6ed4c44b958',1,'HABinarySensor::setValueField()'],['../classHASensor.html#a61e3c5e250794fc2c8ad2f96da1be6dc',1,'HASensor::setValueField()'],['../classHASwitch.html#a237b5b70434642df1031dac738955634',1,'HASwitch::setValueField()']]],\n  ['setvaluetemplate_1448',['setValueTemplate',['../classHABinarySensor.html#af2c19a08cf6b4c1260bb85c7cddee552',1,'HABinarySensor::setValueTemplate()'],['../classHASensor.html#a41e55b745b034127a7d7a98cb50d4559',1,'HASensor::setValueTemplate()']]],\n  ['setversion_1449',['setVersion',['../classNode.html#accf5025ffbf53e48db9ab7f429c68b1e',1,'Node']]],\n  ['showtime_1450',['showTime',['../enigmaiot__node__nonsleepy_8cpp.html#af0c88ea180e73ee60842341790d31b44',1,'enigmaiot_node_nonsleepy.cpp']]],\n  ['size_1451',['size',['../classEnigmaIOTRingBuffer.html#aacd555a37dc6ff614813f365e0d85419',1,'EnigmaIOTRingBuffer']]],\n  ['sleep_1452',['sleep',['../classEnigmaIOTNodeClass.html#a81ab5be7b67c28948ea5de40e5d3c360',1,'EnigmaIOTNodeClass']]],\n  ['startconnectionflash_1453',['startConnectionFlash',['../EnigmaIOTGatewayDummy_8cpp.html#a6ff09343e5169937476aa04932b76915',1,'startConnectionFlash(int period):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a6ff09343e5169937476aa04932b76915',1,'startConnectionFlash(int period):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['startflash_1454',['startFlash',['../EnigmaIOTNode_8cpp.html#ae79c9303923c11f39edb388b32d4646b',1,'EnigmaIOTNode.cpp']]],\n  ['startidentifying_1455',['startIdentifying',['../classEnigmaIOTNodeClass.html#a1701a6f85406e5deef210c74d509a471',1,'EnigmaIOTNodeClass']]],\n  ['stop_1456',['stop',['../classComms__halClass.html#aa69c265e65ce31580af6d5dd9b3cd40f',1,'Comms_halClass::stop()'],['../classEnigmaIOTNodeClass.html#ae1729724a332e907bddbe7b27c2f3c22',1,'EnigmaIOTNodeClass::stop()'],['../classEspnow__halClass.html#ad1b11d3ca5e85c95d13000acab74bff3',1,'Espnow_halClass::stop()']]],\n  ['stopconnectionflash_1457',['stopConnectionFlash',['../EnigmaIOTGatewayDummy_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd',1,'stopConnectionFlash():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#ad85ae6aaf68f30aa59facd8f80635ffd',1,'stopConnectionFlash():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['stopflash_1458',['stopFlash',['../EnigmaIOTNode_8cpp.html#ad072ccb795ca00a2cc374f3ce7bd5d55',1,'EnigmaIOTNode.cpp']]],\n  ['stopidentifying_1459',['stopIdentifying',['../classEnigmaIOTNodeClass.html#a659fca03ecdfd18e19be1b39b4e703b3',1,'EnigmaIOTNodeClass']]],\n  ['str2mac_1460',['str2mac',['../helperFunctions_8cpp.html#a02961b325403161b54533152d242696a',1,'str2mac(const char *macAddrString, uint8_t *macBytes):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a0fdf837000194d53f0d019f024e0f4a1',1,'str2mac(const char *mac, uint8_t *values):&#160;helperFunctions.cpp']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_11.js",
    "content": "var searchData=\n[\n  ['togglerelay_1461',['toggleRelay',['../classCONTROLLER__CLASS__NAME.html#aa91c1e67648d15fcd667e0bb070a79ba',1,'CONTROLLER_CLASS_NAME']]],\n  ['tx_5fcb_1462',['tx_cb',['../classEnigmaIOTGatewayClass.html#a0ab81e6867a72fc7dac05f24fe7fa484',1,'EnigmaIOTGatewayClass::tx_cb()'],['../classEnigmaIOTNodeClass.html#a3e50f907a24843d7752e81664e28fde9',1,'EnigmaIOTNodeClass::tx_cb()'],['../classEspnow__halClass.html#a5d5442d3095c57dee6ba5bc05691f587',1,'Espnow_halClass::tx_cb()']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_12.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_12.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_12.js",
    "content": "var searchData=\n[\n  ['unencrypteddatamessage_1463',['unencryptedDataMessage',['../classEnigmaIOTNodeClass.html#ac6f82e2e104008daffa7b6f17abbcfdc',1,'EnigmaIOTNodeClass']]],\n  ['unixtime_1464',['unixtime',['../classEnigmaIOTNodeClass.html#ab35d557fff42f0a565ee2cae63d86140',1,'EnigmaIOTNodeClass::unixtime()'],['../classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5',1,'TimeManagerClass::unixtime()']]],\n  ['unregisternode_1465',['unregisterNode',['../classNodeList.html#a2892fb1e6830073f3419da35ddad8725',1,'NodeList::unregisterNode(uint16_t nodeId)'],['../classNodeList.html#ae5aaadb6ddbe6d4c5e1a5e7289ac3aa8',1,'NodeList::unregisterNode(const uint8_t *mac)'],['../classNodeList.html#a52e67df2a4891252279101a492453038',1,'NodeList::unregisterNode(Node *node)']]],\n  ['updatepacketsrate_1466',['updatePacketsRate',['../classNode.html#a71c1077723465057bd8cbc90f33c2ead',1,'Node']]],\n  ['usetimesync_1467',['useTimeSync',['../classNode.html#a4bb77cd04f77b857935836284c5e41af',1,'Node']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_13.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_13.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_13.js",
    "content": "var searchData=\n[\n  ['wifimanagerexit_1468',['wifiManagerExit',['../EnigmaIOT-Button-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a4d022fc715d83a4b69c587df0201b63d',1,'wifiManagerExit(bool status):&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a960401606ecc83efdb2e45646619f277',1,'wifiManagerExit(boolean status):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['wifimanagerstarted_1469',['wifiManagerStarted',['../EnigmaIOT-Button-Controller_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#ad151c02682f80a13429640710b842160',1,'wifiManagerStarted():&#160;EnigmaIOTGatewayMQTT.cpp']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_14.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_14.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_14.js",
    "content": "var searchData=\n[\n  ['_7econtroller_5fclass_5fname_1470',['~CONTROLLER_CLASS_NAME',['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()'],['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()'],['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()'],['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()'],['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()'],['../classCONTROLLER__CLASS__NAME.html#af6ef186cd6f5518739ef722213151284',1,'CONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME()']]],\n  ['_7eenigmaiotringbuffer_1471',['~EnigmaIOTRingBuffer',['../classEnigmaIOTRingBuffer.html#aba3855eadedeaa091aff67f49bdc2255',1,'EnigmaIOTRingBuffer']]],\n  ['_7efilterclass_1472',['~FilterClass',['../classFilterClass.html#a5706c0daaecd8f616630dc9aac4eb619',1,'FilterClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_2.js",
    "content": "var searchData=\n[\n  ['calculatecrc32_1161',['calculateCRC32',['../helperFunctions_8cpp.html#a81e44efba216f1a0a981219616eeb8f3',1,'calculateCRC32(const uint8_t *data, size_t length):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a81e44efba216f1a0a981219616eeb8f3',1,'calculateCRC32(const uint8_t *data, size_t length):&#160;helperFunctions.cpp']]],\n  ['checkcrc_1162',['checkCRC',['../classEnigmaIOTNodeClass.html#a461dd5c9def2768c3c4b87cfc9be6ef8',1,'EnigmaIOTNodeClass']]],\n  ['checkmsgtype_1163',['checkMsgType',['../GwOutput__mqtt_8cpp.html#a57969f4236bd72eca4fa83155a025085',1,'GwOutput_mqtt.cpp']]],\n  ['checknodename_1164',['checkNodeName',['../classNodeList.html#a6702f6b65634da0500f5e99ccf017178',1,'NodeList']]],\n  ['checkresetbutton_1165',['checkResetButton',['../classEnigmaIOTNodeClass.html#a2cf188fbd1d22775605eea93ed561a53',1,'EnigmaIOTNodeClass']]],\n  ['clear_1166',['clear',['../classFilterClass.html#a29933bc3e2094170afd380cee3763d95',1,'FilterClass']]],\n  ['clearflash_1167',['clearFlash',['../classEnigmaIOTNodeClass.html#a531eee8dc001da6f1f1393c1cc632b09',1,'EnigmaIOTNodeClass']]],\n  ['clearrtc_1168',['clearRTC',['../classEnigmaIOTNodeClass.html#afa97e9b5f9e73702c545a5e7b4c2c15f',1,'EnigmaIOTNodeClass']]],\n  ['clearrtcdata_1169',['clearRtcData',['../EnigmaIOTNode_8cpp.html#a1b66b36dbb3d32b25e7f4b2cc4e0accb',1,'EnigmaIOTNode.cpp']]],\n  ['clienthello_1170',['clientHello',['../classEnigmaIOTNodeClass.html#a1ddc7fce5233d3959cfb52dd3c7f605c',1,'EnigmaIOTNodeClass']]],\n  ['clock_1171',['clock',['../classEnigmaIOTNodeClass.html#a6830ae2f6b8dafa588f5baa1fe4e8a99',1,'EnigmaIOTNodeClass::clock()'],['../classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506',1,'TimeManagerClass::clock()']]],\n  ['clock_5fus_1172',['clock_us',['../classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0',1,'TimeManagerClass']]],\n  ['clockrequest_1173',['clockRequest',['../classEnigmaIOTNodeClass.html#a1d62eaa08920568f019ef240dd98dc3b',1,'EnigmaIOTNodeClass']]],\n  ['clockresponse_1174',['clockResponse',['../classEnigmaIOTGatewayClass.html#aa132262cf2eee428208df22d2072acf9',1,'EnigmaIOTGatewayClass']]],\n  ['comms_5fhalclass_1175',['Comms_halClass',['../classComms__halClass.html#a38e3e9572cead89962b66c2634a9e2ac',1,'Comms_halClass']]],\n  ['configmanagerexit_1176',['configManagerExit',['../classCONTROLLER__CLASS__NAME.html#a9fc25e3bff52d9d4a642e5a604dd7c44',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status) override'],['../classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status)'],['../classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status)'],['../classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status)'],['../classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status)'],['../classCONTROLLER__CLASS__NAME.html#a92a9cd1826a1a8aaca06c6e208928cdc',1,'CONTROLLER_CLASS_NAME::configManagerExit(bool status)'],['../classGatewayOutput__dummy.html#adac909737089f601e9ee3ea0ad521dc7',1,'GatewayOutput_dummy::configManagerExit()'],['../classGwOutput__MQTT.html#a1ce7f559d24ebc85e5d9070b61e6c559',1,'GwOutput_MQTT::configManagerExit()'],['../classEnigmaIOTjsonController.html#a844043532561398d54fa45cd7f0cf4ed',1,'EnigmaIOTjsonController::configManagerExit()'],['../classGatewayOutput__generic.html#a196d0cd14af1e99998681dc9f017823f',1,'GatewayOutput_generic::configManagerExit()']]],\n  ['configmanagerstart_1177',['configManagerStart',['../classCONTROLLER__CLASS__NAME.html#a6fc95acd652b504ae0e342f7ce5450c3',1,'CONTROLLER_CLASS_NAME::configManagerStart() override'],['../classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14',1,'CONTROLLER_CLASS_NAME::configManagerStart()'],['../classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14',1,'CONTROLLER_CLASS_NAME::configManagerStart()'],['../classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14',1,'CONTROLLER_CLASS_NAME::configManagerStart()'],['../classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14',1,'CONTROLLER_CLASS_NAME::configManagerStart()'],['../classCONTROLLER__CLASS__NAME.html#aa6218f8b72b75932946bb5ca74b5bc14',1,'CONTROLLER_CLASS_NAME::configManagerStart()'],['../classGatewayOutput__dummy.html#acc9d7df320e4b4fb7ce459eac0e6639d',1,'GatewayOutput_dummy::configManagerStart()'],['../classGwOutput__MQTT.html#a5e077c236ed77f61ca1a7ab6067cf73e',1,'GwOutput_MQTT::configManagerStart()'],['../classEnigmaIOTjsonController.html#a9d83f8376a37624a551421a2c8a90c5f',1,'EnigmaIOTjsonController::configManagerStart()'],['../classGatewayOutput__generic.html#adaa04f1d2d1285fc25c707adc49bc2e6',1,'GatewayOutput_generic::configManagerStart()']]],\n  ['configwifimanager_1178',['configWiFiManager',['../classEnigmaIOTGatewayClass.html#ad6c301b780bd802ee98bbe25885c0cfd',1,'EnigmaIOTGatewayClass::configWiFiManager()'],['../classEnigmaIOTNodeClass.html#a41984c7560df0af008fc526ee38b0b42',1,'EnigmaIOTNodeClass::configWiFiManager()']]],\n  ['connecteventhandler_1179',['connectEventHandler',['../EnigmaIOT-Button-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a940f8c4df553df52c9145ef2df107ad3',1,'connectEventHandler():&#160;enigmaiot_node_nonsleepy.cpp']]],\n  ['connectinform_1180',['connectInform',['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classCONTROLLER__CLASS__NAME.html#ad5a5b5eb5068a97a6e41c74d264707eb',1,'CONTROLLER_CLASS_NAME::connectInform()'],['../classEnigmaIOTjsonController.html#ac9fda7397114e169164bc6ee390f0e2d',1,'EnigmaIOTjsonController::connectInform()']]],\n  ['countactivenodes_1181',['countActiveNodes',['../classNodeList.html#abb4895c5b9ae6b041c9102178de837c4',1,'NodeList']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_3.js",
    "content": "var searchData=\n[\n  ['datamessage_1182',['dataMessage',['../classEnigmaIOTNodeClass.html#a09782f9f3ca09d7fd79b8b70e130a206',1,'EnigmaIOTNodeClass']]],\n  ['decryptbuffer_1183',['decryptBuffer',['../classCryptModule.html#a55883c161c22f5182fc40f97a84a5da6',1,'CryptModule']]],\n  ['defaultconfig_1184',['defaultConfig',['../classCONTROLLER__CLASS__NAME.html#a594adba299c47b03e4af833d224c0659',1,'CONTROLLER_CLASS_NAME']]],\n  ['deletenode_1185',['deleteNode',['../classGatewayAPI.html#a77ac9e909b9575916c42d4e2ff3233f9',1,'GatewayAPI']]],\n  ['deviceclassstr_1186',['deviceClassStr',['../classHABinarySensor.html#ab0b307302ea8fe68e39cd89fdda7b9cc',1,'HABinarySensor::deviceClassStr()'],['../classHACover.html#ab9e4ae5934dd24bbd5014ec9eb16e2ef',1,'HACover::deviceClassStr()'],['../classHASensor.html#aa79457154d1e06cfa9ffe11d0d5bcd40',1,'HASensor::deviceClassStr()']]],\n  ['devicetypestr_1187',['deviceTypeStr',['../classHAEntity.html#ac083c92c7973db1f2b51ede001768f2f',1,'HAEntity']]],\n  ['disconnecteventhandler_1188',['disconnectEventHandler',['../EnigmaIOT-Button-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a23fc74fc5731518093d5fa0db24edae1',1,'disconnectEventHandler(nodeInvalidateReason_t reason):&#160;enigmaiot_node_nonsleepy.cpp']]],\n  ['disconnectinform_1189',['disconnectInform',['../classEnigmaIOTjsonController.html#af2e1940f901e2ad05701b238374db9c0',1,'EnigmaIOTjsonController']]],\n  ['divide_1190',['divide',['../classFilterClass.html#a99497784c6f8a22e89c19200132797b9',1,'FilterClass']]],\n  ['doresetconfig_1191',['doResetConfig',['../classEnigmaIOTGatewayClass.html#ae91f344eeae1900179ab65a247e38eda',1,'EnigmaIOTGatewayClass']]],\n  ['dorestart_1192',['doRestart',['../EnigmaIOTGatewayMQTT_8cpp.html#a4e0b35257234db80b4d6771ec42153a3',1,'EnigmaIOTGatewayMQTT.cpp']]],\n  ['dosave_1193',['doSave',['../classEnigmaIOTGatewayClass.html#a0edb12da3fe0cc767cab53ba480f6508',1,'EnigmaIOTGatewayClass']]],\n  ['downstreamdatamessage_1194',['downstreamDataMessage',['../classEnigmaIOTGatewayClass.html#a3e4fd7a7428749c7d8a375611f667165',1,'EnigmaIOTGatewayClass']]],\n  ['dumprtcdata_1195',['dumpRtcData',['../EnigmaIOTNode_8cpp.html#a4dcb9645090920f31f391adcd5b3850c',1,'EnigmaIOTNode.cpp']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_4.js",
    "content": "var searchData=\n[\n  ['empty_1196',['empty',['../classEnigmaIOTRingBuffer.html#a4000e36c678d2ae166b3689e5703c7e5',1,'EnigmaIOTRingBuffer']]],\n  ['enablebroadcast_1197',['enableBroadcast',['../classEnigmaIOTNodeClass.html#aafdd17efe90bfc2dd9af758633034f82',1,'EnigmaIOTNodeClass::enableBroadcast()'],['../classNode.html#a2c6ecfa165b71155d3d25331ca56d98e',1,'Node::enableBroadcast()']]],\n  ['enableclocksync_1198',['enableClockSync',['../classEnigmaIOTNodeClass.html#afe087ce005069779bf699e39695397f4',1,'EnigmaIOTNodeClass']]],\n  ['enabletransmit_1199',['enableTransmit',['../classComms__halClass.html#ae85cd6a5937cb47f88fb82d06b21087a',1,'Comms_halClass::enableTransmit()'],['../classEspnow__halClass.html#a91c6aaf2781c9e141641fe4a4b92115f',1,'Espnow_halClass::enableTransmit()']]],\n  ['encryptbuffer_1200',['encryptBuffer',['../classCryptModule.html#ae90dfe037c5e9b1a6804f0292c28bddc',1,'CryptModule']]],\n  ['enigmaiotringbuffer_1201',['EnigmaIOTRingBuffer',['../classEnigmaIOTRingBuffer.html#a1c18bc66f575fffc206be22f96fc6a16',1,'EnigmaIOTRingBuffer']]],\n  ['espnow_5fhalclass_1202',['Espnow_halClass',['../classEspnow__halClass.html#ae9def9fb9d9e8370e70e77367900669f',1,'Espnow_halClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_5.js",
    "content": "var searchData=\n[\n  ['filterclass_1203',['FilterClass',['../classFilterClass.html#a84d72a35e083c33a5acad7d05c553dcd',1,'FilterClass']]],\n  ['findemptynode_1204',['findEmptyNode',['../classNodeList.html#ad2f5b99eaeeb4f3b805acb0a019b6711',1,'NodeList']]],\n  ['flashconnectionled_1205',['flashConnectionLed',['../EnigmaIOTGatewayDummy_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a',1,'flashConnectionLed(void *led):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#ae6fc0fcbb7779efc63d50434dbd44d7a',1,'flashConnectionLed(void *led):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['flashled_1206',['flashLed',['../EnigmaIOTNode_8cpp.html#a2f399d10e625fb459fb5e0b8a3a79ef8',1,'EnigmaIOTNode.cpp']]],\n  ['front_1207',['front',['../classEnigmaIOTRingBuffer.html#a3dd72b32f71d5bf46c0c083c3bb9b942',1,'EnigmaIOTRingBuffer']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_6.js",
    "content": "var searchData=\n[\n  ['getactivenodesnumber_1208',['getActiveNodesNumber',['../classEnigmaIOTGatewayClass.html#a4a8fee82bf25fa412846a5ffa2a3cbbb',1,'EnigmaIOTGatewayClass']]],\n  ['getaddresslength_1209',['getAddressLength',['../classComms__halClass.html#a6093fd7b0a9eedba72c3622977639d92',1,'Comms_halClass::getAddressLength()'],['../classEspnow__halClass.html#ac04ab12d0b5e52948d123f226ab1101d',1,'Espnow_halClass::getAddressLength()']]],\n  ['getanouncemessage_1210',['getAnounceMessage',['../classHAEntity.html#a64140dc1e3e041eafbcd6eca04abb9ef',1,'HAEntity']]],\n  ['getbroadcastnode_1211',['getBroadcastNode',['../classNodeList.html#a0020539e3b49df3706fe66a44bbf3700',1,'NodeList']]],\n  ['getcommsqueue_1212',['getCommsQueue',['../classEspnow__halClass.html#a627f205073fdf1c3fa3fbb2fae73c5e5',1,'Espnow_halClass']]],\n  ['getdelay_1213',['getDelay',['../classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a',1,'TimeManagerClass']]],\n  ['getdh1_1214',['getDH1',['../classCryptModule.html#ab043ae3361d34921f36d7d0189c058d1',1,'CryptModule']]],\n  ['getdh2_1215',['getDH2',['../classCryptModule.html#a1cd41eabb8dc153f74d42f263d168fee',1,'CryptModule']]],\n  ['getdiscoveryjson_1216',['getDiscoveryJson',['../classHABinarySensor.html#a843647264ee900edb1ee5c51abef4bd2',1,'HABinarySensor::getDiscoveryJson()'],['../classHACover.html#ab8bc696d21186a4468f8add2c5e8d7c2',1,'HACover::getDiscoveryJson()'],['../classHASensor.html#a4e1eb68bd22273bc33e60c01f703e08f',1,'HASensor::getDiscoveryJson()'],['../classHASwitch.html#a6f1fba7f12792a5a622de9db17cd2bc9',1,'HASwitch::getDiscoveryJson()'],['../classHATrigger.html#a09bed6e6ead886a7b0389afe7470835c',1,'HATrigger::getDiscoveryJson()']]],\n  ['getdiscoverytopic_1217',['getDiscoveryTopic',['../classHAEntity.html#a264a9779679d77db65566233a952100d',1,'HAEntity']]],\n  ['getencriptionkey_1218',['getEncriptionKey',['../classNode.html#a61ac445d996a9304b34fc78a2514364f',1,'Node']]],\n  ['geterrorpackets_1219',['getErrorPackets',['../classEnigmaIOTGatewayClass.html#a160b39becf7cdf8700059947eaf6a73b',1,'EnigmaIOTGatewayClass']]],\n  ['getgwinfo_1220',['getGwInfo',['../classGatewayAPI.html#a988dd5005172de330ab5794e98ee6e6a',1,'GatewayAPI']]],\n  ['getinitassleepy_1221',['getInitAsSleepy',['../classNode.html#a89ccd5b416ac31593da426c48ec8562a',1,'Node']]],\n  ['getinputmsgqueue_1222',['getInputMsgQueue',['../classEnigmaIOTGatewayClass.html#ac3355fe40cad325eddb8e37dd9ddfaf5',1,'EnigmaIOTGatewayClass']]],\n  ['getkeyvalidfrom_1223',['getKeyValidFrom',['../classNode.html#a30a8e0aaad582a1baa269c6641150586',1,'Node']]],\n  ['getlastbroadcastmsgcounter_1224',['getLastBroadcastMsgCounter',['../classNodeList.html#acfff6ed812a219b7b7514989da7fc34e',1,'NodeList']]],\n  ['getlastcontrolcounter_1225',['getLastControlCounter',['../classNode.html#ae4b169a75d7c1fa535eb883c28683001',1,'Node']]],\n  ['getlastdownlinkmsgcounter_1226',['getLastDownlinkMsgCounter',['../classNode.html#aecf8d05afddcd5d460472963ee88bd2b',1,'Node']]],\n  ['getlastmessagecounter_1227',['getLastMessageCounter',['../classNode.html#ab5c31a536cb60a6c86dec8524117f50e',1,'Node']]],\n  ['getlastmessagetime_1228',['getLastMessageTime',['../classNode.html#a15877a320c33f77402c5700774d936cc',1,'Node']]],\n  ['getmacaddress_1229',['getMacAddress',['../classNode.html#a4cefee4f9feaa563b8e8a725a847e9ac',1,'Node']]],\n  ['getmaxmessagelength_1230',['getMaxMessageLength',['../classEspnow__halClass.html#a3a037c0d31f906bc24a8475b376072fd',1,'Espnow_halClass']]],\n  ['getmaxnodes_1231',['getMaxNodes',['../classGatewayAPI.html#acdc60e8f65bd9c74951bed1c951fbc8c',1,'GatewayAPI']]],\n  ['getmqttqueue_1232',['getMQTTqueue',['../classGwOutput__MQTT.html#a364652fab162760bcc7f647933752742',1,'GwOutput_MQTT']]],\n  ['getnetworkkey_1233',['getNetworkKey',['../classEnigmaIOTGatewayClass.html#ac015f00758aac57a7f7ef2ffe26298b3',1,'EnigmaIOTGatewayClass']]],\n  ['getnetworkname_1234',['getNetworkName',['../classEnigmaIOTGatewayClass.html#a29ed1ba0c2a04911013795cb11ff13e4',1,'EnigmaIOTGatewayClass']]],\n  ['getnewnode_1235',['getNewNode',['../classNodeList.html#a04851c9373e00d3c91c11a87d052f1f2',1,'NodeList']]],\n  ['getnextactivenode_1236',['getNextActiveNode',['../classNodeList.html#a72dc59a4a4d32e2918b20038f2837ee2',1,'NodeList::getNextActiveNode(uint16_t nodeId)'],['../classNodeList.html#add85a6384d393648fa7ca693a0dba44c',1,'NodeList::getNextActiveNode(Node *node)']]],\n  ['getnextnumber_1237',['getNextNumber',['../EnigmaIOTGateway_8cpp.html#aad57d7638e39d6c3a95654f2c1e29e7f',1,'EnigmaIOTGateway.cpp']]],\n  ['getnode_1238',['getNode',['../classEnigmaIOTNodeClass.html#a6aaa73dd705c9bdaa7c2b1fe70cb91ed',1,'EnigmaIOTNodeClass']]],\n  ['getnodedata_1239',['getNodeData',['../classNode.html#a129745eaa2b8e08ac8201809a6e2cb17',1,'Node']]],\n  ['getnodefromid_1240',['getNodeFromID',['../classNodeList.html#aab4a7f7971eeeb4c0fa3af8064006b79',1,'NodeList']]],\n  ['getnodefrommac_1241',['getNodeFromMAC',['../classNodeList.html#a08530d06e81c160b346047e37839ee7d',1,'NodeList']]],\n  ['getnodefromname_1242',['getNodeFromName',['../classNodeList.html#a08caf502661a3bf1b75ba6860eb1bebe',1,'NodeList']]],\n  ['getnodefromparam_1243',['getNodeFromParam',['../classGatewayAPI.html#aac43275cab1febf267c3be296ff39de2',1,'GatewayAPI']]],\n  ['getnodeid_1244',['getNodeId',['../classNode.html#a2563f7f556d09035dbbf042656d4fa3a',1,'Node']]],\n  ['getnodeinfo_1245',['getNodeInfo',['../classGatewayAPI.html#a41ac77b547570020ee4d0b3f98bb482f',1,'GatewayAPI']]],\n  ['getnodename_1246',['getNodeName',['../classNode.html#a5c665e844c5f7f121a72baae270a2ba7',1,'Node']]],\n  ['getnodenumber_1247',['getNodeNumber',['../classGatewayAPI.html#a586cbe445b206083b64ee0a3c5c9075c',1,'GatewayAPI']]],\n  ['getnodes_1248',['getNodes',['../classEnigmaIOTGatewayClass.html#aabb971124202457b2e8a3627217dd213',1,'EnigmaIOTGatewayClass::getNodes()'],['../classGatewayAPI.html#ac0e84242a98c65b55dd8365f1e43db68',1,'GatewayAPI::getNodes()']]],\n  ['getoffset_1249',['getOffset',['../classTimeManagerClass.html#ae188f14a7cf5c38c5ab09b0dc5460490',1,'TimeManagerClass']]],\n  ['getotarunning_1250',['getOTArunning',['../classEnigmaIOTNodeClass.html#a3398ebecf52e1d7b5493d34ed011c38f',1,'EnigmaIOTNodeClass']]],\n  ['getpacketshour_1251',['getPacketsHour',['../classEnigmaIOTGatewayClass.html#a77da5264eb27ff8d378a8b279c8b97c0',1,'EnigmaIOTGatewayClass']]],\n  ['getper_1252',['getPER',['../classEnigmaIOTGatewayClass.html#afb41f49d1291eebbd676d4915ee193d1',1,'EnigmaIOTGatewayClass']]],\n  ['getprivdhkey_1253',['getPrivDHKey',['../classCryptModule.html#a9d106f893f329d8648aba205b3717806',1,'CryptModule']]],\n  ['getpubdhkey_1254',['getPubDHKey',['../classCryptModule.html#aefc84d57eee3eceeadc3611866925804',1,'CryptModule']]],\n  ['getrssi_1255',['getRSSI',['../classEnigmaIOTNodeClass.html#ae6176d81e34ccc835f6886c23ba47d93',1,'EnigmaIOTNodeClass::getRSSI()'],['../classNode.html#ac9cb809cbf8a76bda02e2c92731b213b',1,'Node::getRSSI()']]],\n  ['getsha256_1256',['getSHA256',['../classCryptModule.html#a0bc27edb1340a28f92b43dd4f91e9a16',1,'CryptModule']]],\n  ['getshouldsave_1257',['getShouldSave',['../classEnigmaIOTGatewayClass.html#a446e327328ebbcbe9b20f38f1080b9e6',1,'EnigmaIOTGatewayClass']]],\n  ['getsleeptime_1258',['getSleepTime',['../classEnigmaIOTNodeClass.html#a0144b183ee216aa5b977086ae1753d3c',1,'EnigmaIOTNodeClass']]],\n  ['getsleepy_1259',['getSleepy',['../classNode.html#a5bf02d202c9cb76831de89e4d1ef8893',1,'Node']]],\n  ['getstatus_1260',['getStatus',['../classEnigmaIOTGatewayClass.html#a6d0c9737f65f857080b7d11c34f4141e',1,'EnigmaIOTGatewayClass::getStatus()'],['../classEnigmaIOTNodeClass.html#a726847ca0ed458b01c23e78672aa4059',1,'EnigmaIOTNodeClass::getStatus()'],['../classNode.html#a6172f9eb39a02f01b692a53b9ee09c56',1,'Node::getStatus()']]],\n  ['gettopicaddress_1261',['getTopicAddress',['../GwOutput__mqtt_8cpp.html#aee4f7d364dbe6c4b29c462b3306bebe7',1,'GwOutput_mqtt.cpp']]],\n  ['gettopictype_1262',['getTopicType',['../GwOutput__mqtt_8cpp.html#a0ad2a145294a0b58f6e5b5e3d8ad542f',1,'GwOutput_mqtt.cpp']]],\n  ['gettotalpackets_1263',['getTotalPackets',['../classEnigmaIOTGatewayClass.html#a8eed8023d964354b6a2533c9662037e4',1,'EnigmaIOTGatewayClass']]],\n  ['gettriggersubtypestr_1264',['getTriggerSubtypeStr',['../classHATrigger.html#a2886663fe1bc9b03ecb7024e646eab0b',1,'HATrigger']]],\n  ['gettriggertypestr_1265',['getTriggerTypeStr',['../classHATrigger.html#a25585b365d726848d22ad5c4f299d803',1,'HATrigger']]],\n  ['getversion_1266',['getVersion',['../classNode.html#a628b04339453635be34148c9fbe66506',1,'Node']]],\n  ['gwoutput_5fmqtt_1267',['GwOutput_MQTT',['../classGwOutput__MQTT.html#a50976e1efb3c1570e3596672ffd83c56',1,'GwOutput_MQTT']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_7.js",
    "content": "var searchData=\n[\n  ['habinarysensor_1268',['HABinarySensor',['../classHABinarySensor.html#a24cc503973f65dadac7575a2bba823b6',1,'HABinarySensor']]],\n  ['hacover_1269',['HACover',['../classHACover.html#acc7fe4e246ebd9af4ff958447ec78d86',1,'HACover']]],\n  ['haentity_1270',['HAEntity',['../classHAEntity.html#a1e3da7d22fd155a3661f754b9b1f64a3',1,'HAEntity']]],\n  ['handle_1271',['handle',['../classComms__halClass.html#a1038d7620825a653dfa36af70a2fca04',1,'Comms_halClass::handle()'],['../classEnigmaIOTGatewayClass.html#a52bbd932eb2a7fac9a3dc1debbc62e5b',1,'EnigmaIOTGatewayClass::handle()'],['../classEnigmaIOTNodeClass.html#a53bbbb07409315ada40ad53d00344252',1,'EnigmaIOTNodeClass::handle()'],['../classEspnow__halClass.html#aa332cba65f82a6e14af3ca5ef59732e9',1,'Espnow_halClass::handle()']]],\n  ['hasclocksync_1272',['hasClockSync',['../classEnigmaIOTNodeClass.html#a1c015860a4a1650d3e2653212d13179e',1,'EnigmaIOTNodeClass']]],\n  ['hasensor_1273',['HASensor',['../classHASensor.html#a07979a82942d08d6f24db5b76e6fe269',1,'HASensor']]],\n  ['haswitch_1274',['HASwitch',['../classHASwitch.html#a282ac7ec44e7fc43d0d6493808e68ba3',1,'HASwitch']]],\n  ['hatrigger_1275',['HATrigger',['../classHATrigger.html#a91af9e612da244483b5704c4ed835d0f',1,'HATrigger']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_8.js",
    "content": "var searchData=\n[\n  ['inclastbroadcastmsgcounter_1276',['incLastBroadcastMsgCounter',['../classNodeList.html#ab822a0ab8cb5fbdfc582dd7fc5c73042',1,'NodeList']]],\n  ['initbroadcastnode_1277',['initBroadcastNode',['../classNodeList.html#a956635fa60412a9a026ea64245dd4443',1,'NodeList']]],\n  ['initcomms_1278',['initComms',['../classComms__halClass.html#a67d74c717b8f3919307738be9d963312',1,'Comms_halClass::initComms()'],['../classEspnow__halClass.html#a47f4ee9859b73356a27f6baaa2f009c9',1,'Espnow_halClass::initComms()']]],\n  ['initratefilter_1279',['initRateFilter',['../classNode.html#a90d944dd41d445ec73a5b9534483329f',1,'Node']]],\n  ['initwifi_1280',['initWiFi',['../helperFunctions_8cpp.html#ad22aae6146b9da40aa95e2acfe12f6d3',1,'initWiFi(uint8_t channel, const char *networkName, const char *networkKey, uint8_t role):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a5efcbae54fb852b8a9b23a25931e3f7a',1,'initWiFi(uint8_t channel, const char *networkName, const char *networkKey=NULL, uint8_t role=0):&#160;helperFunctions.cpp']]],\n  ['invalidatekey_1281',['invalidateKey',['../classEnigmaIOTGatewayClass.html#ac241f6c48c82d297389d78ec338ddb33',1,'EnigmaIOTGatewayClass']]],\n  ['isbroadcastkeyrequested_1282',['isBroadcastKeyRequested',['../classNode.html#a30aa0104f6df938075c7ff4ac64b3f41',1,'Node']]],\n  ['isfull_1283',['isFull',['../classEnigmaIOTRingBuffer.html#a95e56ba5a8626aaabb4b17d267e91374',1,'EnigmaIOTRingBuffer']]],\n  ['ishexchar_1284',['isHexChar',['../EnigmaIOTGateway_8cpp.html#ad08e6ed992bb54d4ab67627295e7fcf0',1,'EnigmaIOTGateway.cpp']]],\n  ['iskeyvalid_1285',['isKeyValid',['../classNode.html#aa382c421546fc99b22b4698acb36c3d8',1,'Node']]],\n  ['isnumber_1286',['isNumber',['../helperFunctions_8cpp.html#aa76d044529f5f932eb6014b50047c02b',1,'isNumber(const char *input):&#160;helperFunctions.cpp'],['../helperFunctions_8cpp.html#a26eaeecca0f44f0e5cf47b1f044a1306',1,'isNumber(const char *input, size_t len):&#160;helperFunctions.cpp'],['../helperFunctions_8cpp.html#a8d64848792adcc6a1094ea0eef6bed51',1,'isNumber(String input):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#aa76d044529f5f932eb6014b50047c02b',1,'isNumber(const char *input):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a26eaeecca0f44f0e5cf47b1f044a1306',1,'isNumber(const char *input, size_t len):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a8d64848792adcc6a1094ea0eef6bed51',1,'isNumber(String input):&#160;helperFunctions.cpp']]],\n  ['isregistered_1287',['isRegistered',['../classEnigmaIOTNodeClass.html#a43abab3a73d46ff99f33c8596512dcaf',1,'EnigmaIOTNodeClass::isRegistered()'],['../classNode.html#a0b809fd0304e6e55173ac1e6fa8d3dc8',1,'Node::isRegistered()']]],\n  ['istimeadjusted_1288',['isTimeAdjusted',['../classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615',1,'TimeManagerClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_9.js",
    "content": "var searchData=\n[\n  ['loadconfig_1289',['loadConfig',['../classCONTROLLER__CLASS__NAME.html#ab2dd07a8fecca7f083f2776dbc294dc9',1,'CONTROLLER_CLASS_NAME::loadConfig() override'],['../classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b',1,'CONTROLLER_CLASS_NAME::loadConfig()'],['../classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b',1,'CONTROLLER_CLASS_NAME::loadConfig()'],['../classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b',1,'CONTROLLER_CLASS_NAME::loadConfig()'],['../classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b',1,'CONTROLLER_CLASS_NAME::loadConfig()'],['../classCONTROLLER__CLASS__NAME.html#afad5a8415e36756b812a53bc889fcd4b',1,'CONTROLLER_CLASS_NAME::loadConfig()'],['../classGatewayOutput__dummy.html#a359bd95cdb353b885d4bd691239b64fa',1,'GatewayOutput_dummy::loadConfig()'],['../classGwOutput__MQTT.html#af0ca1b2ce62b76f4729d879144a3183f',1,'GwOutput_MQTT::loadConfig()'],['../classEnigmaIOTjsonController.html#a48bf137d2f77f2167f2c2d56cdf26c10',1,'EnigmaIOTjsonController::loadConfig()'],['../classGatewayOutput__generic.html#a16e1aa9a995c69e87a4b2e5ecc536c73',1,'GatewayOutput_generic::loadConfig()']]],\n  ['loadflashdata_1290',['loadFlashData',['../classEnigmaIOTGatewayClass.html#aaa13dfa56be2d1ad062cc69f6deef331',1,'EnigmaIOTGatewayClass::loadFlashData()'],['../classEnigmaIOTNodeClass.html#a8574c3435e748fbca1b99eeec4c770c2',1,'EnigmaIOTNodeClass::loadFlashData()']]],\n  ['loadrtcdata_1291',['loadRTCData',['../classEnigmaIOTNodeClass.html#af1408c0ed378a9b46e62d98f88545893',1,'EnigmaIOTNodeClass']]],\n  ['loop_1292',['loop',['../classCONTROLLER__CLASS__NAME.html#ae744508f79e2bdfcc7352908d537a671',1,'CONTROLLER_CLASS_NAME::loop() override'],['../classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5',1,'CONTROLLER_CLASS_NAME::loop()'],['../classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5',1,'CONTROLLER_CLASS_NAME::loop()'],['../classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5',1,'CONTROLLER_CLASS_NAME::loop()'],['../classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5',1,'CONTROLLER_CLASS_NAME::loop()'],['../classCONTROLLER__CLASS__NAME.html#a4848555c02bbbddd9af9f3f60a9117f5',1,'CONTROLLER_CLASS_NAME::loop()'],['../classGatewayOutput__dummy.html#ad5def4e2c7a3e1de387bf16a3f5ad8d7',1,'GatewayOutput_dummy::loop()'],['../classGwOutput__MQTT.html#ab095e92704ccc350df9f0767a2b118d0',1,'GwOutput_MQTT::loop()'],['../classEnigmaIOTjsonController.html#a7d1e90a75f4b1b5abd5480d00102debf',1,'EnigmaIOTjsonController::loop()'],['../classGatewayOutput__generic.html#a12bceac925f871d3f95d06c4f4332343',1,'GatewayOutput_generic::loop()'],['../EnigmaIOT-Button-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;enigmaiot_node_nonsleepy.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'loop():&#160;EnigmaIOTGatewayMQTT.cpp']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_a.js",
    "content": "var searchData=\n[\n  ['mac2str_1293',['mac2str',['../helperFunctions_8cpp.html#a4aa65746e6dd83962165de3c3191c41f',1,'mac2str(const uint8_t *mac, char *extBuffer):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#aa4d5213c3c8ecf522b12f0469ffbe840',1,'mac2str(const uint8_t *mac, char *extBuffer=NULL):&#160;helperFunctions.cpp']]],\n  ['main_1294',['main',['../namespaceEnigmaIoTUpdate.html#a0625a265d8105bb0e6aa1503f88e21cd',1,'EnigmaIoTUpdate']]],\n  ['managemessage_1295',['manageMessage',['../classEnigmaIOTGatewayClass.html#a2e19a23469e04f87744ffc930e51cf8e',1,'EnigmaIOTGatewayClass::manageMessage()'],['../classEnigmaIOTNodeClass.html#a846d3d0dd41fcaa8944e7cbe804bef93',1,'EnigmaIOTNodeClass::manageMessage()']]],\n  ['measuremessage_1296',['measureMessage',['../classHAEntity.html#ad299ecdb73519da56e2f5439941af544',1,'HAEntity']]],\n  ['medianfilter_1297',['medianFilter',['../classFilterClass.html#acad3de8f5f8b3565168ef3850eaf528d',1,'FilterClass']]],\n  ['memstr_1298',['memstr',['../EnigmaIOTGateway_8cpp.html#aab651c53aaa5c935e3cc662399d0f091',1,'EnigmaIOTGateway.cpp']]],\n  ['methodtostring_1299',['methodToString',['../GatewayAPI_8cpp.html#a444bff15005e31fc8680af5c3a822984',1,'methodToString(WebRequestMethodComposite method):&#160;GatewayAPI.cpp'],['../GatewayAPI_8h.html#a444bff15005e31fc8680af5c3a822984',1,'methodToString(WebRequestMethodComposite method):&#160;GatewayAPI.cpp']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_b.js",
    "content": "var searchData=\n[\n  ['newnodeconnected_1300',['newNodeConnected',['../EnigmaIOTGatewayDummy_8cpp.html#a60e672b8465063bff29ed39899e15948',1,'newNodeConnected(uint8_t *mac, uint16_t node_id, char *nodeName=NULL):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#aa1ed5eb542d16a6542d77742a8b62677',1,'newNodeConnected(uint8_t *mac, uint16_t node_id, char *nodeName=nullptr):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['newnodesend_1301',['newNodeSend',['../classGatewayOutput__dummy.html#ae57d8fc0470c3b2fd22201eb1e3da9d4',1,'GatewayOutput_dummy::newNodeSend()'],['../classGwOutput__MQTT.html#a3d8f3d74fcf2588278651a3b4f410c1c',1,'GwOutput_MQTT::newNodeSend()'],['../classGatewayOutput__generic.html#a7e5626e20f3decbb28d85acbf14e106b',1,'GatewayOutput_generic::newNodeSend()']]],\n  ['node_1302',['Node',['../classNode.html#ad7a34779cad45d997bfd6d3d8043c75f',1,'Node::Node()'],['../classNode.html#a45db0ed8c3ce61c3cee9d2070e20493f',1,'Node::Node(node_t nodeData)']]],\n  ['nodedisconnected_1303',['nodeDisconnected',['../EnigmaIOTGatewayDummy_8cpp.html#ade106fbc95d08320451d9b901aafd230',1,'nodeDisconnected(uint8_t *mac, gwInvalidateReason_t reason):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#ade106fbc95d08320451d9b901aafd230',1,'nodeDisconnected(uint8_t *mac, gwInvalidateReason_t reason):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['nodedisconnectedsend_1304',['nodeDisconnectedSend',['../classGatewayOutput__dummy.html#a3ae96525b5a48e7bea23a36cedca7949',1,'GatewayOutput_dummy::nodeDisconnectedSend()'],['../classGwOutput__MQTT.html#a7c75a452f70d201c2d35a5394cc61f6a',1,'GwOutput_MQTT::nodeDisconnectedSend()'],['../classGatewayOutput__generic.html#a0d3fe3f57535eb485910b5a460e6bb58',1,'GatewayOutput_generic::nodeDisconnectedSend()']]],\n  ['nodelist_1305',['NodeList',['../classNodeList.html#a7cf92e8316f291e0a4e4ad608756887f',1,'NodeList']]],\n  ['nodenamesetrespose_1306',['nodeNameSetRespose',['../classEnigmaIOTGatewayClass.html#a5d854e8aa39bd51344951c5205c09381',1,'EnigmaIOTGatewayClass']]],\n  ['nodeop_1307',['nodeOp',['../classGatewayAPI.html#a6a8626b2221280938b28f4963df8daec',1,'GatewayAPI']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_c.js",
    "content": "var searchData=\n[\n  ['on_5fconnect_1308',['on_connect',['../namespaceEnigmaIoTUpdate.html#a9e979dfe91c5de2dfa6660efcf30bb9a',1,'EnigmaIoTUpdate']]],\n  ['on_5fmessage_1309',['on_message',['../namespaceEnigmaIoTUpdate.html#a162ca4b2a6c3e338d7e86162b09eb13a',1,'EnigmaIoTUpdate']]],\n  ['onconnected_1310',['onConnected',['../classEnigmaIOTNodeClass.html#acce855b22bb1045a9cf4af9c4130500f',1,'EnigmaIOTNodeClass']]],\n  ['ondatarcvd_1311',['onDataRcvd',['../classComms__halClass.html#a0db88323996d12342a9c60143d90c51f',1,'Comms_halClass::onDataRcvd()'],['../classEspnow__halClass.html#a6b28bd22a237920c95ee9cf3f9a5ca77',1,'Espnow_halClass::onDataRcvd()']]],\n  ['ondatarx_1312',['onDataRx',['../classEnigmaIOTGatewayClass.html#a2611c30452fc9785b3958eddca02daf8',1,'EnigmaIOTGatewayClass::onDataRx()'],['../classEnigmaIOTNodeClass.html#a2c8523627fb660441dbdcbc8a796c3b4',1,'EnigmaIOTNodeClass::onDataRx()']]],\n  ['ondatasent_1313',['onDataSent',['../classComms__halClass.html#a393acd5ba5c49031b3c827f7cbce37fa',1,'Comms_halClass::onDataSent()'],['../classEspnow__halClass.html#a6104d185737252c0e86476d6eca6a62b',1,'Espnow_halClass::onDataSent()']]],\n  ['ondisconnected_1314',['onDisconnected',['../classEnigmaIOTNodeClass.html#a636b6779d3c5a41e52fd6bb4b0ef31c0',1,'EnigmaIOTNodeClass']]],\n  ['ondldata_1315',['onDlData',['../classGwOutput__MQTT.html#adf39a6783d746e4b54fedb3d59f2dca9',1,'GwOutput_MQTT']]],\n  ['ondownlinkdata_1316',['onDownlinkData',['../EnigmaIOTGatewayDummy_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8',1,'onDownlinkData(uint8_t *address, char *nodeName, control_message_type_t msgType, char *data, unsigned int len):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#ad84b439af2caa4fa2b92ba383b9513a8',1,'onDownlinkData(uint8_t *address, char *nodeName, control_message_type_t msgType, char *data, unsigned int len):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['ongatewayrestartrequested_1317',['onGatewayRestartRequested',['../classEnigmaIOTGatewayClass.html#a5c8f994db7043a0e12f9c1d2149e63db',1,'EnigmaIOTGatewayClass']]],\n  ['onhadiscovery_1318',['onHADiscovery',['../classEnigmaIOTGatewayClass.html#a5ddb096aa5a0ec2113307a1480992a83',1,'EnigmaIOTGatewayClass']]],\n  ['onnewnode_1319',['onNewNode',['../classEnigmaIOTGatewayClass.html#a1726020bc65217b9ec4d01bb0216a526',1,'EnigmaIOTGatewayClass']]],\n  ['onnodedisconnected_1320',['onNodeDisconnected',['../classEnigmaIOTGatewayClass.html#a975c9b549e113deebe5581d5107d34b2',1,'EnigmaIOTGatewayClass']]],\n  ['onnotfound_1321',['onNotFound',['../classGatewayAPI.html#af0168b2c02e399884441f2ce9534eaef',1,'GatewayAPI']]],\n  ['onwifimanagerexit_1322',['onWiFiManagerExit',['../classEnigmaIOTGatewayClass.html#a74f3b21d578650defdb63b334102dc48',1,'EnigmaIOTGatewayClass::onWiFiManagerExit()'],['../classEnigmaIOTNodeClass.html#a43809462401bef0a7697175450f025ae',1,'EnigmaIOTNodeClass::onWiFiManagerExit()']]],\n  ['onwifimanagerstarted_1323',['onWiFiManagerStarted',['../classEnigmaIOTGatewayClass.html#a037f8a0b338363b5555f353df30120ca',1,'EnigmaIOTGatewayClass::onWiFiManagerStarted()'],['../classEnigmaIOTNodeClass.html#a92cabfdedc76da41398b548ff7e6e799',1,'EnigmaIOTNodeClass::onWiFiManagerStarted()']]],\n  ['outputcontrolsend_1324',['outputControlSend',['../classGatewayOutput__dummy.html#a500819e2a3f4478adc06a72af00ebb9a',1,'GatewayOutput_dummy::outputControlSend()'],['../classGwOutput__MQTT.html#a56f7002fc97ec92b1145f30ec79a1e84',1,'GwOutput_MQTT::outputControlSend()'],['../classGatewayOutput__generic.html#a050f9bea35a220be645be5d99fbc3a07',1,'GatewayOutput_generic::outputControlSend()']]],\n  ['outputdatasend_1325',['outputDataSend',['../classGatewayOutput__dummy.html#aa2a2fb3ae886350f38e8d6d534278a00',1,'GatewayOutput_dummy::outputDataSend()'],['../classGwOutput__MQTT.html#a9222adf0c343e915c70317d14dc67778',1,'GwOutput_MQTT::outputDataSend()'],['../classGatewayOutput__generic.html#a8a61150a6388caee08a1092def5bdce5',1,'GatewayOutput_generic::outputDataSend()']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_d.js",
    "content": "var searchData=\n[\n  ['pop_1326',['pop',['../classEnigmaIOTRingBuffer.html#ab8124d524ffeb47ab53c5435ac2fe4c8',1,'EnigmaIOTRingBuffer']]],\n  ['popcommsqueue_1327',['popCommsQueue',['../classEspnow__halClass.html#ace124e6371edc5af949f74726566b5e1',1,'Espnow_halClass']]],\n  ['popinputmsgqueue_1328',['popInputMsgQueue',['../classEnigmaIOTGatewayClass.html#abf7f0271c0938cf36f316bf3338aba4b',1,'EnigmaIOTGatewayClass']]],\n  ['popmqttqueue_1329',['popMQTTqueue',['../classGwOutput__MQTT.html#a33e3bd471247ea79b53136eef1cd5a3a',1,'GwOutput_MQTT']]],\n  ['printhexbuffer_1330',['printHexBuffer',['../helperFunctions_8cpp.html#a34002f0936dac45b08bba5436ddc8a09',1,'printHexBuffer(const uint8_t *buffer, uint16_t len):&#160;helperFunctions.cpp'],['../helperFunctions_8h.html#a34002f0936dac45b08bba5436ddc8a09',1,'printHexBuffer(const uint8_t *buffer, uint16_t len):&#160;helperFunctions.cpp']]],\n  ['printtoserial_1331',['printToSerial',['../classNode.html#a36b675e4186420fb1f8e324fc0987cbd',1,'Node::printToSerial()'],['../classNodeList.html#a239930df15810784dab9a3284730a35f',1,'NodeList::printToSerial()']]],\n  ['processbroadcastkeymessage_1332',['processBroadcastKeyMessage',['../classEnigmaIOTNodeClass.html#a95a7b8677828b1fe4c6e45a13deeb83b',1,'EnigmaIOTNodeClass']]],\n  ['processclienthello_1333',['processClientHello',['../classEnigmaIOTGatewayClass.html#a17e46dd4d8b522e0ce91b729e9687350',1,'EnigmaIOTGatewayClass']]],\n  ['processclockrequest_1334',['processClockRequest',['../classEnigmaIOTGatewayClass.html#a0ea92c22b1d415d53d635391d9ef6b07',1,'EnigmaIOTGatewayClass']]],\n  ['processclockresponse_1335',['processClockResponse',['../classEnigmaIOTNodeClass.html#ad35575e4aa02a2ef38baa14a2dea0f67',1,'EnigmaIOTNodeClass']]],\n  ['processcontrolcommand_1336',['processControlCommand',['../classEnigmaIOTNodeClass.html#a59f5ef49f540e586fb43dc984c0ed696',1,'EnigmaIOTNodeClass']]],\n  ['processcontrolmessage_1337',['processControlMessage',['../classEnigmaIOTGatewayClass.html#a90c1c1bffe2884247a2e047d7d254767',1,'EnigmaIOTGatewayClass']]],\n  ['processdatamessage_1338',['processDataMessage',['../classEnigmaIOTGatewayClass.html#a44cd0a3ac1595ecd3156af130a2cb130',1,'EnigmaIOTGatewayClass']]],\n  ['processdownstreamdata_1339',['processDownstreamData',['../classEnigmaIOTNodeClass.html#aab18d9b24e08c00bcbac6bd5f1792d63',1,'EnigmaIOTNodeClass']]],\n  ['processgetnamecommand_1340',['processGetNameCommand',['../classEnigmaIOTNodeClass.html#a32a98693bfc71a16f8f3c6db7053221c',1,'EnigmaIOTNodeClass']]],\n  ['processgetrssicommand_1341',['processGetRSSICommand',['../classEnigmaIOTNodeClass.html#a0d4446a73e230333f972b233fa2dffdd',1,'EnigmaIOTNodeClass']]],\n  ['processgetsleeptimecommand_1342',['processGetSleepTimeCommand',['../classEnigmaIOTNodeClass.html#a5b8a2368449f3fd7a1986fb80d9e4274',1,'EnigmaIOTNodeClass']]],\n  ['processinvalidatekey_1343',['processInvalidateKey',['../classEnigmaIOTNodeClass.html#a22c565018d72ac1df23a765a713fd768',1,'EnigmaIOTNodeClass']]],\n  ['processnodenameset_1344',['processNodeNameSet',['../classEnigmaIOTGatewayClass.html#ae9b4cf7f3cd2da454161b943ba285cd0',1,'EnigmaIOTGatewayClass']]],\n  ['processotacommand_1345',['processOTACommand',['../classEnigmaIOTNodeClass.html#aa632927a0a9da18d3605e29aa3a055f2',1,'EnigmaIOTNodeClass']]],\n  ['processrxcommand_1346',['processRxCommand',['../classCONTROLLER__CLASS__NAME.html#a440e2979ce22f7fac243f6063469db6c',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override'],['../classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)'],['../classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)'],['../classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)'],['../classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)'],['../classCONTROLLER__CLASS__NAME.html#a584fb205957a7b3ca83fb76066af5268',1,'CONTROLLER_CLASS_NAME::processRxCommand(const uint8_t *address, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)'],['../classEnigmaIOTjsonController.html#ab2f0dacf8b11038d862eb9fa3f1254ca',1,'EnigmaIOTjsonController::processRxCommand()']]],\n  ['processrxcontroldata_1347',['processRxControlData',['../EnigmaIOTGatewayDummy_8cpp.html#acecaff385e13802f95e84d1ece4f6322',1,'processRxControlData(char *macStr, uint8_t *data, uint8_t length):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#acecaff385e13802f95e84d1ece4f6322',1,'processRxControlData(char *macStr, uint8_t *data, uint8_t length):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['processrxdata_1348',['processRxData',['../EnigmaIOT-Button-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;EnigmaIOT-SmartSwitch-Controller.cpp'],['../enigmaiot__led__flasher_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#a15c150763c9e39ec5e7b94a5fddcb95f',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t encoding):&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#a81397ad933b5a8b902d6161f702838fc',1,'processRxData(const uint8_t *mac, const uint8_t *buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding):&#160;enigmaiot_node_nonsleepy.cpp'],['../EnigmaIOTGatewayDummy_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c',1,'processRxData(uint8_t *mac, uint8_t *buffer, uint8_t length, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char *nodeName=NULL):&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a5fd7dd2cafc98a62e99242dd11968a7c',1,'processRxData(uint8_t *mac, uint8_t *buffer, uint8_t length, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char *nodeName=NULL):&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['processserverhello_1349',['processServerHello',['../classEnigmaIOTNodeClass.html#a777ffbcfe25563aae4ddbb77bdca4fc0',1,'EnigmaIOTNodeClass']]],\n  ['processsetidentifycommand_1350',['processSetIdentifyCommand',['../classEnigmaIOTNodeClass.html#a04a1d59adae7dc0786ac6e066c5d1263',1,'EnigmaIOTNodeClass']]],\n  ['processsetnamecommand_1351',['processSetNameCommand',['../classEnigmaIOTNodeClass.html#a27731975d4dc4feeafb7ac42ab5a4035',1,'EnigmaIOTNodeClass']]],\n  ['processsetnameresponse_1352',['processSetNameResponse',['../classEnigmaIOTNodeClass.html#acd0424de61195d76ff09a7462d539d7e',1,'EnigmaIOTNodeClass']]],\n  ['processsetresetconfigcommand_1353',['processSetResetConfigCommand',['../classEnigmaIOTNodeClass.html#a3c807080f0701745c68182181677a98d',1,'EnigmaIOTNodeClass']]],\n  ['processsetrestartcommand_1354',['processSetRestartCommand',['../classEnigmaIOTNodeClass.html#a9233d49a0d125e9c7054c6e70f377d56',1,'EnigmaIOTNodeClass']]],\n  ['processsetsleeptimecommand_1355',['processSetSleepTimeCommand',['../classEnigmaIOTNodeClass.html#ab348fec65af29c28ebc8c1a342e3b241',1,'EnigmaIOTNodeClass']]],\n  ['processunencrypteddatamessage_1356',['processUnencryptedDataMessage',['../classEnigmaIOTGatewayClass.html#a78b4e66eaf1e4a1cdb4baead912fb1cc',1,'EnigmaIOTGatewayClass']]],\n  ['processversioncommand_1357',['processVersionCommand',['../classEnigmaIOTNodeClass.html#ac2c135a9d3623b28dda13acdbd4d5615',1,'EnigmaIOTNodeClass']]],\n  ['publishmqtt_1358',['publishMQTT',['../classGwOutput__MQTT.html#a783864c965f340fab5d24ccf63acb162',1,'GwOutput_MQTT']]],\n  ['push_1359',['push',['../classEnigmaIOTRingBuffer.html#a0356f7e08a203093ad1c03e27ac18d0a',1,'EnigmaIOTRingBuffer']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_e.js",
    "content": "var searchData=\n[\n  ['quicksort_1360',['quicksort',['../classFilterClass.html#af7fa09578d556d8289807f25faf148f7',1,'FilterClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/functions_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/functions_f.js",
    "content": "var searchData=\n[\n  ['random_1361',['random',['../classCryptModule.html#a96b21ebe23b1914e09408bd3e41b34b0',1,'CryptModule::random()'],['../classCryptModule.html#a880b6a28ae062613f81b1524df884832',1,'CryptModule::random(uint32_t max, uint32_t min=0)'],['../classCryptModule.html#a81975699307738712329b4ef8cb47675',1,'CryptModule::random(const uint8_t *buf, size_t len)']]],\n  ['reconnect_1362',['reconnect',['../classGwOutput__MQTT.html#ad225825796a387d127ccd3616ba96ec7',1,'GwOutput_MQTT']]],\n  ['reportrssi_1363',['reportRSSI',['../classEnigmaIOTNodeClass.html#ab95b384ed3f016217d9669c7982e8c08',1,'EnigmaIOTNodeClass']]],\n  ['reset_1364',['reset',['../classNode.html#a7c565caad2fea0439f28d24887ac2498',1,'Node::reset()'],['../classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8',1,'TimeManagerClass::reset()']]],\n  ['resetconfig_1365',['resetConfig',['../classEnigmaIOTNodeClass.html#a256f6a64dac541f374d00349d3a3e325',1,'EnigmaIOTNodeClass']]],\n  ['resetgw_1366',['resetGw',['../classGatewayAPI.html#afc1233fa434d46abbf2a427090d0e1d9',1,'GatewayAPI']]],\n  ['restart_1367',['restart',['../classEnigmaIOTNodeClass.html#a7d5403fd3a4bcaea590b3aa919c141dc',1,'EnigmaIOTNodeClass']]],\n  ['restartgw_1368',['restartGw',['../classGatewayAPI.html#a056461e3dc03dae2a442d419a6900314',1,'GatewayAPI']]],\n  ['restartnode_1369',['restartNode',['../classGatewayAPI.html#a44142cbbb0cada714b77c6b707495e9b',1,'GatewayAPI']]],\n  ['restartnoderequest_1370',['restartNodeRequest',['../classGatewayAPI.html#ac4244196077eddbed077df9d163198ea',1,'GatewayAPI']]],\n  ['runhandle_1371',['runHandle',['../classEspnow__halClass.html#a26ff39763f910380506fef4238eb2d52',1,'Espnow_halClass']]],\n  ['rx_5fcb_1372',['rx_cb',['../classEnigmaIOTGatewayClass.html#ad43bd94c6aebd18abd374da313d3b299',1,'EnigmaIOTGatewayClass::rx_cb()'],['../classEnigmaIOTNodeClass.html#a4efeeca90488a14e95283c31d70ee0e4',1,'EnigmaIOTNodeClass::rx_cb()'],['../classEspnow__halClass.html#a76ccfc10740955584c2fab3bc6182c47',1,'Espnow_halClass::rx_cb()']]]\n];\n"
  },
  {
    "path": "docs/html/search/namespaces_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"namespaces_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/namespaces_0.js",
    "content": "var searchData=\n[\n  ['enigmaiotupdate_1059',['EnigmaIoTUpdate',['../namespaceEnigmaIoTUpdate.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/nomatches.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/pages_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"pages_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/pages_0.js",
    "content": "var searchData=\n[\n  ['design_2062',['Design',['../md_docs_technical-background.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/pages_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"pages_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/pages_1.js",
    "content": "var searchData=\n[\n  ['enigmaiot_2063',['EnigmaIoT',['../index.html',1,'']]],\n  ['enigmaiot_20button_20controller_2064',['EnigmaIOT Button Controller',['../md_examples_EnigmaIOT-Button-Controller_readme.html',1,'']]],\n  ['enigmaiot_20dash_20button_20controller_2065',['EnigmaIOT Dash Button Controller',['../md_examples_EnigmaIOT-DashButton-Controller_readme.html',1,'']]],\n  ['enigmaiot_20json_20controller_20template_2066',['EnigmaIOT JSON Controller Template',['../md_examples_EnigmaIOT-Json-Controller-Template_readme.html',1,'']]],\n  ['enigmaiot_20led_20controller_2067',['EnigmaIOT Led Controller',['../md_examples_EnigmaIOT-Led-Controller_readme.html',1,'']]],\n  ['enigmaiot_20sensor_20controller_2068',['EnigmaIOT Sensor Controller',['../md_examples_EnigmaIOT-Sensor-Controller_readme.html',1,'']]],\n  ['enigmaiot_20smartswitch_20controller_2069',['EnigmaIOT SmartSwitch Controller',['../md_examples_EnigmaIOT-SmartSwitch-Controller_readme.html',1,'']]],\n  ['enigmaiot_20led_20flasher_20example_2070',['EnigmaIOT LED Flasher example',['../md_examples_enigmaiot_led_flasher_readme.html',1,'']]],\n  ['enigmaiot_20msgpack_20example_2071',['EnigmaIOT MsgPack example',['../md_examples_enigmaiot_node_msgpack_readme.html',1,'']]],\n  ['enigmaiot_20node_20example_2072',['EnigmaIOT Node example',['../md_examples_enigmaiot_node_nonsleepy_readme.html',1,'']]],\n  ['enigmaiot_20node_20example_2073',['EnigmaIOT Node example',['../md_examples_enigmaiot_node_readme.html',1,'']]],\n  ['enigmaiot_20gateway_20dummy_2074',['EnigmaIOT Gateway Dummy',['../md_examples_EnigmaIOTGatewayDummy_readme.html',1,'']]],\n  ['enigmaiot_20gateway_20mqtt_2075',['EnigmaIOT Gateway MQTT',['../md_examples_EnigmaIOTGatewayMQTT_readme.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/pages_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"pages_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/pages_2.js",
    "content": "var searchData=\n[\n  ['howto_2076',['howto',['../md_docs_howto.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/pages_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"pages_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/pages_3.js",
    "content": "var searchData=\n[\n  ['license_2077',['LICENSE',['../md_LICENSE.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/pages_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"pages_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/pages_4.js",
    "content": "var searchData=\n[\n  ['ota_20update_2078',['OTA Update',['../md_docs_node-ota-update.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/pages_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"pages_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/pages_5.js",
    "content": "var searchData=\n[\n  ['server_20api_2079',['Server API',['../md_docs_api.html',1,'']]]\n];\n"
  },
  {
    "path": "docs/html/search/related_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"related_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/related_0.js",
    "content": "var searchData=\n[\n  ['gatewayapi_1985',['GatewayAPI',['../classEnigmaIOTGatewayClass.html#a0b1bb7ec1dc2b4a244c77ffd04786a0c',1,'EnigmaIOTGatewayClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/related_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"related_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/related_1.js",
    "content": "var searchData=\n[\n  ['nodelist_1986',['NodeList',['../classNode.html#a796dbbcdb4e627658df143380ddb88fa',1,'Node']]]\n];\n"
  },
  {
    "path": "docs/html/search/search.css",
    "content": "/*---------------- Search Box */\n\n#MSearchBox {\n    white-space : nowrap;\n    background: white;\n    border-radius: 0.65em;\n    box-shadow: inset 0.5px 0.5px 3px 0px #555;\n    z-index: 102;\n}\n\n#MSearchBox .left {\n    display: inline-block;\n    vertical-align: middle;\n    height: 1.4em;\n}\n\n#MSearchSelect {\n    display: inline-block;\n    vertical-align: middle;\n    height: 1.4em;\n    padding: 0 0 0 0.3em;\n    margin: 0;\n}\n\n#MSearchField {\n    display: inline-block;\n    vertical-align: middle;\n    width: 7.5em;\n    height: 1.1em;\n    margin: 0 0.15em;\n    padding: 0;\n    line-height: 1em;\n    border:none;\n    color: #909090;\n    outline: none;\n    font-family: Arial, Verdana, sans-serif;\n    -webkit-border-radius: 0px;\n    border-radius: 0px;\n    background: none;\n}\n\n\n#MSearchBox .right {\n    display: inline-block;\n    vertical-align: middle;\n    width: 1.4em;\n    height: 1.4em;\n}\n\n#MSearchClose {\n    display: none;\n    font-size: inherit;\n    background : none;\n    border: none;\n    margin: 0;\n    padding: 0;\n    outline: none;\n\n}\n\n#MSearchCloseImg {\n    height: 1.4em;\n    padding: 0.3em;\n    margin: 0;\n}\n\n.MSearchBoxActive #MSearchField {\n    color: #000000;\n}\n\n#main-menu > li:last-child {\n    /* This <li> object is the parent of the search bar */\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    height: 36px;\n    margin-right: 1em;\n}\n\n/*---------------- Search filter selection */\n\n#MSearchSelectWindow {\n    display: none;\n    position: absolute;\n    left: 0; top: 0;\n    border: 1px solid #90A5CE;\n    background-color: #F9FAFC;\n    z-index: 10001;\n    padding-top: 4px;\n    padding-bottom: 4px;\n    -moz-border-radius: 4px;\n    -webkit-border-top-left-radius: 4px;\n    -webkit-border-top-right-radius: 4px;\n    -webkit-border-bottom-left-radius: 4px;\n    -webkit-border-bottom-right-radius: 4px;\n    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\n.SelectItem {\n    font: 8pt Arial, Verdana, sans-serif;\n    padding-left:  2px;\n    padding-right: 12px;\n    border: 0px;\n}\n\nspan.SelectionMark {\n    margin-right: 4px;\n    font-family: monospace;\n    outline-style: none;\n    text-decoration: none;\n}\n\na.SelectItem {\n    display: block;\n    outline-style: none;\n    color: #000000; \n    text-decoration: none;\n    padding-left:   6px;\n    padding-right: 12px;\n}\n\na.SelectItem:focus,\na.SelectItem:active {\n    color: #000000; \n    outline-style: none;\n    text-decoration: none;\n}\n\na.SelectItem:hover {\n    color: #FFFFFF;\n    background-color: #3D578C;\n    outline-style: none;\n    text-decoration: none;\n    cursor: pointer;\n    display: block;\n}\n\n/*---------------- Search results window */\n\niframe#MSearchResults {\n    width: 60ex;\n    height: 15em;\n}\n\n#MSearchResultsWindow {\n    display: none;\n    position: absolute;\n    left: 0; top: 0;\n    border: 1px solid #000;\n    background-color: #EEF1F7;\n    z-index:10000;\n}\n\n/* ----------------------------------- */\n\n\n#SRIndex {\n    clear:both; \n    padding-bottom: 15px;\n}\n\n.SREntry {\n    font-size: 10pt;\n    padding-left: 1ex;\n}\n\n.SRPage .SREntry {\n    font-size: 8pt;\n    padding: 1px 5px;\n}\n\nbody.SRPage {\n    margin: 5px 2px;\n}\n\n.SRChildren {\n    padding-left: 3ex; padding-bottom: .5em \n}\n\n.SRPage .SRChildren {\n    display: none;\n}\n\n.SRSymbol {\n    font-weight: bold; \n    color: #425E97;\n    font-family: Arial, Verdana, sans-serif;\n    text-decoration: none;\n    outline: none;\n}\n\na.SRScope {\n    display: block;\n    color: #425E97; \n    font-family: Arial, Verdana, sans-serif;\n    text-decoration: none;\n    outline: none;\n}\n\na.SRSymbol:focus, a.SRSymbol:active,\na.SRScope:focus, a.SRScope:active {\n    text-decoration: underline;\n}\n\nspan.SRScope {\n    padding-left: 4px;\n}\n\n.SRPage .SRStatus {\n    padding: 2px 5px;\n    font-size: 8pt;\n    font-style: italic;\n}\n\n.SRResult {\n    display: none;\n}\n\nDIV.searchresults {\n    margin-left: 10px;\n    margin-right: 10px;\n}\n\n/*---------------- External search page results */\n\n.searchresult {\n    background-color: #F0F3F8;\n}\n\n.pages b {\n   color: white;\n   padding: 5px 5px 3px 5px;\n   background-image: url(\"../tab_a.png\");\n   background-repeat: repeat-x;\n   text-shadow: 0 1px 1px #000000;\n}\n\n.pages {\n    line-height: 17px;\n    margin-left: 4px;\n    text-decoration: none;\n}\n\n.hl {\n    font-weight: bold;\n}\n\n#searchresults {\n    margin-bottom: 20px;\n}\n\n.searchpages {\n    margin-top: 10px;\n}\n\n"
  },
  {
    "path": "docs/html/search/search.js",
    "content": "/*\n @licstart  The following is the entire license notice for the JavaScript code in this file.\n\n The MIT License (MIT)\n\n Copyright (C) 1997-2020 by Dimitri van Heesch\n\n Permission is hereby granted, free of charge, to any person obtaining a copy of this software\n and associated documentation files (the \"Software\"), to deal in the Software without restriction,\n including without limitation the rights to use, copy, modify, merge, publish, distribute,\n sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all copies or\n substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n @licend  The above is the entire license notice for the JavaScript code in this file\n */\nfunction convertToId(search)\n{\n  var result = '';\n  for (i=0;i<search.length;i++)\n  {\n    var c = search.charAt(i);\n    var cn = c.charCodeAt(0);\n    if (c.match(/[a-z0-9\\u0080-\\uFFFF]/))\n    {\n      result+=c;\n    }\n    else if (cn<16)\n    {\n      result+=\"_0\"+cn.toString(16);\n    }\n    else\n    {\n      result+=\"_\"+cn.toString(16);\n    }\n  }\n  return result;\n}\n\nfunction getXPos(item)\n{\n  var x = 0;\n  if (item.offsetWidth)\n  {\n    while (item && item!=document.body)\n    {\n      x   += item.offsetLeft;\n      item = item.offsetParent;\n    }\n  }\n  return x;\n}\n\nfunction getYPos(item)\n{\n  var y = 0;\n  if (item.offsetWidth)\n  {\n     while (item && item!=document.body)\n     {\n       y   += item.offsetTop;\n       item = item.offsetParent;\n     }\n  }\n  return y;\n}\n\n/* A class handling everything associated with the search panel.\n\n   Parameters:\n   name - The name of the global variable that will be\n          storing this instance.  Is needed to be able to set timeouts.\n   resultPath - path to use for external files\n*/\nfunction SearchBox(name, resultsPath, inFrame, label)\n{\n  if (!name || !resultsPath) {  alert(\"Missing parameters to SearchBox.\"); }\n\n  // ---------- Instance variables\n  this.name                  = name;\n  this.resultsPath           = resultsPath;\n  this.keyTimeout            = 0;\n  this.keyTimeoutLength      = 500;\n  this.closeSelectionTimeout = 300;\n  this.lastSearchValue       = \"\";\n  this.lastResultsPage       = \"\";\n  this.hideTimeout           = 0;\n  this.searchIndex           = 0;\n  this.searchActive          = false;\n  this.insideFrame           = inFrame;\n  this.searchLabel           = label;\n\n  // ----------- DOM Elements\n\n  this.DOMSearchField = function()\n  {  return document.getElementById(\"MSearchField\");  }\n\n  this.DOMSearchSelect = function()\n  {  return document.getElementById(\"MSearchSelect\");  }\n\n  this.DOMSearchSelectWindow = function()\n  {  return document.getElementById(\"MSearchSelectWindow\");  }\n\n  this.DOMPopupSearchResults = function()\n  {  return document.getElementById(\"MSearchResults\");  }\n\n  this.DOMPopupSearchResultsWindow = function()\n  {  return document.getElementById(\"MSearchResultsWindow\");  }\n\n  this.DOMSearchClose = function()\n  {  return document.getElementById(\"MSearchClose\"); }\n\n  this.DOMSearchBox = function()\n  {  return document.getElementById(\"MSearchBox\");  }\n\n  // ------------ Event Handlers\n\n  // Called when focus is added or removed from the search field.\n  this.OnSearchFieldFocus = function(isActive)\n  {\n    this.Activate(isActive);\n  }\n\n  this.OnSearchSelectShow = function()\n  {\n    var searchSelectWindow = this.DOMSearchSelectWindow();\n    var searchField        = this.DOMSearchSelect();\n\n    if (this.insideFrame)\n    {\n      var left = getXPos(searchField);\n      var top  = getYPos(searchField);\n      left += searchField.offsetWidth + 6;\n      top += searchField.offsetHeight;\n\n      // show search selection popup\n      searchSelectWindow.style.display='block';\n      left -= searchSelectWindow.offsetWidth;\n      searchSelectWindow.style.left =  left + 'px';\n      searchSelectWindow.style.top  =  top  + 'px';\n    }\n    else\n    {\n      var left = getXPos(searchField);\n      var top  = getYPos(searchField);\n      top += searchField.offsetHeight;\n\n      // show search selection popup\n      searchSelectWindow.style.display='block';\n      searchSelectWindow.style.left =  left + 'px';\n      searchSelectWindow.style.top  =  top  + 'px';\n    }\n\n    // stop selection hide timer\n    if (this.hideTimeout)\n    {\n      clearTimeout(this.hideTimeout);\n      this.hideTimeout=0;\n    }\n    return false; // to avoid \"image drag\" default event\n  }\n\n  this.OnSearchSelectHide = function()\n  {\n    this.hideTimeout = setTimeout(this.name +\".CloseSelectionWindow()\",\n                                  this.closeSelectionTimeout);\n  }\n\n  // Called when the content of the search field is changed.\n  this.OnSearchFieldChange = function(evt)\n  {\n    if (this.keyTimeout) // kill running timer\n    {\n      clearTimeout(this.keyTimeout);\n      this.keyTimeout = 0;\n    }\n\n    var e  = (evt) ? evt : window.event; // for IE\n    if (e.keyCode==40 || e.keyCode==13)\n    {\n      if (e.shiftKey==1)\n      {\n        this.OnSearchSelectShow();\n        var win=this.DOMSearchSelectWindow();\n        for (i=0;i<win.childNodes.length;i++)\n        {\n          var child = win.childNodes[i]; // get span within a\n          if (child.className=='SelectItem')\n          {\n            child.focus();\n            return;\n          }\n        }\n        return;\n      }\n      else\n      {\n        window.frames.MSearchResults.postMessage(\"take_focus\", \"*\");\n      }\n    }\n    else if (e.keyCode==27) // Escape out of the search field\n    {\n      this.DOMSearchField().blur();\n      this.DOMPopupSearchResultsWindow().style.display = 'none';\n      this.DOMSearchClose().style.display = 'none';\n      this.lastSearchValue = '';\n      this.Activate(false);\n      return;\n    }\n\n    // strip whitespaces\n    var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n\n    if (searchValue != this.lastSearchValue) // search value has changed\n    {\n      if (searchValue != \"\") // non-empty search\n      {\n        // set timer for search update\n        this.keyTimeout = setTimeout(this.name + '.Search()',\n                                     this.keyTimeoutLength);\n      }\n      else // empty search field\n      {\n        this.DOMPopupSearchResultsWindow().style.display = 'none';\n        this.DOMSearchClose().style.display = 'none';\n        this.lastSearchValue = '';\n      }\n    }\n  }\n\n  this.SelectItemCount = function(id)\n  {\n    var count=0;\n    var win=this.DOMSearchSelectWindow();\n    for (i=0;i<win.childNodes.length;i++)\n    {\n      var child = win.childNodes[i]; // get span within a\n      if (child.className=='SelectItem')\n      {\n        count++;\n      }\n    }\n    return count;\n  }\n\n  this.SelectItemSet = function(id)\n  {\n    var i,j=0;\n    var win=this.DOMSearchSelectWindow();\n    for (i=0;i<win.childNodes.length;i++)\n    {\n      var child = win.childNodes[i]; // get span within a\n      if (child.className=='SelectItem')\n      {\n        var node = child.firstChild;\n        if (j==id)\n        {\n          node.innerHTML='&#8226;';\n        }\n        else\n        {\n          node.innerHTML='&#160;';\n        }\n        j++;\n      }\n    }\n  }\n\n  // Called when an search filter selection is made.\n  // set item with index id as the active item\n  this.OnSelectItem = function(id)\n  {\n    this.searchIndex = id;\n    this.SelectItemSet(id);\n    var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n    if (searchValue!=\"\" && this.searchActive) // something was found -> do a search\n    {\n      this.Search();\n    }\n  }\n\n  this.OnSearchSelectKey = function(evt)\n  {\n    var e = (evt) ? evt : window.event; // for IE\n    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down\n    {\n      this.searchIndex++;\n      this.OnSelectItem(this.searchIndex);\n    }\n    else if (e.keyCode==38 && this.searchIndex>0) // Up\n    {\n      this.searchIndex--;\n      this.OnSelectItem(this.searchIndex);\n    }\n    else if (e.keyCode==13 || e.keyCode==27)\n    {\n      this.OnSelectItem(this.searchIndex);\n      this.CloseSelectionWindow();\n      this.DOMSearchField().focus();\n    }\n    return false;\n  }\n\n  // --------- Actions\n\n  // Closes the results window.\n  this.CloseResultsWindow = function()\n  {\n    this.DOMPopupSearchResultsWindow().style.display = 'none';\n    this.DOMSearchClose().style.display = 'none';\n    this.Activate(false);\n  }\n\n  this.CloseSelectionWindow = function()\n  {\n    this.DOMSearchSelectWindow().style.display = 'none';\n  }\n\n  // Performs a search.\n  this.Search = function()\n  {\n    this.keyTimeout = 0;\n\n    // strip leading whitespace\n    var searchValue = this.DOMSearchField().value.replace(/^ +/, \"\");\n\n    var code = searchValue.toLowerCase().charCodeAt(0);\n    var idxChar = searchValue.substr(0, 1).toLowerCase();\n    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair\n    {\n      idxChar = searchValue.substr(0, 2);\n    }\n\n    var resultsPage;\n    var resultsPageWithSearch;\n    var hasResultsPage;\n\n    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);\n    if (idx!=-1)\n    {\n       var hexCode=idx.toString(16);\n       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';\n       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);\n       hasResultsPage = true;\n    }\n    else // nothing available for this search term\n    {\n       resultsPage = this.resultsPath + '/nomatches.html';\n       resultsPageWithSearch = resultsPage;\n       hasResultsPage = false;\n    }\n\n    window.frames.MSearchResults.location = resultsPageWithSearch;\n    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();\n\n    if (domPopupSearchResultsWindow.style.display!='block')\n    {\n       var domSearchBox = this.DOMSearchBox();\n       this.DOMSearchClose().style.display = 'inline-block';\n       if (this.insideFrame)\n       {\n         var domPopupSearchResults = this.DOMPopupSearchResults();\n         domPopupSearchResultsWindow.style.position = 'relative';\n         domPopupSearchResultsWindow.style.display  = 'block';\n         var width = document.body.clientWidth - 8; // the -8 is for IE :-(\n         domPopupSearchResultsWindow.style.width    = width + 'px';\n         domPopupSearchResults.style.width          = width + 'px';\n       }\n       else\n       {\n         var domPopupSearchResults = this.DOMPopupSearchResults();\n         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;\n         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;\n         domPopupSearchResultsWindow.style.display = 'block';\n         left -= domPopupSearchResults.offsetWidth;\n         domPopupSearchResultsWindow.style.top     = top  + 'px';\n         domPopupSearchResultsWindow.style.left    = left + 'px';\n       }\n    }\n\n    this.lastSearchValue = searchValue;\n    this.lastResultsPage = resultsPage;\n  }\n\n  // -------- Activation Functions\n\n  // Activates or deactivates the search panel, resetting things to\n  // their default values if necessary.\n  this.Activate = function(isActive)\n  {\n    if (isActive || // open it\n        this.DOMPopupSearchResultsWindow().style.display == 'block'\n       )\n    {\n      this.DOMSearchBox().className = 'MSearchBoxActive';\n\n      var searchField = this.DOMSearchField();\n\n      if (searchField.value == this.searchLabel) // clear \"Search\" term upon entry\n      {\n        searchField.value = '';\n        this.searchActive = true;\n      }\n    }\n    else if (!isActive) // directly remove the panel\n    {\n      this.DOMSearchBox().className = 'MSearchBoxInactive';\n      this.DOMSearchField().value   = this.searchLabel;\n      this.searchActive             = false;\n      this.lastSearchValue          = ''\n      this.lastResultsPage          = '';\n    }\n  }\n}\n\n// -----------------------------------------------------------------------\n\n// The class that handles everything on the search results page.\nfunction SearchResults(name)\n{\n    // The number of matches from the last run of <Search()>.\n    this.lastMatchCount = 0;\n    this.lastKey = 0;\n    this.repeatOn = false;\n\n    // Toggles the visibility of the passed element ID.\n    this.FindChildElement = function(id)\n    {\n      var parentElement = document.getElementById(id);\n      var element = parentElement.firstChild;\n\n      while (element && element!=parentElement)\n      {\n        if (element.nodeName == 'DIV' && element.className == 'SRChildren')\n        {\n          return element;\n        }\n\n        if (element.nodeName == 'DIV' && element.hasChildNodes())\n        {\n           element = element.firstChild;\n        }\n        else if (element.nextSibling)\n        {\n           element = element.nextSibling;\n        }\n        else\n        {\n          do\n          {\n            element = element.parentNode;\n          }\n          while (element && element!=parentElement && !element.nextSibling);\n\n          if (element && element!=parentElement)\n          {\n            element = element.nextSibling;\n          }\n        }\n      }\n    }\n\n    this.Toggle = function(id)\n    {\n      var element = this.FindChildElement(id);\n      if (element)\n      {\n        if (element.style.display == 'block')\n        {\n          element.style.display = 'none';\n        }\n        else\n        {\n          element.style.display = 'block';\n        }\n      }\n    }\n\n    // Searches for the passed string.  If there is no parameter,\n    // it takes it from the URL query.\n    //\n    // Always returns true, since other documents may try to call it\n    // and that may or may not be possible.\n    this.Search = function(search)\n    {\n      if (!search) // get search word from URL\n      {\n        search = window.location.search;\n        search = search.substring(1);  // Remove the leading '?'\n        search = unescape(search);\n      }\n\n      search = search.replace(/^ +/, \"\"); // strip leading spaces\n      search = search.replace(/ +$/, \"\"); // strip trailing spaces\n      search = search.toLowerCase();\n      search = convertToId(search);\n\n      var resultRows = document.getElementsByTagName(\"div\");\n      var matches = 0;\n\n      var i = 0;\n      while (i < resultRows.length)\n      {\n        var row = resultRows.item(i);\n        if (row.className == \"SRResult\")\n        {\n          var rowMatchName = row.id.toLowerCase();\n          rowMatchName = rowMatchName.replace(/^sr\\d*_/, ''); // strip 'sr123_'\n\n          if (search.length<=rowMatchName.length &&\n             rowMatchName.substr(0, search.length)==search)\n          {\n            row.style.display = 'block';\n            matches++;\n          }\n          else\n          {\n            row.style.display = 'none';\n          }\n        }\n        i++;\n      }\n      document.getElementById(\"Searching\").style.display='none';\n      if (matches == 0) // no results\n      {\n        document.getElementById(\"NoMatches\").style.display='block';\n      }\n      else // at least one result\n      {\n        document.getElementById(\"NoMatches\").style.display='none';\n      }\n      this.lastMatchCount = matches;\n      return true;\n    }\n\n    // return the first item with index index or higher that is visible\n    this.NavNext = function(index)\n    {\n      var focusItem;\n      while (1)\n      {\n        var focusName = 'Item'+index;\n        focusItem = document.getElementById(focusName);\n        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n        {\n          break;\n        }\n        else if (!focusItem) // last element\n        {\n          break;\n        }\n        focusItem=null;\n        index++;\n      }\n      return focusItem;\n    }\n\n    this.NavPrev = function(index)\n    {\n      var focusItem;\n      while (1)\n      {\n        var focusName = 'Item'+index;\n        focusItem = document.getElementById(focusName);\n        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n        {\n          break;\n        }\n        else if (!focusItem) // last element\n        {\n          break;\n        }\n        focusItem=null;\n        index--;\n      }\n      return focusItem;\n    }\n\n    this.ProcessKeys = function(e)\n    {\n      if (e.type == \"keydown\")\n      {\n        this.repeatOn = false;\n        this.lastKey = e.keyCode;\n      }\n      else if (e.type == \"keypress\")\n      {\n        if (!this.repeatOn)\n        {\n          if (this.lastKey) this.repeatOn = true;\n          return false; // ignore first keypress after keydown\n        }\n      }\n      else if (e.type == \"keyup\")\n      {\n        this.lastKey = 0;\n        this.repeatOn = false;\n      }\n      return this.lastKey!=0;\n    }\n\n    this.Nav = function(evt,itemIndex)\n    {\n      var e  = (evt) ? evt : window.event; // for IE\n      if (e.keyCode==13) return true;\n      if (!this.ProcessKeys(e)) return false;\n\n      if (this.lastKey==38) // Up\n      {\n        var newIndex = itemIndex-1;\n        var focusItem = this.NavPrev(newIndex);\n        if (focusItem)\n        {\n          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);\n          if (child && child.style.display == 'block') // children visible\n          {\n            var n=0;\n            var tmpElem;\n            while (1) // search for last child\n            {\n              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);\n              if (tmpElem)\n              {\n                focusItem = tmpElem;\n              }\n              else // found it!\n              {\n                break;\n              }\n              n++;\n            }\n          }\n        }\n        if (focusItem)\n        {\n          focusItem.focus();\n        }\n        else // return focus to search field\n        {\n           parent.document.getElementById(\"MSearchField\").focus();\n        }\n      }\n      else if (this.lastKey==40) // Down\n      {\n        var newIndex = itemIndex+1;\n        var focusItem;\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem && elem.style.display == 'block') // children visible\n        {\n          focusItem = document.getElementById('Item'+itemIndex+'_c0');\n        }\n        if (!focusItem) focusItem = this.NavNext(newIndex);\n        if (focusItem)  focusItem.focus();\n      }\n      else if (this.lastKey==39) // Right\n      {\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem) elem.style.display = 'block';\n      }\n      else if (this.lastKey==37) // Left\n      {\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem) elem.style.display = 'none';\n      }\n      else if (this.lastKey==27) // Escape\n      {\n        parent.searchBox.CloseResultsWindow();\n        parent.document.getElementById(\"MSearchField\").focus();\n      }\n      else if (this.lastKey==13) // Enter\n      {\n        return true;\n      }\n      return false;\n    }\n\n    this.NavChild = function(evt,itemIndex,childIndex)\n    {\n      var e  = (evt) ? evt : window.event; // for IE\n      if (e.keyCode==13) return true;\n      if (!this.ProcessKeys(e)) return false;\n\n      if (this.lastKey==38) // Up\n      {\n        if (childIndex>0)\n        {\n          var newIndex = childIndex-1;\n          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();\n        }\n        else // already at first child, jump to parent\n        {\n          document.getElementById('Item'+itemIndex).focus();\n        }\n      }\n      else if (this.lastKey==40) // Down\n      {\n        var newIndex = childIndex+1;\n        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);\n        if (!elem) // last child, jump to parent next parent\n        {\n          elem = this.NavNext(itemIndex+1);\n        }\n        if (elem)\n        {\n          elem.focus();\n        }\n      }\n      else if (this.lastKey==27) // Escape\n      {\n        parent.searchBox.CloseResultsWindow();\n        parent.document.getElementById(\"MSearchField\").focus();\n      }\n      else if (this.lastKey==13) // Enter\n      {\n        return true;\n      }\n      return false;\n    }\n}\n\nfunction setKeyActions(elem,action)\n{\n  elem.setAttribute('onkeydown',action);\n  elem.setAttribute('onkeypress',action);\n  elem.setAttribute('onkeyup',action);\n}\n\nfunction setClassAttr(elem,attr)\n{\n  elem.setAttribute('class',attr);\n  elem.setAttribute('className',attr);\n}\n\nfunction createResults()\n{\n  var results = document.getElementById(\"SRResults\");\n  for (var e=0; e<searchData.length; e++)\n  {\n    var id = searchData[e][0];\n    var srResult = document.createElement('div');\n    srResult.setAttribute('id','SR_'+id);\n    setClassAttr(srResult,'SRResult');\n    var srEntry = document.createElement('div');\n    setClassAttr(srEntry,'SREntry');\n    var srLink = document.createElement('a');\n    srLink.setAttribute('id','Item'+e);\n    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');\n    setClassAttr(srLink,'SRSymbol');\n    srLink.innerHTML = searchData[e][1][0];\n    srEntry.appendChild(srLink);\n    if (searchData[e][1].length==2) // single result\n    {\n      srLink.setAttribute('href',searchData[e][1][1][0]);\n      if (searchData[e][1][1][1])\n      {\n       srLink.setAttribute('target','_parent');\n      }\n      var srScope = document.createElement('span');\n      setClassAttr(srScope,'SRScope');\n      srScope.innerHTML = searchData[e][1][1][2];\n      srEntry.appendChild(srScope);\n    }\n    else // multiple results\n    {\n      srLink.setAttribute('href','javascript:searchResults.Toggle(\"SR_'+id+'\")');\n      var srChildren = document.createElement('div');\n      setClassAttr(srChildren,'SRChildren');\n      for (var c=0; c<searchData[e][1].length-1; c++)\n      {\n        var srChild = document.createElement('a');\n        srChild.setAttribute('id','Item'+e+'_c'+c);\n        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');\n        setClassAttr(srChild,'SRScope');\n        srChild.setAttribute('href',searchData[e][1][c+1][0]);\n        if (searchData[e][1][c+1][1])\n        {\n         srChild.setAttribute('target','_parent');\n        }\n        srChild.innerHTML = searchData[e][1][c+1][2];\n        srChildren.appendChild(srChild);\n      }\n      srEntry.appendChild(srChildren);\n    }\n    srResult.appendChild(srEntry);\n    results.appendChild(srResult);\n  }\n}\n\nfunction init_search()\n{\n  var results = document.getElementById(\"MSearchSelectWindow\");\n  for (var key in indexSectionLabels)\n  {\n    var link = document.createElement('a');\n    link.setAttribute('class','SelectItem');\n    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');\n    link.href='javascript:void(0)';\n    link.innerHTML='<span class=\"SelectionMark\">&#160;</span>'+indexSectionLabels[key];\n    results.appendChild(link);\n  }\n  searchBox.OnSelectItem(0);\n}\n/* @license-end */\n"
  },
  {
    "path": "docs/html/search/searchdata.js",
    "content": "var indexSectionsWithContent =\n{\n  0: \"_abcdefghiklmnopqrstuvw~\",\n  1: \"cefghmnrst\",\n  2: \"e\",\n  3: \"abcdefghlnrst\",\n  4: \"abcdefghilmnopqrstuw~\",\n  5: \"_abcdefghiklmnopqrstuw\",\n  6: \"cgnos\",\n  7: \"bcdfghnopr\",\n  8: \"abcdefhiklmnoprstuvw\",\n  9: \"gn\",\n  10: \"_bcdeghilmnorstuvw\",\n  11: \"dehlos\"\n};\n\nvar indexSectionNames =\n{\n  0: \"all\",\n  1: \"classes\",\n  2: \"namespaces\",\n  3: \"files\",\n  4: \"functions\",\n  5: \"variables\",\n  6: \"typedefs\",\n  7: \"enums\",\n  8: \"enumvalues\",\n  9: \"related\",\n  10: \"defines\",\n  11: \"pages\"\n};\n\nvar indexSectionLabels =\n{\n  0: \"All\",\n  1: \"Classes\",\n  2: \"Namespaces\",\n  3: \"Files\",\n  4: \"Functions\",\n  5: \"Variables\",\n  6: \"Typedefs\",\n  7: \"Enumerations\",\n  8: \"Enumerator\",\n  9: \"Friends\",\n  10: \"Macros\",\n  11: \"Pages\"\n};\n\n"
  },
  {
    "path": "docs/html/search/typedefs_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/typedefs_0.js",
    "content": "var searchData=\n[\n  ['comms_5fhal_5frcvd_5fdata_1772',['comms_hal_rcvd_data',['../Comms__hal_8h.html#a43bcbe8a0a3d8d61dd64f1f004864af0',1,'Comms_hal.h']]],\n  ['comms_5fhal_5fsent_5fdata_1773',['comms_hal_sent_data',['../Comms__hal_8h.html#afd743715a11ed44e16dbb8d28bf3bd8b',1,'Comms_hal.h']]],\n  ['control_5fmessage_5ftype_5ft_1774',['control_message_type_t',['../NodeList_8h.html#ac5c28a5827b5a3b34222c13589adeba7',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/typedefs_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/typedefs_1.js",
    "content": "var searchData=\n[\n  ['gwoutput_5fdata_5ftype_5ft_1775',['GwOutput_data_type_t',['../GwOutput__generic_8h.html#ab5119da5fbd459e355bdcb931bf92fbc',1,'GwOutput_generic.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/typedefs_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/typedefs_2.js",
    "content": "var searchData=\n[\n  ['node_5ft_1776',['node_t',['../NodeList_8h.html#a58096abbef18f4a4463c37694ee408f6',1,'NodeList.h']]],\n  ['nodemessagetype_5ft_1777',['nodeMessageType_t',['../EnigmaIOTNode_8h.html#acbdfeab1a5e492bc200768fa91041445',1,'EnigmaIOTNode.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/typedefs_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/typedefs_3.js",
    "content": "var searchData=\n[\n  ['onconnected_5ft_1778',['onConnected_t',['../EnigmaIOTNode_8h.html#a37ce04fd79315c001e113198fab23386',1,'EnigmaIOTNode.h']]],\n  ['ondisconnected_5ft_1779',['onDisconnected_t',['../EnigmaIOTNode_8h.html#a450524067c6c3ce8b2fda7e2c7d2c9e9',1,'EnigmaIOTNode.h']]],\n  ['ondldata_5ft_1780',['onDlData_t',['../GwOutput__generic_8h.html#aeb1f7d47a18ad54ebbd74df743ff825b',1,'GwOutput_generic.h']]],\n  ['ongwdatarx_5ft_1781',['onGwDataRx_t',['../EnigmaIOTGateway_8h.html#aee09b06c0f38b77b6cf19f8d89750a1b',1,'EnigmaIOTGateway.h']]],\n  ['onnewnode_5ft_1782',['onNewNode_t',['../EnigmaIOTGateway_8h.html#ad49ee5d953f324e799a0434ff3b044c7',1,'EnigmaIOTGateway.h']]],\n  ['onnodedatarx_5ft_1783',['onNodeDataRx_t',['../EnigmaIOTNode_8h.html#a477e362b78a326f1519738f29740e6d8',1,'EnigmaIOTNode.h']]],\n  ['onnodedisconnected_5ft_1784',['onNodeDisconnected_t',['../EnigmaIOTGateway_8h.html#a17b8c1861e099264b904a9f20ee69666',1,'EnigmaIOTGateway.h']]],\n  ['onwifimanagerexit_5ft_1785',['onWiFiManagerExit_t',['../EnigmaIOTGateway_8h.html#a059cb90513e14cc8dc7befecc75bc891',1,'onWiFiManagerExit_t():&#160;EnigmaIOTGateway.h'],['../EnigmaIOTNode_8h.html#ac0bcd76b3f8b10cfc0f8c75d00e33012',1,'onWiFiManagerExit_t():&#160;EnigmaIOTNode.h']]],\n  ['onwifimanagerstarted_5ft_1786',['onWiFiManagerStarted_t',['../EnigmaIOTNode_8h.html#aeafba3e3725226cdcb14a23c4e57c97a',1,'EnigmaIOTNode.h']]],\n  ['ota_5fstatus_5ft_1787',['ota_status_t',['../NodeList_8h.html#afca510572b2bed862d3aae57a6eff6f7',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/typedefs_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/typedefs_4.js",
    "content": "var searchData=\n[\n  ['simpleeventhandler_5ft_1788',['simpleEventHandler_t',['../EnigmaIOTGateway_8h.html#a7c95cb7d1926120867fd8a4246f90f5c',1,'EnigmaIOTGateway.h']]],\n  ['status_5ft_1789',['status_t',['../NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9',1,'NodeList.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_0.js",
    "content": "var searchData=\n[\n  ['_5ffiltertype_1473',['_filterType',['../classFilterClass.html#a3d19e1f2d25502aefed9fa272e2b576b',1,'FilterClass']]],\n  ['_5findex_1474',['_index',['../classFilterClass.html#a5c265b773551343bcc7659e0253b525c',1,'FilterClass']]],\n  ['_5forder_1475',['_order',['../classFilterClass.html#a82e30fcd22d7d4d4815124e63a4902e1',1,'FilterClass']]],\n  ['_5forderedvalues_1476',['_orderedValues',['../classFilterClass.html#a4b639a7fc53bdd0f1a82c41208414180',1,'FilterClass']]],\n  ['_5fownpeertype_1477',['_ownPeerType',['../classComms__halClass.html#a6472373c178c2e77f4fc50eafaedc0ab',1,'Comms_halClass']]],\n  ['_5fpeertype_1478',['_peerType',['../espnow__hal_8cpp.html#a62ba3af3e98793dfe8f0e3039e325340',1,'espnow_hal.cpp']]],\n  ['_5frawvalues_1479',['_rawValues',['../classFilterClass.html#a50254c631b3e05583890f63c6f0149bc',1,'FilterClass']]],\n  ['_5fweightvalues_1480',['_weightValues',['../classFilterClass.html#a1522216f9bbb9a5f7813809cb3a79ac7',1,'FilterClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_1.js",
    "content": "var searchData=\n[\n  ['aad_5flength_1481',['AAD_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a3a00052a511fa3b63de7e280320b1ef9',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['addr_1482',['addr',['../structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1',1,'msg_queue_item_t']]],\n  ['args_1483',['args',['../namespaceEnigmaIoTUpdate.html#a950133eea5c2ac61becd91f089b8d610',1,'EnigmaIoTUpdate']]],\n  ['askedtimesync_1484',['askedTimeSync',['../classNode.html#a918b7ad8582d1b2d569dbd66a262ee50',1,'Node']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_10.js",
    "content": "var searchData=\n[\n  ['qmessagelength_1710',['qMessageLength',['../classNode.html#a41f17a6abd376d602bef3925c751a181',1,'Node']]],\n  ['qmessagepending_1711',['qMessagePending',['../classNode.html#a0db2a4dfda51cfc5afe8c846a622ba54',1,'Node']]],\n  ['queuedmessage_1712',['queuedMessage',['../classNode.html#a712ec21cec6ac19ee68c8beb202fbf92',1,'Node']]],\n  ['quick_5fsync_5ftime_1713',['QUICK_SYNC_TIME',['../EnigmaIoTconfig_8h.html#a446963c57800cd34607bcc6fa1e933e9',1,'EnigmaIoTconfig.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_11.js",
    "content": "var searchData=\n[\n  ['random_5flength_1714',['RANDOM_LENGTH',['../cryptModule_8h.html#a164ce4566a4b31ef42907bf37f3e6654',1,'cryptModule.h']]],\n  ['rate_5fave_5forder_1715',['RATE_AVE_ORDER',['../EnigmaIoTconfig_8h.html#af320072fb51a344213679450cacb3d6a',1,'EnigmaIoTconfig.h']]],\n  ['ratefilter_1716',['rateFilter',['../classNode.html#adba11398693739d5fc1d9a755d4bc567',1,'Node']]],\n  ['readindex_1717',['readIndex',['../classEnigmaIOTRingBuffer.html#aa75d2fb067f7bb4e4e760d776b3a149e',1,'EnigmaIOTRingBuffer']]],\n  ['readytosend_1718',['readyToSend',['../classEspnow__halClass.html#aa9e4fa0f5c87ca341c3aad233582d960',1,'Espnow_halClass']]],\n  ['reconnection_5fperiod_1719',['RECONNECTION_PERIOD',['../EnigmaIoTconfig_8h.html#a0b8712b5d25abc82bd371e652eae5826',1,'EnigmaIoTconfig.h']]],\n  ['relaykey_1720',['relayKey',['../SmartSwitchController_8cpp.html#afd7b9fb77ec1a9513e265472288f8dba',1,'SmartSwitchController.cpp']]],\n  ['relaypin_1721',['relayPin',['../structsmartSwitchControllerHw__t.html#a383953b4e6d9f3a294ed0cc56da0064a',1,'smartSwitchControllerHw_t']]],\n  ['relaypinparam_1722',['relayPinParam',['../classCONTROLLER__CLASS__NAME.html#a4c81e6c8ec96a457e0e8f3e1bad4525f',1,'CONTROLLER_CLASS_NAME']]],\n  ['relaystatus_1723',['relayStatus',['../structsmartSwitchControllerHw__t.html#aebd780051c191b829135d424b0b504a3',1,'smartSwitchControllerHw_t']]],\n  ['requestreportrssi_1724',['requestReportRSSI',['../classEnigmaIOTNodeClass.html#a9d5665e7dfd598c618e5388b07271bb1',1,'EnigmaIOTNodeClass']]],\n  ['requestsearchgateway_1725',['requestSearchGateway',['../classEnigmaIOTNodeClass.html#aa024db31641775e4de784d4d2ce545a1',1,'EnigmaIOTNodeClass']]],\n  ['reset_5fpin_1726',['RESET_PIN',['../enigmaiot__led__flasher_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e',1,'RESET_PIN():&#160;enigmaiot_led_flasher.cpp'],['../enigmaiot__node_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e',1,'RESET_PIN():&#160;enigmaiot_node.cpp'],['../enigmaiot__node__msgpack_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e',1,'RESET_PIN():&#160;enigmaiot_node_msgpack.cpp'],['../enigmaiot__node__nonsleepy_8cpp.html#aa5a70ec3f08b72ccfe8365835fee927e',1,'RESET_PIN():&#160;enigmaiot_node_nonsleepy.cpp']]],\n  ['reset_5fpin_5fduration_1727',['RESET_PIN_DURATION',['../EnigmaIoTconfig_8h.html#a59cb3b60750ca326ee647918af7a4d0b',1,'EnigmaIoTconfig.h']]],\n  ['resetpin_1728',['resetPin',['../classEnigmaIOTNodeClass.html#aea10660384ee02f0e6cf1aa3f1786144',1,'EnigmaIOTNodeClass']]],\n  ['response_5fsize_1729',['RESPONSE_SIZE',['../GatewayAPI_8h.html#a2a5378351aff40f2e0810db469c937df',1,'GatewayAPI.h']]],\n  ['restartreason_1730',['restartReason',['../classEnigmaIOTNodeClass.html#a3e3e9744eef70673aaae93c27f4b0218',1,'EnigmaIOTNodeClass']]],\n  ['restartrequested_1731',['restartRequested',['../EnigmaIOTGatewayMQTT_8cpp.html#a827c388d92651f51d34097598a52a92a',1,'EnigmaIOTGatewayMQTT.cpp']]],\n  ['restartrequesttime_1732',['restartRequestTime',['../EnigmaIOTGatewayMQTT_8cpp.html#a37e5a736d8dfa2198aa9607a61ff1695',1,'EnigmaIOTGatewayMQTT.cpp']]],\n  ['resulttopic_1733',['resultTopic',['../namespaceEnigmaIoTUpdate.html#acd57a56c8115a7f72f00b6efc95eeea5',1,'EnigmaIoTUpdate']]],\n  ['retain_1734',['retain',['../structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570',1,'mqtt_queue_item_t']]],\n  ['roundtripdelay_1735',['roundTripDelay',['../classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71',1,'TimeManagerClass']]],\n  ['rssi_1736',['rssi',['../structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b',1,'rtcmem_data_t::rssi()'],['../classNode.html#a48d7a268139be97133747b7692a5f888',1,'Node::rssi()']]],\n  ['rtc_5faddress_1737',['RTC_ADDRESS',['../EnigmaIoTconfigAdvanced_8h.html#a68fd5dd70eb1fa10fa1878e044d14cb0',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['rtcmem_5fdata_1738',['rtcmem_data',['../classEnigmaIOTNodeClass.html#ad3f6f92f204d4667e2a577cd23965f69',1,'EnigmaIOTNodeClass']]],\n  ['rxled_1739',['rxled',['../classEnigmaIOTGatewayClass.html#a038ecd9541cb893eb58fb6aa49994816',1,'EnigmaIOTGatewayClass']]],\n  ['rxledontime_1740',['rxLedOnTime',['../classEnigmaIOTGatewayClass.html#a5e93664145eb75e55ae4c6d3482c8a64',1,'EnigmaIOTGatewayClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_12.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_12.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_12.js",
    "content": "var searchData=\n[\n  ['senddata_1741',['sendData',['../classEnigmaIOTjsonController.html#a13b9adbb1aaab6ec87042889289e701d',1,'EnigmaIOTjsonController']]],\n  ['sensors_1742',['sensors',['../classCONTROLLER__CLASS__NAME.html#ae875eb77d530db257752d87a010ec6c7',1,'CONTROLLER_CLASS_NAME']]],\n  ['sentresult_1743',['sentResult',['../classComms__halClass.html#a3fb9182d9e9b0729d8798c43f133a130',1,'Comms_halClass']]],\n  ['server_1744',['server',['../classEnigmaIOTGatewayClass.html#a6de87231a98aa132483ae97120b0f4d5',1,'EnigmaIOTGatewayClass::server()'],['../classGatewayAPI.html#a7327209d50f6c17e3cd1ad67f2941e9a',1,'GatewayAPI::server()']]],\n  ['shouldrestart_1745',['shouldRestart',['../classEnigmaIOTNodeClass.html#a2e3ba13a9f6b1a0e3feb9e6bee17d365',1,'EnigmaIOTNodeClass']]],\n  ['shouldsave_1746',['shouldSave',['../EnigmaIOTGateway_8cpp.html#a5b2105a285d12dbe89e9384d2351e1a9',1,'EnigmaIOTGateway.cpp']]],\n  ['shouldsaveconfig_1747',['shouldSaveConfig',['../classGwOutput__MQTT.html#aa8a75a12858e138be2e92c69f2111038',1,'GwOutput_MQTT']]],\n  ['sleep_5ftime_1748',['SLEEP_TIME',['../EnigmaIOT-Sensor-Controller_8cpp.html#a91ca03d6b7d66ece63e5bfdc9b0d3260',1,'EnigmaIOT-Sensor-Controller.cpp']]],\n  ['sleeprequested_1749',['sleepRequested',['../classEnigmaIOTNodeClass.html#a0186926009fc565b05f5a2c37dfb3649',1,'EnigmaIOTNodeClass']]],\n  ['sleepresulttopic_1750',['sleepResultTopic',['../namespaceEnigmaIoTUpdate.html#a880799b2afdcda342a0c9413cc31c4be',1,'EnigmaIoTUpdate']]],\n  ['sleepsettopic_1751',['sleepSetTopic',['../namespaceEnigmaIoTUpdate.html#aa26175595b8bee3fa7d7df8300e036d0',1,'EnigmaIoTUpdate']]],\n  ['sleeptime_1752',['sleepTime',['../structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54',1,'rtcmem_data_t::sleepTime()'],['../classEnigmaIOTNodeClass.html#a358bcf3efcf3a3c08249409852590e91',1,'EnigmaIOTNodeClass::sleepTime()']]],\n  ['sleepy_1753',['sleepy',['../structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e',1,'rtcmem_data_t']]],\n  ['sleepynode_1754',['sleepyNode',['../structnode__instance.html#adc14b97d211609ff286c2edc4bcbe061',1,'node_instance::sleepyNode()'],['../classNode.html#a774efd63a9d427c0911b07dc3a7ac11d',1,'Node::sleepyNode()'],['../namespaceEnigmaIoTUpdate.html#ad7b06ea4bc715581c290476212ae10c8',1,'EnigmaIoTUpdate.sleepyNode()']]],\n  ['status_1755',['status',['../structnode__instance.html#a784768cbda2285978d85c6dd17c01158',1,'node_instance::status()'],['../classNode.html#a02eb5aa6340f2d4e0cfd48f7bb661dd3',1,'Node::status()']]],\n  ['status_5fsend_5fperiod_1756',['STATUS_SEND_PERIOD',['../GwOutput__mqtt_8h.html#a0c2feee288af6e6c9d13de8804a94128',1,'GwOutput_mqtt.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_13.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_13.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_13.js",
    "content": "var searchData=\n[\n  ['tag_5flength_1757',['TAG_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a2e80e7a8216a26293d66f1e35829df71',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['tempbuffer_1758',['tempBuffer',['../classEnigmaIOTGatewayClass.html#a2dc1f081e8bf48d5c4e64db9caf94f74',1,'EnigmaIOTGatewayClass']]],\n  ['tempc_1759',['tempC',['../classCONTROLLER__CLASS__NAME.html#a31b856de204d6bf15ed12641ff748dc3',1,'CONTROLLER_CLASS_NAME']]],\n  ['tempsent_1760',['tempSent',['../classCONTROLLER__CLASS__NAME.html#ab566b0093af7f84c645a5c35342c6a51',1,'CONTROLLER_CLASS_NAME']]],\n  ['time_5fsync_5fperiod_1761',['TIME_SYNC_PERIOD',['../EnigmaIoTconfig_8h.html#a2f387a44ed85c58ad43c40dbc632699c',1,'EnigmaIoTconfig.h']]],\n  ['timeisadjusted_1762',['timeIsAdjusted',['../classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f',1,'TimeManagerClass']]],\n  ['timemanager_1763',['TimeManager',['../timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58',1,'TimeManager():&#160;timeManager.cpp'],['../timeManager_8h.html#aa2f15646607c9908039f67741ccbab58',1,'TimeManager():&#160;timeManager.cpp']]],\n  ['timesyncperiod_1764',['timeSyncPeriod',['../classEnigmaIOTNodeClass.html#a10d221c32311c32d19d670a68044aca4',1,'EnigmaIOTNodeClass']]],\n  ['topic_1765',['topic',['../structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8',1,'mqtt_queue_item_t']]],\n  ['txled_1766',['txled',['../classEnigmaIOTGatewayClass.html#a8d86390169309396f3d21149c3649453',1,'EnigmaIOTGatewayClass']]],\n  ['txledontime_1767',['txLedOnTime',['../classEnigmaIOTGatewayClass.html#aacbd1597e7a6be2957ac4f3ade9dc243',1,'EnigmaIOTGatewayClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_14.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_14.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_14.js",
    "content": "var searchData=\n[\n  ['usecounter_1768',['useCounter',['../classEnigmaIOTGatewayClass.html#a24cc18886d923df0320b6ac4eac19028',1,'EnigmaIOTGatewayClass::useCounter()'],['../classEnigmaIOTNodeClass.html#acb396ad8481d5fe7c99227cae4a1f1cf',1,'EnigmaIOTNodeClass::useCounter()']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_15.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_15.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_15.js",
    "content": "var searchData=\n[\n  ['web_5fapi_5fport_1769',['WEB_API_PORT',['../EnigmaIoTconfigAdvanced_8h.html#a75ba0ac6d6287a6b8d580cd65038a77a',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['wifimanager_1770',['wifiManager',['../classEnigmaIOTGatewayClass.html#ad7f3f86214c6989f2019f1df89e9f0b6',1,'EnigmaIOTGatewayClass::wifiManager()'],['../classEnigmaIOTNodeClass.html#afff6af9384f1f217168473b1df017d78',1,'EnigmaIOTNodeClass::wifiManager()']]],\n  ['writeindex_1771',['writeIndex',['../classEnigmaIOTRingBuffer.html#af902303fe23e088b2288baeca53706fa',1,'EnigmaIOTRingBuffer']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_2.js",
    "content": "var searchData=\n[\n  ['boot_5fflag_5ftimeout_1485',['BOOT_FLAG_TIMEOUT',['../EnigmaIOT-Button-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a00c12add296f0d83ff8d3437e23651c9',1,'BOOT_FLAG_TIMEOUT():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['bootstatekey_1486',['bootStateKey',['../SmartSwitchController_8cpp.html#abf02bded45eb4f30931fba03d1839efb',1,'SmartSwitchController.cpp']]],\n  ['bootstatus_1487',['bootStatus',['../structsmartSwitchControllerHw__t.html#a460a8b71cd14d353299b85f46a9cf9f6',1,'smartSwitchControllerHw_t']]],\n  ['bootstatuslistparam_1488',['bootStatusListParam',['../classCONTROLLER__CLASS__NAME.html#a652db9c565625d205fa589b5b7922431',1,'CONTROLLER_CLASS_NAME']]],\n  ['bootstatusparam_1489',['bootStatusParam',['../classCONTROLLER__CLASS__NAME.html#ab2947853c9c4746ab59e067f00359bff',1,'CONTROLLER_CLASS_NAME']]],\n  ['broadcast_5faddress_1490',['BROADCAST_ADDRESS',['../EnigmaIoTconfigAdvanced_8h.html#a4e22033bdc1560ca309e9a14073c2282',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['broadcast_5fnone_5fname_1491',['BROADCAST_NONE_NAME',['../EnigmaIoTconfigAdvanced_8h.html#a2ec716b4c6aeedb3d1eb957b02d69dc1',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['broadcastenabled_1492',['broadcastEnabled',['../classNode.html#a09ee8b1462486a05fbcd1af2bbdd44ed',1,'Node']]],\n  ['broadcastkey_1493',['broadcastKey',['../structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e',1,'rtcmem_data_t']]],\n  ['broadcastkeyrequested_1494',['broadcastKeyRequested',['../structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63',1,'rtcmem_data_t::broadcastKeyRequested()'],['../classNode.html#aebc89c4269923800190e3c340f45d550',1,'Node::broadcastKeyRequested()']]],\n  ['broadcastkeyvalid_1495',['broadcastKeyValid',['../structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67',1,'rtcmem_data_t']]],\n  ['broadcastnode_1496',['broadcastNode',['../classNodeList.html#a5daacbc6f74ec14aa03325d96ef51ed3',1,'NodeList']]],\n  ['buffer_1497',['buffer',['../classEnigmaIOTRingBuffer.html#a7f89d738dd736ef5e4858313a93d8359',1,'EnigmaIOTRingBuffer']]],\n  ['buttonkey_1498',['buttonKey',['../SmartSwitchController_8cpp.html#ac6ac941d05242bf7013c414c28fe51f9',1,'SmartSwitchController.cpp']]],\n  ['buttonpin_1499',['buttonPin',['../structsmartSwitchControllerHw__t.html#a52575acecb3433d8a42b5eae1d036484',1,'smartSwitchControllerHw_t']]],\n  ['buttonpinparam_1500',['buttonPinParam',['../classCONTROLLER__CLASS__NAME.html#af137736da8e1cb6c92aba6972807704a',1,'CONTROLLER_CLASS_NAME']]],\n  ['buttonpresssent_1501',['buttonPressSent',['../classCONTROLLER__CLASS__NAME.html#ab9f55dca7e50e7bbccd5b01d77fc0f05',1,'CONTROLLER_CLASS_NAME']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_3.js",
    "content": "var searchData=\n[\n  ['capacity_1502',['capacity',['../classHAEntity.html#aeff41e84aaa1b70df8137cbd05d8ddbe',1,'HAEntity']]],\n  ['channel_1503',['channel',['../classComms__halClass.html#ac495fb3d9e576bb2717c1f43197b458e',1,'Comms_halClass::channel()'],['../structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69',1,'gateway_config_t::channel()'],['../structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4',1,'rtcmem_data_t::channel()']]],\n  ['check_5fcomm_5ferrors_1504',['CHECK_COMM_ERRORS',['../EnigmaIoTconfigAdvanced_8h.html#a27b8cf1e2d300318f7102b8bc0facef9',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['cipher_1505',['cipher',['../cryptModule_8cpp.html#a474ae1b4cd1e7fe1952c2fe00226d758',1,'cryptModule.cpp']]],\n  ['clientid_1506',['clientId',['../classGatewayOutput__generic.html#ab8b6dc096f4f731c7d7dc8a6cb46f132',1,'GatewayOutput_generic']]],\n  ['clocksyncenabled_1507',['clockSyncEnabled',['../classEnigmaIOTNodeClass.html#adbabb6a770438b4cfbb0f89cf2cb1795',1,'EnigmaIOTNodeClass']]],\n  ['comm_1508',['comm',['../classEnigmaIOTGatewayClass.html#ab049e20310e2a18bd1f8adc4ec975254',1,'EnigmaIOTGatewayClass::comm()'],['../classEnigmaIOTNodeClass.html#a7fca29c7cd9cba0115ec42566250275d',1,'EnigmaIOTNodeClass::comm()']]],\n  ['comm_5ferrors_5fbefore_5fscan_1509',['COMM_ERRORS_BEFORE_SCAN',['../EnigmaIoTconfig_8h.html#a700642be35601636c1af04d831f177c5',1,'EnigmaIoTconfig.h']]],\n  ['commandkey_1510',['commandKey',['../LedController_8cpp.html#ab3e9a146188c1ca883d30631455406b9',1,'commandKey():&#160;LedController.cpp'],['../SmartSwitchController_8cpp.html#ab3e9a146188c1ca883d30631455406b9',1,'commandKey():&#160;SmartSwitchController.cpp']]],\n  ['commerrors_1511',['commErrors',['../structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9',1,'rtcmem_data_t']]],\n  ['comms_5fhal_5faddr_5flen_1512',['COMMS_HAL_ADDR_LEN',['../classComms__halClass.html#a6d372da9bf4d1d00c5445b26ef7d0f0b',1,'Comms_halClass::COMMS_HAL_ADDR_LEN()'],['../classEspnow__halClass.html#a024a232658955ce9d3cc2b41106ffd72',1,'Espnow_halClass::COMMS_HAL_ADDR_LEN()']]],\n  ['comms_5fhal_5fmax_5fmessage_5flength_1513',['COMMS_HAL_MAX_MESSAGE_LENGTH',['../classComms__halClass.html#a3a0a66fe2fadc4a71dc2ac8eb7573316',1,'Comms_halClass::COMMS_HAL_MAX_MESSAGE_LENGTH()'],['../classEspnow__halClass.html#ab67eb381c0a4278b5af0235cb1aec635',1,'Espnow_halClass::COMMS_HAL_MAX_MESSAGE_LENGTH()']]],\n  ['comms_5fqueue_5fsize_1514',['COMMS_QUEUE_SIZE',['../EnigmaIoTconfigAdvanced_8h.html#a986a0e97c281fc18f135d159caba672c',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['config_1515',['config',['../classCONTROLLER__CLASS__NAME.html#a1ff33c36324249c1791357337ed932c6',1,'CONTROLLER_CLASS_NAME']]],\n  ['config_5ffile_1516',['CONFIG_FILE',['../ButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;ButtonController.cpp'],['../DashButtonController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;DashButtonController.cpp'],['../BasicController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;BasicController.cpp'],['../LedController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;LedController.cpp'],['../ds18b20Controller_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;ds18b20Controller.cpp'],['../SmartSwitchController_8cpp.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;SmartSwitchController.cpp'],['../GwOutput__mqtt_8h.html#a0a5b20c0a44622656e3028948ca20a47',1,'CONFIG_FILE():&#160;GwOutput_mqtt.h'],['../EnigmaIOTGateway_8cpp.html#a47616803c1ff494134cb784756035a08',1,'CONFIG_FILE():&#160;EnigmaIOTGateway.cpp'],['../EnigmaIOTNode_8cpp.html#a47616803c1ff494134cb784756035a08',1,'CONFIG_FILE():&#160;EnigmaIOTNode.cpp']]],\n  ['configcleared_1517',['configCleared',['../classEnigmaIOTNodeClass.html#a5aea95bd2dead51558a1f7fa312cf1c6',1,'EnigmaIOTNodeClass']]],\n  ['confirmparam_1518',['confirmParam',['../GatewayAPI_8cpp.html#a3fab167b11bfa83a179e904d89a38d95',1,'GatewayAPI.cpp']]],\n  ['connectionled_1519',['connectionLed',['../EnigmaIOTGatewayDummy_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0',1,'connectionLed():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#a86bc66f6ecbde6ad8502d0cefb1a67f0',1,'connectionLed():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['connectionledflashing_1520',['connectionLedFlashing',['../EnigmaIOTGatewayDummy_8cpp.html#a54adb71fcf29bc72c8a829133e425d80',1,'connectionLedFlashing():&#160;EnigmaIOTGatewayDummy.cpp'],['../EnigmaIOTGatewayMQTT_8cpp.html#aed1b30f3a8b90f8c59e6372f7641ba17',1,'connectionLedFlashing():&#160;EnigmaIOTGatewayMQTT.cpp']]],\n  ['controller_1521',['controller',['../EnigmaIOT-Button-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a6005c1a520c4bd733e221d70e642ebcd',1,'controller():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['controller_5fname_1522',['CONTROLLER_NAME',['../ButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;ButtonController.h'],['../DashButtonController_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;DashButtonController.h'],['../BasicController_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;BasicController.h'],['../LedController_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;LedController.h'],['../ds18b20Controller_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;ds18b20Controller.h'],['../SmartSwitchController_8h.html#a0cf4eba0801e84be66f6198f07bfe287',1,'CONTROLLER_NAME():&#160;SmartSwitchController.h']]],\n  ['crc32_1523',['crc32',['../structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a',1,'rtcmem_data_t']]],\n  ['crc_5flength_1524',['CRC_LENGTH',['../cryptModule_8h.html#ab705865bb866bc5f070bbde9650eaa2a',1,'cryptModule.h']]],\n  ['crypto_1525',['Crypto',['../cryptModule_8cpp.html#a2f63b7a310b37c1127e7b8cfcbb5eb22',1,'Crypto():&#160;cryptModule.cpp'],['../cryptModule_8h.html#a2f63b7a310b37c1127e7b8cfcbb5eb22',1,'Crypto():&#160;cryptModule.cpp']]],\n  ['cyclestartedtime_1526',['cycleStartedTime',['../classEnigmaIOTNodeClass.html#abc061ed33eaff29767c880e77d2faca9',1,'EnigmaIOTNodeClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_4.js",
    "content": "var searchData=\n[\n  ['data_1527',['data',['../structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f',1,'msg_queue_item_t']]],\n  ['datamessageencrypt_1528',['dataMessageEncrypt',['../classEnigmaIOTNodeClass.html#a2fbd4d4a8c9e29873e69d408bff0d735',1,'EnigmaIOTNodeClass']]],\n  ['datamessagesendencoding_1529',['dataMessageSendEncoding',['../classEnigmaIOTNodeClass.html#ac4505b55fce99b105adc4993a404c7d4',1,'EnigmaIOTNodeClass']]],\n  ['datamessagesendpending_1530',['dataMessageSendPending',['../classEnigmaIOTNodeClass.html#a074be31e720b8d50da8e94b1c0012afe',1,'EnigmaIOTNodeClass']]],\n  ['datamessagesent_1531',['dataMessageSent',['../classEnigmaIOTNodeClass.html#a3d6b6cce8aa2484af80617db10da4ea4',1,'EnigmaIOTNodeClass']]],\n  ['datamessagesentlength_1532',['dataMessageSentLength',['../classEnigmaIOTNodeClass.html#a77067c58362c3beb192545cb3ba1a775',1,'EnigmaIOTNodeClass']]],\n  ['datarcvd_1533',['dataRcvd',['../classComms__halClass.html#a5bbed119e5e361b9be85a33404cf2e83',1,'Comms_halClass']]],\n  ['default_5fchannel_1534',['DEFAULT_CHANNEL',['../EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf',1,'EnigmaIoTconfig.h']]],\n  ['default_5fsleep_5ftime_1535',['DEFAULT_SLEEP_TIME',['../EnigmaIoTconfig_8h.html#a4400d84e20bfd15aed72aa991dd87d4f',1,'EnigmaIoTconfig.h']]],\n  ['devicetype_1536',['deviceType',['../classHAEntity.html#a8c9d02fb762b3af1739ba632479473d5',1,'HAEntity']]],\n  ['disconnect_5fon_5fdata_5ferror_1537',['DISCONNECT_ON_DATA_ERROR',['../EnigmaIoTconfigAdvanced_8h.html#a6aa9a1bf5b534f017d6c1c7bec100d1d',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['dns_1538',['dns',['../classEnigmaIOTGatewayClass.html#aa057eae7440f60abe236ae5b121dbf7c',1,'EnigmaIOTGatewayClass']]],\n  ['downlink_5fwait_5ftime_1539',['DOWNLINK_WAIT_TIME',['../EnigmaIoTconfig_8h.html#a52ec03c6ad068419f98e52f60718626e',1,'EnigmaIoTconfig.h']]],\n  ['downlinkcb_1540',['downlinkCb',['../classGatewayOutput__generic.html#ada169ba682e6632f72d62724887f92de',1,'GatewayOutput_generic']]],\n  ['dstaddress_1541',['dstAddress',['../structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f',1,'comms_queue_item_t']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_5.js",
    "content": "var searchData=\n[\n  ['enigmaiot_5faddr_5flen_1542',['ENIGMAIOT_ADDR_LEN',['../EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['enigmaiot_5fprot_5fvers_1543',['ENIGMAIOT_PROT_VERS',['../EnigmaIoTconfig_8h.html#a9c45ffb63a64a645032b9c132f86c821',1,'EnigmaIoTconfig.h']]],\n  ['enigmaiotgateway_1544',['enigmaIotGateway',['../classGatewayOutput__generic.html#aa4855724d46b50a35735f9900494b889',1,'GatewayOutput_generic::enigmaIotGateway()'],['../EnigmaIOTGateway_8cpp.html#abcd4985de3ef6fbe1994af85093ca034',1,'EnigmaIOTGateway():&#160;EnigmaIOTGateway.cpp'],['../EnigmaIOTGateway_8h.html#abcd4985de3ef6fbe1994af85093ca034',1,'EnigmaIOTGateway():&#160;EnigmaIOTGateway.cpp']]],\n  ['enigmaiotnode_1545',['enigmaIotNode',['../classEnigmaIOTjsonController.html#a661a7d9fe760c19b6992aba5b4978cde',1,'EnigmaIOTjsonController::enigmaIotNode()'],['../EnigmaIOTNode_8cpp.html#aad0a67af9b0ad60557652e3170f8a2af',1,'EnigmaIOTNode():&#160;EnigmaIOTNode.cpp'],['../EnigmaIOTNode_8h.html#aad0a67af9b0ad60557652e3170f8a2af',1,'EnigmaIOTNode():&#160;EnigmaIOTNode.cpp']]],\n  ['enigmaiotversion_1546',['enigmaIOTVersion',['../classNode.html#a9af4beb0e8a8cf8405116b92077d9027',1,'Node']]],\n  ['entityconfig_1547',['entityConfig',['../classHAEntity.html#aadb3c5676c00fc0c8b3939888e408d2b',1,'HAEntity']]],\n  ['espclient_1548',['espClient',['../classGwOutput__MQTT.html#ae1bac550738c7f1a92deb3450c1e929a',1,'GwOutput_MQTT']]],\n  ['espnow_5fhal_1549',['Espnow_hal',['../espnow__hal_8cpp.html#a3eef8679955ce5f4743338cbc6bf1e0e',1,'Espnow_hal():&#160;espnow_hal.cpp'],['../espnow__hal_8h.html#a3eef8679955ce5f4743338cbc6bf1e0e',1,'Espnow_hal():&#160;espnow_hal.cpp']]],\n  ['espnowlooptask_1550',['espnowLoopTask',['../classEspnow__halClass.html#a645c4710e2422b8b263438e518dc5da8',1,'Espnow_halClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_6.js",
    "content": "var searchData=\n[\n  ['failsafe_5frtc_5faddress_1551',['FAILSAFE_RTC_ADDRESS',['../EnigmaIOT-Button-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a4d64e953651e420d91f95bacd3078b4e',1,'FAILSAFE_RTC_ADDRESS():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['flash_5fled_5ftime_1552',['FLASH_LED_TIME',['../EnigmaIoTconfig_8h.html#a152501c4de4fad4ccdc6dffa8b47c349',1,'EnigmaIoTconfig.h']]],\n  ['flashblue_1553',['flashBlue',['../classEnigmaIOTNodeClass.html#a4be66e40b4882a486cf8ee80a4277438',1,'EnigmaIOTNodeClass']]],\n  ['flashrx_1554',['flashRx',['../classEnigmaIOTGatewayClass.html#ab639ce1297059231304d90d41ab65197',1,'EnigmaIOTGatewayClass']]],\n  ['flashtx_1555',['flashTx',['../classEnigmaIOTGatewayClass.html#a5eb353d426ea01a2aa183ae90855a3ae',1,'EnigmaIOTGatewayClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_7.js",
    "content": "var searchData=\n[\n  ['gateway_1556',['gateway',['../classComms__halClass.html#ac35585ecbc8e936d9f35d32b56164b8e',1,'Comms_halClass::gateway()'],['../structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517',1,'rtcmem_data_t::gateway()']]],\n  ['gatewaysearchstarted_1557',['gatewaySearchStarted',['../classEnigmaIOTNodeClass.html#ad2beff45acb833796b079e741d13ec75',1,'EnigmaIOTNodeClass']]],\n  ['getgwinfouri_1558',['getGwInfoUri',['../GatewayAPI_8cpp.html#a4a9a0e6476327e4b48e47962e42a5b72',1,'GatewayAPI.cpp']]],\n  ['getgwresetturi_1559',['getGwResettUri',['../GatewayAPI_8cpp.html#a44442f4218442b3ac5d6bfb5aa457eb4',1,'GatewayAPI.cpp']]],\n  ['getgwrestarturi_1560',['getGwRestartUri',['../GatewayAPI_8cpp.html#a4a669b0dba2a947822ae13ed5cbdad36',1,'GatewayAPI.cpp']]],\n  ['getmaxnodesuri_1561',['getMaxNodesUri',['../GatewayAPI_8cpp.html#a9e381857b19a19f4b04b22466373d7df',1,'GatewayAPI.cpp']]],\n  ['getnodenumberuri_1562',['getNodeNumberUri',['../GatewayAPI_8cpp.html#a1840a76ce647f7367adbe0738848153c',1,'GatewayAPI.cpp']]],\n  ['getnoderestarturi_1563',['getNodeRestartUri',['../GatewayAPI_8cpp.html#a55ba46dd79121e3af6c3e3dc06e76b2b',1,'GatewayAPI.cpp']]],\n  ['getnodesuri_1564',['getNodesUri',['../GatewayAPI_8cpp.html#acfd88e792c95d773692f0f5b3160ddbf',1,'GatewayAPI.cpp']]],\n  ['getnodeuri_1565',['getNodeUri',['../GatewayAPI_8cpp.html#a43838d21da06df9ccc48b56d5bab438d',1,'GatewayAPI.cpp']]],\n  ['gwapi_1566',['GwAPI',['../GatewayAPI_8cpp.html#a69f499591af56509cd3540f09207f091',1,'GwAPI():&#160;GatewayAPI.cpp'],['../GatewayAPI_8h.html#a69f499591af56509cd3540f09207f091',1,'GwAPI():&#160;GatewayAPI.cpp']]],\n  ['gwconfig_1567',['gwConfig',['../classEnigmaIOTGatewayClass.html#a77802389a0b41546f60ce114097bcadc',1,'EnigmaIOTGatewayClass']]],\n  ['gwoutput_1568',['GwOutput',['../GwOutput__dummy_8cpp.html#aea3ab74ce495f6e6d8c5916aab3aaa95',1,'GwOutput():&#160;GwOutput_dummy.cpp'],['../GwOutput__dummy_8h.html#aea3ab74ce495f6e6d8c5916aab3aaa95',1,'GwOutput():&#160;GwOutput_dummy.cpp'],['../GwOutput__mqtt_8cpp.html#afb58b5e941b1e87b27c59c51b730f631',1,'GwOutput():&#160;GwOutput_mqtt.cpp'],['../GwOutput__mqtt_8h.html#afb58b5e941b1e87b27c59c51b730f631',1,'GwOutput():&#160;GwOutput_dummy.cpp']]],\n  ['gwtopic_1569',['gwTopic',['../classGatewayOutput__generic.html#a0fe4ed2bd219b89e187770cb0ba9fdc3',1,'GatewayOutput_generic']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_8.js",
    "content": "var searchData=\n[\n  ['ha_5fallow_5fattrib_1570',['ha_allow_attrib',['../haEntity_8h.html#a1af598a0ee0d299624cef6b4b61b6ba6',1,'haEntity.h']]],\n  ['ha_5fdevice_5fclass_1571',['ha_device_class',['../haEntity_8h.html#aebdcd9a166f413152e13a2d85d47d3a3',1,'haEntity.h']]],\n  ['ha_5fdevice_5ftype_1572',['ha_device_type',['../haEntity_8h.html#a375fbbd60c980937a4d80c1156fb9d33',1,'haEntity.h']]],\n  ['ha_5fdiscovery_5fprefix_1573',['HA_DISCOVERY_PREFIX',['../EnigmaIoTconfigAdvanced_8h.html#a21ccf12c2b61e8c6eeef4b41326d0020',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ha_5fexpiration_1574',['ha_expiration',['../haEntity_8h.html#a6cdc4acd13954859318b6f95243d5694',1,'haEntity.h']]],\n  ['ha_5fname_5fsufix_1575',['ha_name_sufix',['../haEntity_8h.html#a03ffb2c860c7276dca38abdca4423f16',1,'haEntity.h']]],\n  ['ha_5foff_5fdelay_1576',['ha_off_delay',['../haEntity_8h.html#a510b5d3df2d7a28a54196b2441fdb270',1,'haEntity.h']]],\n  ['ha_5fpayload_1577',['ha_payload',['../haEntity_8h.html#a6353607c8cf0175f0c64dde2848e8d14',1,'haEntity.h']]],\n  ['ha_5fpayload_5fclose_1578',['ha_payload_close',['../haEntity_8h.html#a244cdb583a7f830630583998a8e840c2',1,'haEntity.h']]],\n  ['ha_5fpayload_5fgoto_1579',['ha_payload_goto',['../haEntity_8h.html#a7adb03c6d78cf03d69a6d01bbfdc7712',1,'haEntity.h']]],\n  ['ha_5fpayload_5foff_1580',['ha_payload_off',['../haEntity_8h.html#a401afaae50f1f853db98f8398b921d5a',1,'haEntity.h']]],\n  ['ha_5fpayload_5fon_1581',['ha_payload_on',['../haEntity_8h.html#ae7ffd524cbd915c942359b0f6abe1df5',1,'haEntity.h']]],\n  ['ha_5fpayload_5fopen_1582',['ha_payload_open',['../haEntity_8h.html#a449cf1be60eb0a8a34960fdf8c23a880',1,'haEntity.h']]],\n  ['ha_5fpayload_5fstop_1583',['ha_payload_stop',['../haEntity_8h.html#ac28afc4ec8c1f31ce44d297789c575d6',1,'haEntity.h']]],\n  ['ha_5fposition_5fclosed_1584',['ha_position_closed',['../haEntity_8h.html#a05ac358789f765b6277d403be15765ae',1,'haEntity.h']]],\n  ['ha_5fposition_5fopen_1585',['ha_position_open',['../haEntity_8h.html#ac4777728d51f1f44cb664a1afdd0fe75',1,'haEntity.h']]],\n  ['ha_5fset_5fposition_5ftemplate_1586',['ha_set_position_template',['../haEntity_8h.html#af29b583e27925f5bb557695a24e34874',1,'haEntity.h']]],\n  ['ha_5fstate_5fclosed_1587',['ha_state_closed',['../haEntity_8h.html#a6e7e453ab4f0a09c4041b577af62773d',1,'haEntity.h']]],\n  ['ha_5fstate_5fclosing_1588',['ha_state_closing',['../haEntity_8h.html#affa1a278c35b3323dd830ac3a2195d2f',1,'haEntity.h']]],\n  ['ha_5fstate_5foff_1589',['ha_state_off',['../haEntity_8h.html#a2fe6fbc4270c94da4cafb0cbb9378230',1,'haEntity.h']]],\n  ['ha_5fstate_5fon_1590',['ha_state_on',['../haEntity_8h.html#a9f73e9dfb1de4078c76f6670d1c8b46a',1,'haEntity.h']]],\n  ['ha_5fstate_5fopen_1591',['ha_state_open',['../haEntity_8h.html#afb9503f780f913e1ca94900da8723da7',1,'haEntity.h']]],\n  ['ha_5fstate_5fopening_1592',['ha_state_opening',['../haEntity_8h.html#a536f1579f3c3216e432bb8c90af908f3',1,'haEntity.h']]],\n  ['ha_5fstate_5fstopped_1593',['ha_state_stopped',['../haEntity_8h.html#aa16bd80cd18d74b5613df907fb42436b',1,'haEntity.h']]],\n  ['ha_5fsubtype_1594',['ha_subtype',['../haEntity_8h.html#a79b008a5a9f249d1e6fd72a710636ca7',1,'haEntity.h']]],\n  ['ha_5ftriggersubtypestr_1595',['ha_triggerSubtypeStr',['../haTrigger_8h.html#a291e753178ee4e52fb182fc2af9cd566',1,'haTrigger.h']]],\n  ['ha_5ftriggertypestr_1596',['ha_triggerTypeStr',['../haTrigger_8h.html#a98aa5d190f3afda4339a9f35a8f59eef',1,'haTrigger.h']]],\n  ['ha_5ftype_1597',['ha_type',['../haEntity_8h.html#aa0102b90994b2b8c9c461faf7a13d453',1,'haEntity.h']]],\n  ['ha_5funit_5fof_5fmeasurement_1598',['ha_unit_of_measurement',['../haEntity_8h.html#af69343b9e51fbd195d5964407594f653',1,'haEntity.h']]],\n  ['ha_5fvalue_5fkey_1599',['ha_value_key',['../haEntity_8h.html#a55797940423863b288e6c60755873026',1,'haEntity.h']]],\n  ['ha_5fvalue_5ftemplate_1600',['ha_value_template',['../haEntity_8h.html#ad04e2a8059ebfefb02e98fb3524276c2',1,'haEntity.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_9.js",
    "content": "var searchData=\n[\n  ['identify_5ftimeout_1601',['IDENTIFY_TIMEOUT',['../EnigmaIoTconfig_8h.html#a27132ec0215933e4201ee048b43916a5',1,'EnigmaIoTconfig.h']]],\n  ['identifystart_1602',['identifyStart',['../classEnigmaIOTNodeClass.html#a9ffe72d0ffb67d58f2e435308433b8ad',1,'EnigmaIOTNodeClass']]],\n  ['idx_1603',['idx',['../namespaceEnigmaIoTUpdate.html#a5069992755f7ebc78fa8218e65550c64',1,'EnigmaIoTUpdate']]],\n  ['indentifying_1604',['indentifying',['../classEnigmaIOTNodeClass.html#aa2a4910739da2e9181f2274cbc4d078a',1,'EnigmaIOTNodeClass']]],\n  ['initassleepy_1605',['initAsSleepy',['../classNode.html#ac492ae71e392fe59002e9900fb0d8c03',1,'Node']]],\n  ['input_5fqueue_1606',['input_queue',['../classEnigmaIOTGatewayClass.html#a492277b3df7f10f988c3d5cd087d1a40',1,'EnigmaIOTGatewayClass']]],\n  ['insidethermometer_1607',['insideThermometer',['../classCONTROLLER__CLASS__NAME.html#ab6ae5865908255a9379c8c60632a3e3b',1,'CONTROLLER_CLASS_NAME']]],\n  ['invalidatereason_1608',['invalidateReason',['../classEnigmaIOTNodeClass.html#a39fd0a21844a920f3a237e25311f58f8',1,'EnigmaIOTNodeClass']]],\n  ['iv_5flength_1609',['IV_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a0ae6c4c749724e380b6e717a6535bed6',1,'EnigmaIoTconfigAdvanced.h']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_a.js",
    "content": "var searchData=\n[\n  ['key_1610',['key',['../structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2',1,'node_instance::key()'],['../classNode.html#aad088b52de3eb46a8c89e6cb87bdf887',1,'Node::key()']]],\n  ['key_5flength_1611',['KEY_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['keyvalid_1612',['keyValid',['../structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f',1,'node_instance::keyValid()'],['../classNode.html#a03e424c2251b5b96fb68444f008f6f17',1,'Node::keyValid()']]],\n  ['keyvalidfrom_1613',['keyValidFrom',['../structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96',1,'node_instance::keyValidFrom()'],['../classNode.html#afad1c640f8fc2623996d3d2a174ad763',1,'Node::keyValidFrom()']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_b.js",
    "content": "var searchData=\n[\n  ['lastbroadcastmsgcounter_1614',['lastBroadcastMsgCounter',['../classEnigmaIOTNodeClass.html#a98ed5cb782d6c980e81392c82beec9fa',1,'EnigmaIOTNodeClass::lastBroadcastMsgCounter()'],['../classNodeList.html#a0c8a5c30939520843eda50fcee7a41a7',1,'NodeList::lastBroadcastMsgCounter()']]],\n  ['lastcontrolcounter_1615',['lastControlCounter',['../structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78',1,'rtcmem_data_t::lastControlCounter()'],['../structnode__instance.html#aee6b3fdf81d44af5053d138136d0f7f5',1,'node_instance::lastControlCounter()'],['../classNode.html#ac36076f507ba318d5f3fd37c9eee2cc2',1,'Node::lastControlCounter()']]],\n  ['lastdownlinkmsgcounter_1616',['lastDownlinkMsgCounter',['../structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d',1,'rtcmem_data_t::lastDownlinkMsgCounter()'],['../structnode__instance.html#a6ac60e31e921d2e101c86584eb5a5489',1,'node_instance::lastDownlinkMsgCounter()'],['../classNode.html#a91fa5b6c997bf5a84369d8f9dd691c54',1,'Node::lastDownlinkMsgCounter()']]],\n  ['lastmessagecounter_1617',['lastMessageCounter',['../structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114',1,'rtcmem_data_t::lastMessageCounter()'],['../structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91',1,'node_instance::lastMessageCounter()'],['../classNode.html#af2378f7b085ccdc06314b12263fd2d34',1,'Node::lastMessageCounter()']]],\n  ['lastmessagetime_1618',['lastMessageTime',['../structnode__instance.html#a7eadabd847f82e2383dd440fd3cddc37',1,'node_instance::lastMessageTime()'],['../classNode.html#a2d56bbba3211927eff545e385ef5d162',1,'Node::lastMessageTime()']]],\n  ['lastotamsg_1619',['lastOTAmsg',['../classEnigmaIOTNodeClass.html#ad3d2d41b518fbbb99d6c4d8824b9d4bd',1,'EnigmaIOTNodeClass::lastOTAmsg()'],['../EnigmaIOTGateway_8cpp.html#a792b28373075cd82cdece3745a65b65a',1,'lastOTAmsg():&#160;EnigmaIOTGateway.cpp']]],\n  ['led_1620',['led',['../classCONTROLLER__CLASS__NAME.html#aa202545b98827df6cdfeea82898cba6c',1,'CONTROLLER_CLASS_NAME::led()'],['../classEnigmaIOTNodeClass.html#a416d8a7660d1eaa85422247e9e918781',1,'EnigmaIOTNodeClass::led()'],['../EnigmaIOT-Button-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#a734029c5fc6508cd75bf19cd7f52b66d',1,'LED():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['ledkey_1621',['ledKey',['../LedController_8cpp.html#aadbacb12de89507a2f1923e84c9f42da',1,'LedController.cpp']]],\n  ['ledontime_1622',['ledOnTime',['../classEnigmaIOTNodeClass.html#a13b4e0476b9afe933303985e9a7025f1',1,'EnigmaIOTNodeClass']]],\n  ['len_1623',['len',['../structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65',1,'msg_queue_item_t']]],\n  ['linked_1624',['linked',['../structsmartSwitchControllerHw__t.html#a311c8e216f6f9b9f492a4bf6758edf80',1,'smartSwitchControllerHw_t']]],\n  ['linkkey_1625',['linkKey',['../SmartSwitchController_8cpp.html#a4288d07a10402a3fbaa29d6d009f5b21',1,'SmartSwitchController.cpp']]],\n  ['localled_1626',['localLed',['../EnigmaIOTNode_8cpp.html#a92e5a2fd1601642b4ee6c4a9ec126524',1,'EnigmaIOTNode.cpp']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_c.js",
    "content": "var searchData=\n[\n  ['mac_1627',['mac',['../structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6',1,'node_instance::mac()'],['../classNode.html#aba2a2a0bc44214b57f57abd59ec5b0a2',1,'Node::mac()']]],\n  ['max_5fconsecutive_5fboot_1628',['MAX_CONSECUTIVE_BOOT',['../EnigmaIOT-Button-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-Button-Controller.cpp'],['../EnigmaIOT-DashButton-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-DashButton-Controller.cpp'],['../EnigmaIOT-Json-Controller-Template_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-Json-Controller-Template.cpp'],['../EnigmaIOT-Led-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-Led-Controller.cpp'],['../EnigmaIOT-Sensor-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-Sensor-Controller.cpp'],['../EnigmaIOT-SmartSwitch-Controller_8cpp.html#ae4fae2891cab0e7811bb5f339d57d213',1,'MAX_CONSECUTIVE_BOOT():&#160;EnigmaIOT-SmartSwitch-Controller.cpp']]],\n  ['max_5fdata_5fpayload_5flength_1629',['MAX_DATA_PAYLOAD_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a2fccc769283a5e59b2205fce6c5663c3',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['max_5fdata_5fpayload_5fsize_1630',['MAX_DATA_PAYLOAD_SIZE',['../EnigmaIoTconfigAdvanced_8h.html#a8df0346a1f3e282d6875b04a9fe4ec8f',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['max_5finput_5fqueue_5fsize_1631',['MAX_INPUT_QUEUE_SIZE',['../EnigmaIoTconfig_8h.html#a2909f9f6e8ecc4dfd6947911e4eb2d96',1,'EnigmaIoTconfig.h']]],\n  ['max_5fkey_5fvalidity_1632',['MAX_KEY_VALIDITY',['../EnigmaIoTconfig_8h.html#aadcc5d2ec146be476018bdfc71d04f79',1,'EnigmaIoTconfig.h']]],\n  ['max_5fmessage_5flength_1633',['MAX_MESSAGE_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['max_5fmqtt_5fpld_5flen_1634',['MAX_MQTT_PLD_LEN',['../GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d',1,'GwOutput_mqtt.h']]],\n  ['max_5fmqtt_5fqueue_5fsize_1635',['MAX_MQTT_QUEUE_SIZE',['../EnigmaIoTconfig_8h.html#a78ee44942fc7c28441d0cd502d1d3d3d',1,'EnigmaIoTconfig.h']]],\n  ['max_5fmqtt_5ftopic_5flen_1636',['MAX_MQTT_TOPIC_LEN',['../GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9',1,'GwOutput_mqtt.h']]],\n  ['max_5fnode_5finactivity_1637',['MAX_NODE_INACTIVITY',['../EnigmaIoTconfig_8h.html#a718f713933a902050be33c5651800011',1,'EnigmaIoTconfig.h']]],\n  ['maxsize_1638',['maxSize',['../classEnigmaIOTRingBuffer.html#a596c337b97baac1d28f2bd8e71af6eaa',1,'EnigmaIOTRingBuffer']]],\n  ['min_5fsync_5faccuracy_1639',['MIN_SYNC_ACCURACY',['../EnigmaIoTconfigAdvanced_8h.html#a6be31758c99161d257bf66a6a809047d',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['mqtt_5fclient_1640',['mqtt_client',['../classGwOutput__MQTT.html#ac177228269fbe285eb3b1a1d31764327',1,'GwOutput_MQTT']]],\n  ['mqtt_5fpass_1641',['mqtt_pass',['../structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31',1,'mqttgw_config_t']]],\n  ['mqtt_5fport_1642',['mqtt_port',['../structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd',1,'mqttgw_config_t']]],\n  ['mqtt_5fqueue_1643',['mqtt_queue',['../classGwOutput__MQTT.html#af0477251ade40b70ff8c65f1e5478163',1,'GwOutput_MQTT']]],\n  ['mqtt_5fserver_1644',['mqtt_server',['../structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326',1,'mqttgw_config_t']]],\n  ['mqtt_5fuser_1645',['mqtt_user',['../structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe',1,'mqttgw_config_t']]],\n  ['mqttgw_5fconfig_1646',['mqttgw_config',['../classGwOutput__MQTT.html#a13bd3d7f5d5a221627886a8b4ce29516',1,'GwOutput_MQTT']]],\n  ['mqttpassparam_1647',['mqttPassParam',['../classGwOutput__MQTT.html#ad4d784744aeee89199092987f9ba5c53',1,'GwOutput_MQTT']]],\n  ['mqttportparam_1648',['mqttPortParam',['../classGwOutput__MQTT.html#a7949ebf56b8a63b24553fe02d857373d',1,'GwOutput_MQTT']]],\n  ['mqttserverparam_1649',['mqttServerParam',['../classGwOutput__MQTT.html#a6c30a4c67499253c238fc8646f3285ef',1,'GwOutput_MQTT']]],\n  ['mqttuserparam_1650',['mqttUserParam',['../classGwOutput__MQTT.html#a24682127079586d71ac858f7e2f78f6f',1,'GwOutput_MQTT']]],\n  ['mypublickey_1651',['myPublicKey',['../classEnigmaIOTGatewayClass.html#adefe71141a5aa6f9c46712487b6feb31',1,'EnigmaIOTGatewayClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_d.js",
    "content": "var searchData=\n[\n  ['netname_1652',['netName',['../classGatewayOutput__generic.html#a088ff06222b9cbc391f2c216b8c689fa',1,'GatewayOutput_generic']]],\n  ['network_5fname_5flength_1653',['NETWORK_NAME_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['networkkey_1654',['networkKey',['../structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f',1,'gateway_config_t::networkKey()'],['../structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd',1,'rtcmem_data_t::networkKey()']]],\n  ['networkname_1655',['networkName',['../structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6',1,'gateway_config_t::networkName()'],['../structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d',1,'rtcmem_data_t::networkName()']]],\n  ['node_1656',['node',['../classEnigmaIOTGatewayClass.html#a69e6d53334b842b054fc9e3cfdbb6067',1,'EnigmaIOTGatewayClass::node()'],['../classEnigmaIOTNodeClass.html#a59edd64bf4bf9acf6b18b6af90c9a435',1,'EnigmaIOTNodeClass::node()']]],\n  ['node_5fname_5flength_1657',['NODE_NAME_LENGTH',['../EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['nodeaddrparam_1658',['nodeAddrParam',['../GatewayAPI_8cpp.html#ad9a0cbae2e14a9562307948b2ac1434a',1,'GatewayAPI.cpp']]],\n  ['nodeconnectionledflashing_1659',['nodeConnectionLedFlashing',['../EnigmaIOTNode_8cpp.html#a0bf0b548fcfd9b0089f62fda8fff81aa',1,'EnigmaIOTNode.cpp']]],\n  ['nodeid_1660',['nodeId',['../structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481',1,'rtcmem_data_t::nodeId()'],['../structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f',1,'node_instance::nodeId()'],['../classNode.html#a4f9547a1ede244be2b33d1fcf6de68b0',1,'Node::nodeId()']]],\n  ['nodeidparam_1661',['nodeIdParam',['../GatewayAPI_8cpp.html#affc0d6e756f8b8eb7c21751494b5e8b2',1,'GatewayAPI.cpp']]],\n  ['nodekey_1662',['nodeKey',['../structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2',1,'rtcmem_data_t']]],\n  ['nodekeyvalid_1663',['nodeKeyValid',['../structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463',1,'rtcmem_data_t']]],\n  ['nodelist_1664',['nodelist',['../classEnigmaIOTGatewayClass.html#a1ef5d02770b1b3bf2acf0adf7b410a17',1,'EnigmaIOTGatewayClass']]],\n  ['nodename_1665',['nodeName',['../structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d',1,'rtcmem_data_t::nodeName()'],['../structnode__instance.html#ad979924ffe46421c554052889ee590fb',1,'node_instance::nodeName()'],['../classNode.html#aa270ef450c28e630de129a94c6992805',1,'Node::nodeName()']]],\n  ['nodenameparam_1666',['nodeNameParam',['../GatewayAPI_8cpp.html#a89f10f640dc72117118bf9ab01f7e04a',1,'GatewayAPI.cpp']]],\n  ['noderegisterstatus_1667',['nodeRegisterStatus',['../structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496',1,'rtcmem_data_t']]],\n  ['nodes_1668',['nodes',['../classNodeList.html#a57a69c9dde4327beeb404c83defdbdaa',1,'NodeList']]],\n  ['notifyconnection_1669',['notifyConnection',['../classEnigmaIOTNodeClass.html#ae2da55526a67b70c0b724fe1d856cc72',1,'EnigmaIOTNodeClass']]],\n  ['notifydata_1670',['notifyData',['../classEnigmaIOTGatewayClass.html#ab21597ced9ee31298c8a8eefed562ff9',1,'EnigmaIOTGatewayClass::notifyData()'],['../classEnigmaIOTNodeClass.html#a5c188f7db5bdde5837a02e4095c3b549',1,'EnigmaIOTNodeClass::notifyData()']]],\n  ['notifydisconnection_1671',['notifyDisconnection',['../classEnigmaIOTNodeClass.html#a0e506efc2aa99694bfa13a59b07d55cc',1,'EnigmaIOTNodeClass']]],\n  ['notifyhadiscovery_1672',['notifyHADiscovery',['../classEnigmaIOTGatewayClass.html#ae0c52d330bfce048e9d8c4fb8cf1a967',1,'EnigmaIOTGatewayClass']]],\n  ['notifynewnode_1673',['notifyNewNode',['../classEnigmaIOTGatewayClass.html#a27ddc1b8decbcf821a0427faa3c1ced3',1,'EnigmaIOTGatewayClass']]],\n  ['notifynodedisconnection_1674',['notifyNodeDisconnection',['../classEnigmaIOTGatewayClass.html#ac311b64885137edaab70f3692e47f061',1,'EnigmaIOTGatewayClass']]],\n  ['notifyrestartrequested_1675',['notifyRestartRequested',['../classEnigmaIOTGatewayClass.html#a9f121c9f733353f210aa9725375fae4b',1,'EnigmaIOTGatewayClass']]],\n  ['notifywifimanagerexit_1676',['notifyWiFiManagerExit',['../classEnigmaIOTGatewayClass.html#a88c43de63b862f5a19a79e9d5558beba',1,'EnigmaIOTGatewayClass::notifyWiFiManagerExit()'],['../classEnigmaIOTNodeClass.html#a2984b66fdb8a831c9c7cbf775afc82b4',1,'EnigmaIOTNodeClass::notifyWiFiManagerExit()']]],\n  ['notifywifimanagerstarted_1677',['notifyWiFiManagerStarted',['../classEnigmaIOTGatewayClass.html#ad704dfd5a37c58ef1311501b573f1251',1,'EnigmaIOTGatewayClass::notifyWiFiManagerStarted()'],['../classEnigmaIOTNodeClass.html#a4c9590d8531f7da5643983f5519d40a9',1,'EnigmaIOTNodeClass::notifyWiFiManagerStarted()']]],\n  ['num_5fnodes_1678',['NUM_NODES',['../EnigmaIoTconfig_8h.html#a71ee5004618cb61a934f136d7c2f45e2',1,'EnigmaIoTconfig.h']]],\n  ['numelements_1679',['numElements',['../classEnigmaIOTRingBuffer.html#a312bff8624df2dfa07a823f4e0523237',1,'EnigmaIOTRingBuffer']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_e.js",
    "content": "var searchData=\n[\n  ['offset_1680',['offset',['../classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95',1,'TimeManagerClass']]],\n  ['on_5fstate_1681',['ON_STATE',['../structsmartSwitchControllerHw__t.html#a4655115d731c63e4f4e98f3b2cf0f743',1,'smartSwitchControllerHw_t']]],\n  ['onewire_1682',['oneWire',['../classCONTROLLER__CLASS__NAME.html#aa83d1a9fa08dfeb08690d132e77883db',1,'CONTROLLER_CLASS_NAME']]],\n  ['ota_5ffinished_1683',['OTA_FINISHED',['../namespaceEnigmaIoTUpdate.html#a56955d84eb178a78a16db3ed6e2a1c7e',1,'EnigmaIoTUpdate']]],\n  ['ota_5fgw_5ftimeout_1684',['OTA_GW_TIMEOUT',['../EnigmaIoTconfigAdvanced_8h.html#aad94db36f97a563732bfd0ca10b164f9',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['ota_5fout_5fof_5fsequence_1685',['OTA_OUT_OF_SEQUENCE',['../namespaceEnigmaIoTUpdate.html#ad815631b097bdf448ecd824fc28bfec6',1,'EnigmaIoTUpdate']]],\n  ['ota_5ftimeout_5ftime_1686',['OTA_TIMEOUT_TIME',['../EnigmaIoTconfigAdvanced_8h.html#aeb4681294ade5149d1db83df99744f6e',1,'EnigmaIoTconfigAdvanced.h']]],\n  ['otaerror_1687',['otaError',['../classEnigmaIOTNodeClass.html#a70fa9cce1a3080b3e946783a791363d6',1,'EnigmaIOTNodeClass']]],\n  ['otafinished_1688',['otaFinished',['../namespaceEnigmaIoTUpdate.html#a1efdbd8359ee1708af1bcf3be3eff850',1,'EnigmaIoTUpdate']]],\n  ['otaok_1689',['otaOK',['../namespaceEnigmaIoTUpdate.html#af461562efece05d0467c0e17edd2e58f',1,'EnigmaIoTUpdate']]],\n  ['otaongoing_1690',['OTAongoing',['../EnigmaIOTGateway_8cpp.html#a96db16d874da26d9a7b199c904da0d5f',1,'EnigmaIOTGateway.cpp']]],\n  ['otaoutofsequenceerror_1691',['otaOutOfSequenceError',['../namespaceEnigmaIoTUpdate.html#ade24b0154bfadccc5f69ee560a33de8b',1,'EnigmaIoTUpdate']]],\n  ['otaresulttopic_1692',['otaResultTopic',['../namespaceEnigmaIoTUpdate.html#af04fd96058043d8861cd38175cb99e6c',1,'EnigmaIoTUpdate']]],\n  ['otarunning_1693',['otaRunning',['../classEnigmaIOTNodeClass.html#a238294f8ca6888e5e6000592e0955888',1,'EnigmaIOTNodeClass']]],\n  ['otasettopic_1694',['otaSetTopic',['../namespaceEnigmaIoTUpdate.html#aefdb455c166193127480d7b5afe88a66',1,'EnigmaIoTUpdate']]],\n  ['out_5fqueue_1695',['out_queue',['../classEspnow__halClass.html#a4fdb484427e4128d2776a0b9eb2efe92',1,'Espnow_halClass']]]\n];\n"
  },
  {
    "path": "docs/html/search/variables_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"variables_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ncreateResults();\n/* @license-end */\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\nwindow.addEventListener(\"message\", function(event) {\n  if (event.data == \"take_focus\") {\n    var elem = searchResults.NavNext(0);\n    if (elem) elem.focus();\n  }\n});\n/* @license-end */\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/search/variables_f.js",
    "content": "var searchData=\n[\n  ['packeterrors_1696',['packetErrors',['../classNode.html#a4e2e4c6afb4bf93ca10e60d239fd87c5',1,'Node']]],\n  ['packetnumber_1697',['packetNumber',['../classNode.html#aedfde4376c7c84dd8c88c2c530b3b102',1,'Node']]],\n  ['packetshour_1698',['packetsHour',['../classNode.html#abc1ad898434142e44923f7220b6a2ae4',1,'Node']]],\n  ['payload_1699',['payload',['../structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3',1,'mqtt_queue_item_t::payload()'],['../structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5',1,'comms_queue_item_t::payload()']]],\n  ['payload_5flen_1700',['payload_len',['../structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71',1,'mqtt_queue_item_t::payload_len()'],['../structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860',1,'comms_queue_item_t::payload_len()']]],\n  ['per_1701',['per',['../classNode.html#a2f8f6419cc10c972285178991b2cec78',1,'Node']]],\n  ['plainnetkey_1702',['plainNetKey',['../classEnigmaIOTGatewayClass.html#a5e875dd3fa022dfba029f1e1124fcded',1,'EnigmaIOTGatewayClass']]],\n  ['post_5freg_5fdelay_1703',['POST_REG_DELAY',['../EnigmaIoTconfig_8h.html#a198819f64ca0424df0b0fc930b85caed',1,'EnigmaIoTconfig.h']]],\n  ['pre_5freg_5fdelay_1704',['PRE_REG_DELAY',['../EnigmaIoTconfig_8h.html#a122e04d1d7956015ed3e7d349fa34a6a',1,'EnigmaIoTconfig.h']]],\n  ['privatedhkey_1705',['privateDHKey',['../classCryptModule.html#a34795afc7eeb1110a1672d496b3d55a3',1,'CryptModule']]],\n  ['protectota_1706',['protectOTA',['../classEnigmaIOTNodeClass.html#a7068191735c2fb154c857fc80660adc0',1,'EnigmaIOTNodeClass']]],\n  ['publicdhkey_1707',['publicDHKey',['../classCryptModule.html#ae55611b17617615a79de5325d2c3c02d',1,'CryptModule']]],\n  ['pushreleased_1708',['pushReleased',['../classCONTROLLER__CLASS__NAME.html#ab1766a261776bbdd0aa7c9016b6502be',1,'CONTROLLER_CLASS_NAME']]],\n  ['pushtriggered_1709',['pushTriggered',['../classCONTROLLER__CLASS__NAME.html#a97993aade6d2d6e22e48872f71b7f40a',1,'CONTROLLER_CLASS_NAME']]]\n];\n"
  },
  {
    "path": "docs/html/structcomms__queue__item__t-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">comms_queue_item_t Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">dstAddress</a></td><td class=\"entry\"><a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5\">payload</a></td><td class=\"entry\"><a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">payload_len</a></td><td class=\"entry\"><a class=\"el\" href=\"structcomms__queue__item__t.html\">comms_queue_item_t</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structcomms__queue__item__t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: comms_queue_item_t Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"structcomms__queue__item__t-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">comms_queue_item_t Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a29ee334b0872cfdc2f6a2e992a3c727f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structcomms__queue__item__t.html#a29ee334b0872cfdc2f6a2e992a3c727f\">dstAddress</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]</td></tr>\n<tr class=\"separator:a29ee334b0872cfdc2f6a2e992a3c727f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a26b511d49735443cca07450d4b7e66d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structcomms__queue__item__t.html#a26b511d49735443cca07450d4b7e66d5\">payload</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]</td></tr>\n<tr class=\"separator:a26b511d49735443cca07450d4b7e66d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a736106aeedc634be01424aaa5ed55860\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structcomms__queue__item__t.html#a736106aeedc634be01424aaa5ed55860\">payload_len</a></td></tr>\n<tr class=\"separator:a736106aeedc634be01424aaa5ed55860\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00028\">28</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a29ee334b0872cfdc2f6a2e992a3c727f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a29ee334b0872cfdc2f6a2e992a3c727f\">&#9670;&nbsp;</a></span>dstAddress</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t comms_queue_item_t::dstAddress[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Message topic </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00029\">29</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a26b511d49735443cca07450d4b7e66d5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a26b511d49735443cca07450d4b7e66d5\">&#9670;&nbsp;</a></span>payload</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t comms_queue_item_t::payload[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Message payload </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00030\">30</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a736106aeedc634be01424aaa5ed55860\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a736106aeedc634be01424aaa5ed55860\">&#9670;&nbsp;</a></span>payload_len</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t comms_queue_item_t::payload_len</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Payload length </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"Comms__hal_8h_source.html#l00031\">31</a> of file <a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>src/<a class=\"el\" href=\"Comms__hal_8h_source.html\">Comms_hal.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structgateway__config__t-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gateway_config_t Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"structgateway__config__t.html\">gateway_config_t</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">channel</a></td><td class=\"entry\"><a class=\"el\" href=\"structgateway__config__t.html\">gateway_config_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a></td><td class=\"entry\"><a class=\"el\" href=\"structgateway__config__t.html\">gateway_config_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a></td><td class=\"entry\"><a class=\"el\" href=\"structgateway__config__t.html\">gateway_config_t</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structgateway__config__t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: gateway_config_t Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"structgateway__config__t-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gateway_config_t Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a1ac13a1c74a672e9dd1268ffc23a1a69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structgateway__config__t.html#a1ac13a1c74a672e9dd1268ffc23a1a69\">channel</a> = <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">DEFAULT_CHANNEL</a></td></tr>\n<tr class=\"separator:a1ac13a1c74a672e9dd1268ffc23a1a69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ff4851d0c71213fa6a1a63acb5c9d6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structgateway__config__t.html#a0ff4851d0c71213fa6a1a63acb5c9d6f\">networkKey</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td></tr>\n<tr class=\"separator:a0ff4851d0c71213fa6a1a63acb5c9d6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3203f7006f14c8a96c432703c519c8d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structgateway__config__t.html#a3203f7006f14c8a96c432703c519c8d6\">networkName</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a>]</td></tr>\n<tr class=\"separator:a3203f7006f14c8a96c432703c519c8d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00104\">104</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a1ac13a1c74a672e9dd1268ffc23a1a69\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1ac13a1c74a672e9dd1268ffc23a1a69\">&#9670;&nbsp;</a></span>channel</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t gateway_config_t::channel = <a class=\"el\" href=\"EnigmaIoTconfig_8h.html#af561a36a9d4be8596b2187252342ffdf\">DEFAULT_CHANNEL</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Channel used for communications </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00105\">105</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0ff4851d0c71213fa6a1a63acb5c9d6f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0ff4851d0c71213fa6a1a63acb5c9d6f\">&#9670;&nbsp;</a></span>networkKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t gateway_config_t::networkKey[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Network key to protect key agreement </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00106\">106</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a3203f7006f14c8a96c432703c519c8d6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3203f7006f14c8a96c432703c519c8d6\">&#9670;&nbsp;</a></span>networkName</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char gateway_config_t::networkName[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Network name, used to help nodes to find gateway </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00107\">107</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>src/<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structmqtt__queue__item__t-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mqtt_queue_item_t Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">payload</a></td><td class=\"entry\"><a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">payload_len</a></td><td class=\"entry\"><a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570\">retain</a></td><td class=\"entry\"><a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">topic</a></td><td class=\"entry\"><a class=\"el\" href=\"structmqtt__queue__item__t.html\">mqtt_queue_item_t</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structmqtt__queue__item__t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: mqtt_queue_item_t Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"structmqtt__queue__item__t-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">mqtt_queue_item_t Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a16fd8eb5680730758fbb7d4b22bf94d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmqtt__queue__item__t.html#a16fd8eb5680730758fbb7d4b22bf94d8\">topic</a> [<a class=\"el\" href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">MAX_MQTT_TOPIC_LEN</a>]</td></tr>\n<tr class=\"separator:a16fd8eb5680730758fbb7d4b22bf94d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a188c9fd25ec2003a1ac1e677a0b55ea3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmqtt__queue__item__t.html#a188c9fd25ec2003a1ac1e677a0b55ea3\">payload</a> [<a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">MAX_MQTT_PLD_LEN</a>]</td></tr>\n<tr class=\"separator:a188c9fd25ec2003a1ac1e677a0b55ea3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a62c6546560a1c32ef4beee7366949b71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmqtt__queue__item__t.html#a62c6546560a1c32ef4beee7366949b71\">payload_len</a></td></tr>\n<tr class=\"separator:a62c6546560a1c32ef4beee7366949b71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a97156ce99d23165972659f5cf86ed570\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmqtt__queue__item__t.html#a97156ce99d23165972659f5cf86ed570\">retain</a></td></tr>\n<tr class=\"separator:a97156ce99d23165972659f5cf86ed570\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00077\">77</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a188c9fd25ec2003a1ac1e677a0b55ea3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a188c9fd25ec2003a1ac1e677a0b55ea3\">&#9670;&nbsp;</a></span>payload</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char mqtt_queue_item_t::payload[<a class=\"el\" href=\"GwOutput__mqtt_8h.html#ae444c69d932744ac6ba80ef8683c414d\">MAX_MQTT_PLD_LEN</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Message payload </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00079\">79</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a62c6546560a1c32ef4beee7366949b71\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a62c6546560a1c32ef4beee7366949b71\">&#9670;&nbsp;</a></span>payload_len</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t mqtt_queue_item_t::payload_len</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Payload length </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00080\">80</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a97156ce99d23165972659f5cf86ed570\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a97156ce99d23165972659f5cf86ed570\">&#9670;&nbsp;</a></span>retain</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool mqtt_queue_item_t::retain</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>MQTT retain flag </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00081\">81</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a16fd8eb5680730758fbb7d4b22bf94d8\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a16fd8eb5680730758fbb7d4b22bf94d8\">&#9670;&nbsp;</a></span>topic</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char mqtt_queue_item_t::topic[<a class=\"el\" href=\"GwOutput__mqtt_8h.html#a77fff82f7baddba1fab736746b21bcd9\">MAX_MQTT_TOPIC_LEN</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Message topic </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00078\">78</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>examples/EnigmaIOTGatewayMQTT/<a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structmqttgw__config__t-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mqttgw_config_t Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a></td><td class=\"entry\"><a class=\"el\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqtt_port</a></td><td class=\"entry\"><a class=\"el\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a></td><td class=\"entry\"><a class=\"el\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqtt_user</a></td><td class=\"entry\"><a class=\"el\" href=\"structmqttgw__config__t.html\">mqttgw_config_t</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structmqttgw__config__t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: mqttgw_config_t Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"structmqttgw__config__t-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">mqttgw_config_t Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a0991f261ed379635918b3e09ee6f9326\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmqttgw__config__t.html#a0991f261ed379635918b3e09ee6f9326\">mqtt_server</a> [41]</td></tr>\n<tr class=\"separator:a0991f261ed379635918b3e09ee6f9326\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a5a61979dca0bcdab6b0ac8975ed002cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmqttgw__config__t.html#a5a61979dca0bcdab6b0ac8975ed002cd\">mqtt_port</a> = 1883</td></tr>\n<tr class=\"separator:a5a61979dca0bcdab6b0ac8975ed002cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7739560775997dbbdb6ed76d37b6dbfe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmqttgw__config__t.html#a7739560775997dbbdb6ed76d37b6dbfe\">mqtt_user</a> [21]</td></tr>\n<tr class=\"separator:a7739560775997dbbdb6ed76d37b6dbfe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab992a4e4c889751714b8f27fd11fff31\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmqttgw__config__t.html#ab992a4e4c889751714b8f27fd11fff31\">mqtt_pass</a> [41]</td></tr>\n<tr class=\"separator:ab992a4e4c889751714b8f27fd11fff31\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00063\">63</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"ab992a4e4c889751714b8f27fd11fff31\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ab992a4e4c889751714b8f27fd11fff31\">&#9670;&nbsp;</a></span>mqtt_pass</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char mqttgw_config_t::mqtt_pass[41]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>MQTT broker user password </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00071\">71</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a5a61979dca0bcdab6b0ac8975ed002cd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a5a61979dca0bcdab6b0ac8975ed002cd\">&#9670;&nbsp;</a></span>mqtt_port</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int mqttgw_config_t::mqtt_port = 1883</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>MQTT broker TCP port </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00068\">68</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0991f261ed379635918b3e09ee6f9326\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0991f261ed379635918b3e09ee6f9326\">&#9670;&nbsp;</a></span>mqtt_server</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char mqttgw_config_t::mqtt_server[41]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>MQTT broker address </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00064\">64</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7739560775997dbbdb6ed76d37b6dbfe\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7739560775997dbbdb6ed76d37b6dbfe\">&#9670;&nbsp;</a></span>mqtt_user</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char mqttgw_config_t::mqtt_user[21]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>MQTT broker user name </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html#l00070\">70</a> of file <a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>examples/EnigmaIOTGatewayMQTT/<a class=\"el\" href=\"GwOutput__mqtt_8h_source.html\">GwOutput_mqtt.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structmsg__queue__item__t-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">msg_queue_item_t Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">addr</a></td><td class=\"entry\"><a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">data</a></td><td class=\"entry\"><a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">len</a></td><td class=\"entry\"><a class=\"el\" href=\"structmsg__queue__item__t.html\">msg_queue_item_t</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structmsg__queue__item__t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: msg_queue_item_t Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"structmsg__queue__item__t-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">msg_queue_item_t Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a745d5bdf98defbf82a2a6797ec8ddeb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmsg__queue__item__t.html#a745d5bdf98defbf82a2a6797ec8ddeb1\">addr</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]</td></tr>\n<tr class=\"separator:a745d5bdf98defbf82a2a6797ec8ddeb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a59b67289f8b6a8e69ae955f1bdfc459f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmsg__queue__item__t.html#a59b67289f8b6a8e69ae955f1bdfc459f\">data</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]</td></tr>\n<tr class=\"separator:a59b67289f8b6a8e69ae955f1bdfc459f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a62805793291f61bc8b07e2b432ec3e65\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structmsg__queue__item__t.html#a62805793291f61bc8b07e2b432ec3e65\">len</a></td></tr>\n<tr class=\"separator:a62805793291f61bc8b07e2b432ec3e65\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00110\">110</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a745d5bdf98defbf82a2a6797ec8ddeb1\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a745d5bdf98defbf82a2a6797ec8ddeb1\">&#9670;&nbsp;</a></span>addr</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t msg_queue_item_t::addr[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Message address </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00111\">111</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a59b67289f8b6a8e69ae955f1bdfc459f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a59b67289f8b6a8e69ae955f1bdfc459f\">&#9670;&nbsp;</a></span>data</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t msg_queue_item_t::data[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9dbccd523bb0ed9a3266bc8c448f4432\">MAX_MESSAGE_LENGTH</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Message buffer </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00112\">112</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a62805793291f61bc8b07e2b432ec3e65\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a62805793291f61bc8b07e2b432ec3e65\">&#9670;&nbsp;</a></span>len</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t msg_queue_item_t::len</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Message length </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html#l00113\">113</a> of file <a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>src/<a class=\"el\" href=\"EnigmaIOTGateway_8h_source.html\">EnigmaIOTGateway.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structnode__instance-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">node_instance Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"structnode__instance.html\">node_instance</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">key</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f\">keyValid</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96\">keyValidFrom</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#aee6b3fdf81d44af5053d138136d0f7f5\">lastControlCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#a6ac60e31e921d2e101c86584eb5a5489\">lastDownlinkMsgCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91\">lastMessageCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#a7eadabd847f82e2383dd440fd3cddc37\">lastMessageTime</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">mac</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f\">nodeId</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#ad979924ffe46421c554052889ee590fb\">nodeName</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#adc14b97d211609ff286c2edc4bcbe061\">sleepyNode</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html#a784768cbda2285978d85c6dd17c01158\">status</a></td><td class=\"entry\"><a class=\"el\" href=\"structnode__instance.html\">node_instance</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structnode__instance.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: node_instance Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"structnode__instance-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">node_instance Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Struct that define node fields. Used for long term storage needs.  \n <a href=\"structnode__instance.html#details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:ae2c2a14ed812dd9e1886a9607fdb08c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">mac</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]</td></tr>\n<tr class=\"memdesc:ae2c2a14ed812dd9e1886a9607fdb08c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address.  <a href=\"structnode__instance.html#ae2c2a14ed812dd9e1886a9607fdb08c6\">More...</a><br /></td></tr>\n<tr class=\"separator:ae2c2a14ed812dd9e1886a9607fdb08c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1033bf3bedf4c20a40176e4dd458a58f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f\">nodeId</a></td></tr>\n<tr class=\"memdesc:a1033bf3bedf4c20a40176e4dd458a58f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identifier asigned by gateway.  <a href=\"structnode__instance.html#a1033bf3bedf4c20a40176e4dd458a58f\">More...</a><br /></td></tr>\n<tr class=\"separator:a1033bf3bedf4c20a40176e4dd458a58f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6591d96da1e646fcbd846e61af3e5ef2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">key</a> [32]</td></tr>\n<tr class=\"memdesc:a6591d96da1e646fcbd846e61af3e5ef2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Shared key.  <a href=\"structnode__instance.html#a6591d96da1e646fcbd846e61af3e5ef2\">More...</a><br /></td></tr>\n<tr class=\"separator:a6591d96da1e646fcbd846e61af3e5ef2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6988622d76bd1d76a0d040d97b8d2c91\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91\">lastMessageCounter</a></td></tr>\n<tr class=\"memdesc:a6988622d76bd1d76a0d040d97b8d2c91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.  <a href=\"structnode__instance.html#a6988622d76bd1d76a0d040d97b8d2c91\">More...</a><br /></td></tr>\n<tr class=\"separator:a6988622d76bd1d76a0d040d97b8d2c91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aee6b3fdf81d44af5053d138136d0f7f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#aee6b3fdf81d44af5053d138136d0f7f5\">lastControlCounter</a></td></tr>\n<tr class=\"memdesc:aee6b3fdf81d44af5053d138136d0f7f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last control message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.  <a href=\"structnode__instance.html#aee6b3fdf81d44af5053d138136d0f7f5\">More...</a><br /></td></tr>\n<tr class=\"separator:aee6b3fdf81d44af5053d138136d0f7f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a6ac60e31e921d2e101c86584eb5a5489\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#a6ac60e31e921d2e101c86584eb5a5489\">lastDownlinkMsgCounter</a></td></tr>\n<tr class=\"memdesc:a6ac60e31e921d2e101c86584eb5a5489\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last downlink message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.  <a href=\"structnode__instance.html#a6ac60e31e921d2e101c86584eb5a5489\">More...</a><br /></td></tr>\n<tr class=\"separator:a6ac60e31e921d2e101c86584eb5a5489\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ae08b109bf88f4c3481509a99001f96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96\">keyValidFrom</a></td></tr>\n<tr class=\"memdesc:a0ae08b109bf88f4c3481509a99001f96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last time that <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> and Gateway agreed a key.  <a href=\"structnode__instance.html#a0ae08b109bf88f4c3481509a99001f96\">More...</a><br /></td></tr>\n<tr class=\"separator:a0ae08b109bf88f4c3481509a99001f96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7eadabd847f82e2383dd440fd3cddc37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">time_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#a7eadabd847f82e2383dd440fd3cddc37\">lastMessageTime</a></td></tr>\n<tr class=\"memdesc:a7eadabd847f82e2383dd440fd3cddc37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Last time a message was received by <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>.  <a href=\"structnode__instance.html#a7eadabd847f82e2383dd440fd3cddc37\">More...</a><br /></td></tr>\n<tr class=\"separator:a7eadabd847f82e2383dd440fd3cddc37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a784768cbda2285978d85c6dd17c01158\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#a784768cbda2285978d85c6dd17c01158\">status</a> = <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a></td></tr>\n<tr class=\"memdesc:a784768cbda2285978d85c6dd17c01158\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> state.  <a href=\"structnode__instance.html#a784768cbda2285978d85c6dd17c01158\">More...</a><br /></td></tr>\n<tr class=\"separator:a784768cbda2285978d85c6dd17c01158\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adf84aafdceb7da9d9e2d9d379e2dba8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f\">keyValid</a> = false</td></tr>\n<tr class=\"memdesc:adf84aafdceb7da9d9e2d9d379e2dba8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> shared key valid.  <a href=\"structnode__instance.html#adf84aafdceb7da9d9e2d9d379e2dba8f\">More...</a><br /></td></tr>\n<tr class=\"separator:adf84aafdceb7da9d9e2d9d379e2dba8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adc14b97d211609ff286c2edc4bcbe061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#adc14b97d211609ff286c2edc4bcbe061\">sleepyNode</a> = true</td></tr>\n<tr class=\"memdesc:adc14b97d211609ff286c2edc4bcbe061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> sleepy definition.  <a href=\"structnode__instance.html#adc14b97d211609ff286c2edc4bcbe061\">More...</a><br /></td></tr>\n<tr class=\"separator:adc14b97d211609ff286c2edc4bcbe061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ad979924ffe46421c554052889ee590fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structnode__instance.html#ad979924ffe46421c554052889ee590fb\">nodeName</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>]</td></tr>\n<tr class=\"memdesc:ad979924ffe46421c554052889ee590fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name. Use as a human friendly name to avoid use of numeric address.  <a href=\"structnode__instance.html#ad979924ffe46421c554052889ee590fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ad979924ffe46421c554052889ee590fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Struct that define node fields. Used for long term storage needs. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00089\">89</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a6591d96da1e646fcbd846e61af3e5ef2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6591d96da1e646fcbd846e61af3e5ef2\">&#9670;&nbsp;</a></span>key</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t node_instance::key[32]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Shared key. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00092\">92</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"adf84aafdceb7da9d9e2d9d379e2dba8f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adf84aafdceb7da9d9e2d9d379e2dba8f\">&#9670;&nbsp;</a></span>keyValid</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool node_instance::keyValid = false</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> shared key valid. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00099\">99</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0ae08b109bf88f4c3481509a99001f96\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0ae08b109bf88f4c3481509a99001f96\">&#9670;&nbsp;</a></span>keyValidFrom</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t node_instance::keyValidFrom</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Last time that <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> and Gateway agreed a key. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00096\">96</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aee6b3fdf81d44af5053d138136d0f7f5\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aee6b3fdf81d44af5053d138136d0f7f5\">&#9670;&nbsp;</a></span>lastControlCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t node_instance::lastControlCounter</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Last control message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00094\">94</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6ac60e31e921d2e101c86584eb5a5489\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6ac60e31e921d2e101c86584eb5a5489\">&#9670;&nbsp;</a></span>lastDownlinkMsgCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t node_instance::lastDownlinkMsgCounter</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Last downlink message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00095\">95</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a6988622d76bd1d76a0d040d97b8d2c91\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a6988622d76bd1d76a0d040d97b8d2c91\">&#9670;&nbsp;</a></span>lastMessageCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t node_instance::lastMessageCounter</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Last message counter state for specific <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00093\">93</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7eadabd847f82e2383dd440fd3cddc37\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7eadabd847f82e2383dd440fd3cddc37\">&#9670;&nbsp;</a></span>lastMessageTime</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">time_t node_instance::lastMessageTime</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Last time a message was received by <a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a>. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00097\">97</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae2c2a14ed812dd9e1886a9607fdb08c6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae2c2a14ed812dd9e1886a9607fdb08c6\">&#9670;&nbsp;</a></span>mac</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t node_instance::mac[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> address. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00090\">90</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1033bf3bedf4c20a40176e4dd458a58f\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1033bf3bedf4c20a40176e4dd458a58f\">&#9670;&nbsp;</a></span>nodeId</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t node_instance::nodeId</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identifier asigned by gateway. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00091\">91</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ad979924ffe46421c554052889ee590fb\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ad979924ffe46421c554052889ee590fb\">&#9670;&nbsp;</a></span>nodeName</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char node_instance::nodeName[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name. Use as a human friendly name to avoid use of numeric address. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00101\">101</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"adc14b97d211609ff286c2edc4bcbe061\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#adc14b97d211609ff286c2edc4bcbe061\">&#9670;&nbsp;</a></span>sleepyNode</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool node_instance::sleepyNode = true</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> sleepy definition. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00100\">100</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a784768cbda2285978d85c6dd17c01158\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a784768cbda2285978d85c6dd17c01158\">&#9670;&nbsp;</a></span>status</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> node_instance::status = <a class=\"el\" href=\"NodeList_8h.html#a8dd9280b6a6e53e65414115f47b0df6aa4604ee350e74a53cf89697c7513d939b\">UNREGISTERED</a></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> state. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"NodeList_8h_source.html#l00098\">98</a> of file <a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>src/<a class=\"el\" href=\"NodeList_8h_source.html\">NodeList.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structrtcmem__data__t-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">rtcmem_data_t Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e\">broadcastKey</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">broadcastKeyRequested</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67\">broadcastKeyValid</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">channel</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">commErrors</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">crc32</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">lastControlCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">lastDownlinkMsgCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">lastMessageCounter</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">networkName</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">nodeId</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">nodeKey</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">nodeKeyValid</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">nodeRegisterStatus</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b\">rssi</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">sleepy</a></td><td class=\"entry\"><a class=\"el\" href=\"structrtcmem__data__t.html\">rtcmem_data_t</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structrtcmem__data__t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: rtcmem_data_t Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"structrtcmem__data__t-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">rtcmem_data_t Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Context data to be stored con persistent storage to be used after wake from sleep mode.  \n <a href=\"structrtcmem__data__t.html#details\">More...</a></p>\n\n<p><code>#include &lt;<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a22c20e35a06410f1060c11ef669ab96a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a22c20e35a06410f1060c11ef669ab96a\">crc32</a></td></tr>\n<tr class=\"separator:a22c20e35a06410f1060c11ef669ab96a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a51e4759aa03af09b8a614efa1b6b5cb2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a51e4759aa03af09b8a614efa1b6b5cb2\">nodeKey</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td></tr>\n<tr class=\"separator:a51e4759aa03af09b8a614efa1b6b5cb2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af9e7c0a7f49a26a8ad8cbba8ad4a8481\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">nodeId</a></td></tr>\n<tr class=\"separator:af9e7c0a7f49a26a8ad8cbba8ad4a8481\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aceff31e0cac1b5d0ca7895e8379c7fd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#aceff31e0cac1b5d0ca7895e8379c7fd4\">channel</a></td></tr>\n<tr class=\"separator:aceff31e0cac1b5d0ca7895e8379c7fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a0ba442d3c51787bb5b9f1a8be7107517\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a0ba442d3c51787bb5b9f1a8be7107517\">gateway</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]</td></tr>\n<tr class=\"separator:a0ba442d3c51787bb5b9f1a8be7107517\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a13270bdeee8b5e7569609fcc9045a27b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a13270bdeee8b5e7569609fcc9045a27b\">rssi</a></td></tr>\n<tr class=\"separator:a13270bdeee8b5e7569609fcc9045a27b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa0f566187583d3b10a7feb1a160897fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#aa0f566187583d3b10a7feb1a160897fd\">networkKey</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td></tr>\n<tr class=\"separator:aa0f566187583d3b10a7feb1a160897fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aba7d6bb1a99b92428585ea5823d2646d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#aba7d6bb1a99b92428585ea5823d2646d\">networkName</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a>]</td></tr>\n<tr class=\"separator:aba7d6bb1a99b92428585ea5823d2646d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a245a6d744786422d9939f5f14773475e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a245a6d744786422d9939f5f14773475e\">sleepy</a></td></tr>\n<tr class=\"separator:a245a6d744786422d9939f5f14773475e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a78e9abdac15a5ff7bfd409fc13fa6b54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint32_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a78e9abdac15a5ff7bfd409fc13fa6b54\">sleepTime</a></td></tr>\n<tr class=\"separator:a78e9abdac15a5ff7bfd409fc13fa6b54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:afa20feac19225b3ee433e7610493105d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">char&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#afa20feac19225b3ee433e7610493105d\">nodeName</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>+1]</td></tr>\n<tr class=\"separator:afa20feac19225b3ee433e7610493105d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a2abc91bcf729ee1eb44985df9d3086a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a2abc91bcf729ee1eb44985df9d3086a9\">commErrors</a></td></tr>\n<tr class=\"separator:a2abc91bcf729ee1eb44985df9d3086a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a892e3b670910fee23a107826e0ac4463\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a892e3b670910fee23a107826e0ac4463\">nodeKeyValid</a></td></tr>\n<tr class=\"separator:a892e3b670910fee23a107826e0ac4463\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abd99b41fe33ab80d442f95bb7fc5419e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#abd99b41fe33ab80d442f95bb7fc5419e\">broadcastKey</a> [<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td></tr>\n<tr class=\"separator:abd99b41fe33ab80d442f95bb7fc5419e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a3da4f4369bb769b62d742990cf7aab67\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a3da4f4369bb769b62d742990cf7aab67\">broadcastKeyValid</a></td></tr>\n<tr class=\"separator:a3da4f4369bb769b62d742990cf7aab67\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a7a907754d1a1cc7e4cd9225f1be82c63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a7a907754d1a1cc7e4cd9225f1be82c63\">broadcastKeyRequested</a></td></tr>\n<tr class=\"separator:a7a907754d1a1cc7e4cd9225f1be82c63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a50bb8229ba54273b8da7f1a012b72496\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a50bb8229ba54273b8da7f1a012b72496\">nodeRegisterStatus</a></td></tr>\n<tr class=\"separator:a50bb8229ba54273b8da7f1a012b72496\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ae441a9d80bb39bdc39aee158a5d9f114\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#ae441a9d80bb39bdc39aee158a5d9f114\">lastMessageCounter</a></td></tr>\n<tr class=\"separator:ae441a9d80bb39bdc39aee158a5d9f114\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af5a1e79dde5802d9f3b10583dd9eaa78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#af5a1e79dde5802d9f3b10583dd9eaa78\">lastControlCounter</a></td></tr>\n<tr class=\"separator:af5a1e79dde5802d9f3b10583dd9eaa78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a1e12d39c7745876a5391182975e32a8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint16_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structrtcmem__data__t.html#a1e12d39c7745876a5391182975e32a8d\">lastDownlinkMsgCounter</a></td></tr>\n<tr class=\"separator:a1e12d39c7745876a5391182975e32a8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Context data to be stored con persistent storage to be used after wake from sleep mode. </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00089\">89</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"abd99b41fe33ab80d442f95bb7fc5419e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#abd99b41fe33ab80d442f95bb7fc5419e\">&#9670;&nbsp;</a></span>broadcastKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t rtcmem_data_t::broadcastKey[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Key to encrypt broadcast messages </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00104\">104</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a7a907754d1a1cc7e4cd9225f1be82c63\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a7a907754d1a1cc7e4cd9225f1be82c63\">&#9670;&nbsp;</a></span>broadcastKeyRequested</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool rtcmem_data_t::broadcastKeyRequested</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>true if broadcast key has been requested to gateway </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00106\">106</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a3da4f4369bb769b62d742990cf7aab67\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a3da4f4369bb769b62d742990cf7aab67\">&#9670;&nbsp;</a></span>broadcastKeyValid</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool rtcmem_data_t::broadcastKeyValid</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>true if broadcast key has been received from gateway </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00105\">105</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aceff31e0cac1b5d0ca7895e8379c7fd4\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aceff31e0cac1b5d0ca7895e8379c7fd4\">&#9670;&nbsp;</a></span>channel</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t rtcmem_data_t::channel</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>WiFi channel used on ESP-NOW communication </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00093\">93</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a2abc91bcf729ee1eb44985df9d3086a9\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a2abc91bcf729ee1eb44985df9d3086a9\">&#9670;&nbsp;</a></span>commErrors</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t rtcmem_data_t::commErrors</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>number of non acknowledged packets. May mean that gateway is not available or its channel has changed. This is used to retrigger Gateway scan </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00101\">101</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a22c20e35a06410f1060c11ef669ab96a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a22c20e35a06410f1060c11ef669ab96a\">&#9670;&nbsp;</a></span>crc32</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint32_t rtcmem_data_t::crc32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>CRC to check RTC data integrity </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00090\">90</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a0ba442d3c51787bb5b9f1a8be7107517\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a0ba442d3c51787bb5b9f1a8be7107517\">&#9670;&nbsp;</a></span>gateway</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t rtcmem_data_t::gateway[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a479714978e5c2a44dce41ae3be800ffd\">ENIGMAIOT_ADDR_LEN</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Gateway address </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00094\">94</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af5a1e79dde5802d9f3b10583dd9eaa78\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af5a1e79dde5802d9f3b10583dd9eaa78\">&#9670;&nbsp;</a></span>lastControlCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t rtcmem_data_t::lastControlCounter</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Control message last counter </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00109\">109</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a1e12d39c7745876a5391182975e32a8d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a1e12d39c7745876a5391182975e32a8d\">&#9670;&nbsp;</a></span>lastDownlinkMsgCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t rtcmem_data_t::lastDownlinkMsgCounter</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Downlink message last counter </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00110\">110</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"ae441a9d80bb39bdc39aee158a5d9f114\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#ae441a9d80bb39bdc39aee158a5d9f114\">&#9670;&nbsp;</a></span>lastMessageCounter</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t rtcmem_data_t::lastMessageCounter</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> last message counter </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00108\">108</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aa0f566187583d3b10a7feb1a160897fd\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa0f566187583d3b10a7feb1a160897fd\">&#9670;&nbsp;</a></span>networkKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t rtcmem_data_t::networkKey[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Network key to protect key agreement </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00096\">96</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aba7d6bb1a99b92428585ea5823d2646d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aba7d6bb1a99b92428585ea5823d2646d\">&#9670;&nbsp;</a></span>networkName</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char rtcmem_data_t::networkName[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a9865adf18595ebc6eb73154e6267380e\">NETWORK_NAME_LENGTH</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Network name. Used to search gateway peer </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00097\">97</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"af9e7c0a7f49a26a8ad8cbba8ad4a8481\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#af9e7c0a7f49a26a8ad8cbba8ad4a8481\">&#9670;&nbsp;</a></span>nodeId</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint16_t rtcmem_data_t::nodeId</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> identification </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00092\">92</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a51e4759aa03af09b8a614efa1b6b5cb2\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a51e4759aa03af09b8a614efa1b6b5cb2\">&#9670;&nbsp;</a></span>nodeKey</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t rtcmem_data_t::nodeKey[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a863ca9be67da8cdc5fb9447378021e07\">KEY_LENGTH</a>]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> shared key </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00091\">91</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a892e3b670910fee23a107826e0ac4463\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a892e3b670910fee23a107826e0ac4463\">&#9670;&nbsp;</a></span>nodeKeyValid</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool rtcmem_data_t::nodeKeyValid</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>true if key has been negotiated successfully </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00103\">103</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"afa20feac19225b3ee433e7610493105d\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#afa20feac19225b3ee433e7610493105d\">&#9670;&nbsp;</a></span>nodeName</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">char rtcmem_data_t::nodeName[<a class=\"el\" href=\"EnigmaIoTconfigAdvanced_8h.html#a025eed5564c31f411fc6950a5ecd4c40\">NODE_NAME_LENGTH</a>+1]</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> name. Use as a human friendly name to avoid use of numeric address </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00100\">100</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a50bb8229ba54273b8da7f1a012b72496\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a50bb8229ba54273b8da7f1a012b72496\">&#9670;&nbsp;</a></span>nodeRegisterStatus</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"NodeList_8h.html#a6d12566cf69b6429f5cce300ab1f39c9\">status_t</a> rtcmem_data_t::nodeRegisterStatus</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p><a class=\"el\" href=\"classNode.html\" title=\"Class definition for a single sensor Node.\">Node</a> registration status </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00107\">107</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a13270bdeee8b5e7569609fcc9045a27b\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a13270bdeee8b5e7569609fcc9045a27b\">&#9670;&nbsp;</a></span>rssi</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int8_t rtcmem_data_t::rssi</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Gateway signal strength </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00095\">95</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a78e9abdac15a5ff7bfd409fc13fa6b54\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a78e9abdac15a5ff7bfd409fc13fa6b54\">&#9670;&nbsp;</a></span>sleepTime</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint32_t rtcmem_data_t::sleepTime</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Time to sleep between sensor data delivery </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00099\">99</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a245a6d744786422d9939f5f14773475e\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a245a6d744786422d9939f5f14773475e\">&#9670;&nbsp;</a></span>sleepy</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool rtcmem_data_t::sleepy</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<p>Sleepy node </p>\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html#l00098\">98</a> of file <a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>src/<a class=\"el\" href=\"EnigmaIOTNode_8h_source.html\">EnigmaIOTNode.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structsmartSwitchControllerHw__t-members.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: Member List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">smartSwitchControllerHw_t Member List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>This is the complete list of members for <a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a>, including all inherited members.</p>\n<table class=\"directory\">\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a460a8b71cd14d353299b85f46a9cf9f6\">bootStatus</a></td><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a52575acecb3433d8a42b5eae1d036484\">buttonPin</a></td><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a311c8e216f6f9b9f492a4bf6758edf80\">linked</a></td><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a4655115d731c63e4f4e98f3b2cf0f743\">ON_STATE</a></td><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a></td><td class=\"entry\"></td></tr>\n  <tr class=\"even\"><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a383953b4e6d9f3a294ed0cc56da0064a\">relayPin</a></td><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a></td><td class=\"entry\"></td></tr>\n  <tr><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#aebd780051c191b829135d424b0b504a3\">relayStatus</a></td><td class=\"entry\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html\">smartSwitchControllerHw_t</a></td><td class=\"entry\"></td></tr>\n</table></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/structsmartSwitchControllerHw__t.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: smartSwitchControllerHw_t Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Public Attributes</a> &#124;\n<a href=\"structsmartSwitchControllerHw__t-members.html\">List of all members</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">smartSwitchControllerHw_t Struct Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><code>#include &lt;<a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>&gt;</code></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"pub-attribs\"></a>\nPublic Attributes</h2></td></tr>\n<tr class=\"memitem:a383953b4e6d9f3a294ed0cc56da0064a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a383953b4e6d9f3a294ed0cc56da0064a\">relayPin</a></td></tr>\n<tr class=\"separator:a383953b4e6d9f3a294ed0cc56da0064a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aebd780051c191b829135d424b0b504a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#aebd780051c191b829135d424b0b504a3\">relayStatus</a></td></tr>\n<tr class=\"separator:aebd780051c191b829135d424b0b504a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a52575acecb3433d8a42b5eae1d036484\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">uint8_t&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a52575acecb3433d8a42b5eae1d036484\">buttonPin</a></td></tr>\n<tr class=\"separator:a52575acecb3433d8a42b5eae1d036484\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a311c8e216f6f9b9f492a4bf6758edf80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a311c8e216f6f9b9f492a4bf6758edf80\">linked</a></td></tr>\n<tr class=\"separator:a311c8e216f6f9b9f492a4bf6758edf80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a460a8b71cd14d353299b85f46a9cf9f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">bootRelayStatus_t</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a460a8b71cd14d353299b85f46a9cf9f6\">bootStatus</a></td></tr>\n<tr class=\"separator:a460a8b71cd14d353299b85f46a9cf9f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4655115d731c63e4f4e98f3b2cf0f743\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structsmartSwitchControllerHw__t.html#a4655115d731c63e4f4e98f3b2cf0f743\">ON_STATE</a></td></tr>\n<tr class=\"separator:a4655115d731c63e4f4e98f3b2cf0f743\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\">\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00041\">41</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n</div><h2 class=\"groupheader\">Member Data Documentation</h2>\n<a id=\"a460a8b71cd14d353299b85f46a9cf9f6\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a460a8b71cd14d353299b85f46a9cf9f6\">&#9670;&nbsp;</a></span>bootStatus</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"SmartSwitchController_8h.html#a53ec8322ae36a86ecab4a1cf69b5064a\">bootRelayStatus_t</a> smartSwitchControllerHw_t::bootStatus</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00046\">46</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a52575acecb3433d8a42b5eae1d036484\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a52575acecb3433d8a42b5eae1d036484\">&#9670;&nbsp;</a></span>buttonPin</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">uint8_t smartSwitchControllerHw_t::buttonPin</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00044\">44</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a311c8e216f6f9b9f492a4bf6758edf80\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a311c8e216f6f9b9f492a4bf6758edf80\">&#9670;&nbsp;</a></span>linked</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool smartSwitchControllerHw_t::linked</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00045\">45</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a4655115d731c63e4f4e98f3b2cf0f743\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a4655115d731c63e4f4e98f3b2cf0f743\">&#9670;&nbsp;</a></span>ON_STATE</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int smartSwitchControllerHw_t::ON_STATE</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00047\">47</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"a383953b4e6d9f3a294ed0cc56da0064a\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a383953b4e6d9f3a294ed0cc56da0064a\">&#9670;&nbsp;</a></span>relayPin</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int smartSwitchControllerHw_t::relayPin</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00042\">42</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<a id=\"aebd780051c191b829135d424b0b504a3\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aebd780051c191b829135d424b0b504a3\">&#9670;&nbsp;</a></span>relayStatus</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">bool smartSwitchControllerHw_t::relayStatus</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"SmartSwitchController_8h_source.html#l00043\">43</a> of file <a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a>.</p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li>examples/EnigmaIOT-SmartSwitch-Controller/<a class=\"el\" href=\"SmartSwitchController_8h_source.html\">SmartSwitchController.h</a></li>\n</ul>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/tabs.css",
    "content": ".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}}"
  },
  {
    "path": "docs/html/technical-background_8md.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: docs/technical-background.md File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">docs/technical-background.md File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/timeManager_8cpp.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/timeManager.cpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">timeManager.cpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Clock synchronisation calculations.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &quot;<a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>&quot;</code><br />\n<code>#include &quot;<a class=\"el\" href=\"EnigmaIOTdebug_8h_source.html\">EnigmaIOTdebug.h</a>&quot;</code><br />\n</div>\n<p><a href=\"timeManager_8cpp_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:aa2f15646607c9908039f67741ccbab58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a></td></tr>\n<tr class=\"separator:aa2f15646607c9908039f67741ccbab58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Clock synchronisation calculations. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"timeManager_8cpp_source.html\">timeManager.cpp</a>.</p>\n</div><h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"aa2f15646607c9908039f67741ccbab58\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa2f15646607c9908039f67741ccbab58\">&#9670;&nbsp;</a></span>TimeManager</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a> TimeManager</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8cpp_source.html#l00065\">65</a> of file <a class=\"el\" href=\"timeManager_8cpp_source.html\">timeManager.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/timeManager_8cpp_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/timeManager.cpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">timeManager.cpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"timeManager_8cpp.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"timeManager_8h.html\">timeManager.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">   12</a></span>&#160;int64_t <a class=\"code\" href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">TimeManagerClass::clock</a> () {</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;    timeval currentime;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;    gettimeofday (&amp;currentime, NULL);</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;    int64_t clk = currentime.tv_sec;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;    clk *= 1000000L;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;    clk += currentime.tv_usec;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;    <span class=\"comment\">// DEBUG_DBG (&quot;Clock: %lld&quot;, clk/1000L);</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;    <span class=\"keywordflow\">return</span> clk/1000L;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160; </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">   23</a></span>&#160;int64_t <a class=\"code\" href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">TimeManagerClass::clock_us</a> () {</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;    timeval currentime;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160; </div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;    gettimeofday (&amp;currentime, NULL);</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    int64_t clk = currentime.tv_sec;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;    clk *= 1000000L;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;    clk += currentime.tv_usec;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;    <span class=\"comment\">// DEBUG_DBG (&quot;Clock: %lld&quot;, clk);</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;    <span class=\"keywordflow\">return</span> clk;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">   34</a></span>&#160;int64_t <a class=\"code\" href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">TimeManagerClass::adjustTime</a> (int64_t t1r, int64_t t2r, int64_t t3r, int64_t t4r) {</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;    int64_t t1 = t1r;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;    int64_t t2 = t2r;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;    int64_t t3 = t3r;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;    int64_t t4 = t4r;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;    timeval currenttime;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;    int64_t currenttime_us;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;    timeval newtime;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;    int64_t newtime_us;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160; </div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;T1: %lld, T2: %lld, T3: %lld, T4: %lld&quot;</span>, t1, t2, t3, t4);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;    <a class=\"code\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">offset</a> = ((t2 - t1) + (t3 - t4)) / 2L;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;New offset: %lld&quot;</span>, <a class=\"code\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">offset</a>);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;    <a class=\"code\" href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">roundTripDelay</a> = (t4 - t1) - (t3 - t2);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;    DEBUG_DBG (<span class=\"stringliteral\">&quot;Round trip delay: %lld&quot;</span>, <a class=\"code\" href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">roundTripDelay</a>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;    gettimeofday (&amp;currenttime, NULL);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;    currenttime_us = (int64_t)currenttime.tv_sec * 1000000LL + (int64_t)currenttime.tv_usec;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;    newtime_us = currenttime_us + <a class=\"code\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">offset</a>;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    newtime.tv_sec = newtime_us / 1000000LL;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;    newtime.tv_usec = newtime_us - ((int64_t)(newtime.tv_sec) * 1000000LL);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;    settimeofday (&amp;newtime, NULL); <span class=\"comment\">// hard adjustment</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160; </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;    <a class=\"code\" href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">timeIsAdjusted</a> = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160; </div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;    <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">offset</a>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160; </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160; </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160; </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"timeManager_8h.html#aa2f15646607c9908039f67741ccbab58\">   65</a></span>&#160;<a class=\"code\" href=\"classTimeManagerClass.html\">TimeManagerClass</a> <a class=\"code\" href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a>;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"atimeManager_8h_html\"><div class=\"ttname\"><a href=\"timeManager_8h.html\">timeManager.h</a></div><div class=\"ttdoc\">Clock synchronisation calculations.</div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a52790ace85f8a18dcbd7fceb5ab49af0\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">TimeManagerClass::clock_us</a></div><div class=\"ttdeci\">int64_t clock_us()</div><div class=\"ttdoc\">Gets local clock.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00023\">timeManager.cpp:23</a></div></div>\n<div class=\"ttc\" id=\"atimeManager_8cpp_html_aa2f15646607c9908039f67741ccbab58\"><div class=\"ttname\"><a href=\"timeManager_8cpp.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a></div><div class=\"ttdeci\">TimeManagerClass TimeManager</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00065\">timeManager.cpp:65</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a339f610c808ea5b39ccc9ca462269cf2\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">TimeManagerClass::adjustTime</a></div><div class=\"ttdeci\">int64_t adjustTime(int64_t t1r, int64_t t2r, int64_t t3r, int64_t t4r)</div><div class=\"ttdoc\">Gets delay between Gateway time and local clock and adjust local clock accordingly....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00034\">timeManager.cpp:34</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_addb0c670f91aed75698ff9b70048ed71\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">TimeManagerClass::roundTripDelay</a></div><div class=\"ttdeci\">int64_t roundTripDelay</div><div class=\"ttdoc\">Propagation delay between Node and Gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00019\">timeManager.h:19</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a1e2a434bb89a84d777f40b03d499ba6f\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">TimeManagerClass::timeIsAdjusted</a></div><div class=\"ttdeci\">bool timeIsAdjusted</div><div class=\"ttdoc\">Indicates if time has been synchronized.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00017\">timeManager.h:17</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a85889f0610371fd502b47aae07d35506\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">TimeManagerClass::clock</a></div><div class=\"ttdeci\">int64_t clock()</div><div class=\"ttdoc\">Gets local clock.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00012\">timeManager.cpp:12</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html\">TimeManagerClass</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00015\">timeManager.h:15</a></div></div>\n<div class=\"ttc\" id=\"aEnigmaIOTdebug_8h_html\"><div class=\"ttname\"><a href=\"EnigmaIOTdebug_8h.html\">EnigmaIOTdebug.h</a></div><div class=\"ttdoc\">Auxiliary functions for debugging over Serial.</div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a76446d0df445c23ecb583b3d50fb3f95\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">TimeManagerClass::offset</a></div><div class=\"ttdeci\">int64_t offset</div><div class=\"ttdoc\">Offet between node millis() and gateway time.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00018\">timeManager.h:18</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/timeManager_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/timeManager.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Classes</a> &#124;\n<a href=\"#var-members\">Variables</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">timeManager.h File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Clock synchronisation calculations.  \n<a href=\"#details\">More...</a></p>\n<div class=\"textblock\"><code>#include &lt;Arduino.h&gt;</code><br />\n<code>#include &quot;sys/time.h&quot;</code><br />\n</div>\n<p><a href=\"timeManager_8h_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"nested-classes\"></a>\nClasses</h2></td></tr>\n<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"var-members\"></a>\nVariables</h2></td></tr>\n<tr class=\"memitem:aa2f15646607c9908039f67741ccbab58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"timeManager_8h.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a></td></tr>\n<tr class=\"separator:aa2f15646607c9908039f67741ccbab58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p>Clock synchronisation calculations. </p>\n<dl class=\"section version\"><dt>Version</dt><dd>0.9.8 </dd></dl>\n<dl class=\"section date\"><dt>Date</dt><dd>15/07/2021 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>German Martin </dd></dl>\n\n<p class=\"definition\">Definition in file <a class=\"el\" href=\"timeManager_8h_source.html\">timeManager.h</a>.</p>\n</div><h2 class=\"groupheader\">Variable Documentation</h2>\n<a id=\"aa2f15646607c9908039f67741ccbab58\"></a>\n<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#aa2f15646607c9908039f67741ccbab58\">&#9670;&nbsp;</a></span>TimeManager</h2>\n\n<div class=\"memitem\">\n<div class=\"memproto\">\n<table class=\"mlabels\">\n  <tr>\n  <td class=\"mlabels-left\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"classTimeManagerClass.html\">TimeManagerClass</a> TimeManager</td>\n        </tr>\n      </table>\n  </td>\n  <td class=\"mlabels-right\">\n<span class=\"mlabels\"><span class=\"mlabel\">extern</span></span>  </td>\n  </tr>\n</table>\n</div><div class=\"memdoc\">\n\n<p class=\"definition\">Definition at line <a class=\"el\" href=\"timeManager_8cpp_source.html#l00065\">65</a> of file <a class=\"el\" href=\"timeManager_8cpp_source.html\">timeManager.cpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/html/timeManager_8h_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.20\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>EnigmaIOT: src/timeManager.h Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo text inside.svg\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">EnigmaIOT\n   &#160;<span id=\"projectnumber\">0.9.8</span>\n   </div>\n   <div id=\"projectbrief\">Secure sensor and gateway platform based on ESP8266 and ESP32</div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.20 -->\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n/* @license-end */\n</script>\n<script type=\"text/javascript\" src=\"menudata.js\"></script>\n<script type=\"text/javascript\" src=\"menu.js\"></script>\n<script type=\"text/javascript\">\n/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n$(function() {\n  initMenu('',true,false,'search.php','Search');\n  $(document).ready(function() { init_search(); });\n});\n/* @license-end */</script>\n<div id=\"main-nav\"></div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\">src</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">timeManager.h</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"timeManager_8h.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160; </div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifndef _TIMEMANAGER_h</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define _TIMEMANAGER_h</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160; </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;Arduino.h&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;sys/time.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160; </div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html\">   15</a></span>&#160;<span class=\"keyword\">class </span><a class=\"code\" href=\"classTimeManagerClass.html\">TimeManagerClass</a> {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">   17</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">timeIsAdjusted</a> = <span class=\"keyword\">false</span>; </div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">   18</a></span>&#160;    int64_t <a class=\"code\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">offset</a> = 0; </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">   19</a></span>&#160;    int64_t <a class=\"code\" href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">roundTripDelay</a>; </div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160; </div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;    int64_t <a class=\"code\" href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">clock</a> ();</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;    </div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;    int64_t <a class=\"code\" href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">clock_us</a> ();</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160; </div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160; </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5\">   40</a></span>&#160;    time_t <a class=\"code\" href=\"classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5\">unixtime</a> () {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        uint64_t time_sec = <a class=\"code\" href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">clock</a> () / 1000000L;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keywordflow\">return</span> time_sec;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160; </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;    int64_t <a class=\"code\" href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">adjustTime</a> (int64_t t1r, int64_t t2r, int64_t t3r, int64_t t4r);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160; </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#ae188f14a7cf5c38c5ab09b0dc5460490\">   59</a></span>&#160;    int64_t <a class=\"code\" href=\"classTimeManagerClass.html#ae188f14a7cf5c38c5ab09b0dc5460490\">getOffset</a> () {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">offset</a>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160; </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615\">   67</a></span>&#160;    <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615\">isTimeAdjusted</a> () {</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">timeIsAdjusted</a>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160; </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a\">   75</a></span>&#160;    int64_t <a class=\"code\" href=\"classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a\">getDelay</a> () {</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">roundTripDelay</a>;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160; </div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8\">   82</a></span>&#160;    <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8\">reset</a> () {</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <a class=\"code\" href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">offset</a> = 0;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <a class=\"code\" href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">timeIsAdjusted</a> = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;    }</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;};</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160; </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"keyword\">extern</span> <a class=\"code\" href=\"classTimeManagerClass.html\">TimeManagerClass</a> <a class=\"code\" href=\"timeManager_8h.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a>;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160; </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160; </div>\n</div><!-- fragment --></div><!-- contents -->\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a52790ace85f8a18dcbd7fceb5ab49af0\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a52790ace85f8a18dcbd7fceb5ab49af0\">TimeManagerClass::clock_us</a></div><div class=\"ttdeci\">int64_t clock_us()</div><div class=\"ttdoc\">Gets local clock.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00023\">timeManager.cpp:23</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_ac51f1bac4386e3aeb8c2e4fc10577615\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#ac51f1bac4386e3aeb8c2e4fc10577615\">TimeManagerClass::isTimeAdjusted</a></div><div class=\"ttdeci\">bool isTimeAdjusted()</div><div class=\"ttdoc\">Gets synchronization status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00067\">timeManager.h:67</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a5509b838b2b813cc5b4bce9436c825b5\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a5509b838b2b813cc5b4bce9436c825b5\">TimeManagerClass::unixtime</a></div><div class=\"ttdeci\">time_t unixtime()</div><div class=\"ttdoc\">Gets local clock in seconds. It returns millis() / 1000 if not synchronized, local clock otherwise....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00040\">timeManager.h:40</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a339f610c808ea5b39ccc9ca462269cf2\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a339f610c808ea5b39ccc9ca462269cf2\">TimeManagerClass::adjustTime</a></div><div class=\"ttdeci\">int64_t adjustTime(int64_t t1r, int64_t t2r, int64_t t3r, int64_t t4r)</div><div class=\"ttdoc\">Gets delay between Gateway time and local clock and adjust local clock accordingly....</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00034\">timeManager.cpp:34</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_addb0c670f91aed75698ff9b70048ed71\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#addb0c670f91aed75698ff9b70048ed71\">TimeManagerClass::roundTripDelay</a></div><div class=\"ttdeci\">int64_t roundTripDelay</div><div class=\"ttdoc\">Propagation delay between Node and Gateway.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00019\">timeManager.h:19</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a195293f46d7c371ed61bbcdcf6d8340a\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a195293f46d7c371ed61bbcdcf6d8340a\">TimeManagerClass::getDelay</a></div><div class=\"ttdeci\">int64_t getDelay()</div><div class=\"ttdoc\">Gets propagation + processing delay between Node and Gateway in milliseconds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00075\">timeManager.h:75</a></div></div>\n<div class=\"ttc\" id=\"atimeManager_8h_html_aa2f15646607c9908039f67741ccbab58\"><div class=\"ttname\"><a href=\"timeManager_8h.html#aa2f15646607c9908039f67741ccbab58\">TimeManager</a></div><div class=\"ttdeci\">TimeManagerClass TimeManager</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00065\">timeManager.cpp:65</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a1e2a434bb89a84d777f40b03d499ba6f\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a1e2a434bb89a84d777f40b03d499ba6f\">TimeManagerClass::timeIsAdjusted</a></div><div class=\"ttdeci\">bool timeIsAdjusted</div><div class=\"ttdoc\">Indicates if time has been synchronized.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00017\">timeManager.h:17</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_ae188f14a7cf5c38c5ab09b0dc5460490\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#ae188f14a7cf5c38c5ab09b0dc5460490\">TimeManagerClass::getOffset</a></div><div class=\"ttdeci\">int64_t getOffset()</div><div class=\"ttdoc\">Gets current offset to calculate clock, in milliseconds.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00059\">timeManager.h:59</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a85889f0610371fd502b47aae07d35506\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a85889f0610371fd502b47aae07d35506\">TimeManagerClass::clock</a></div><div class=\"ttdeci\">int64_t clock()</div><div class=\"ttdoc\">Gets local clock.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8cpp_source.html#l00012\">timeManager.cpp:12</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html\">TimeManagerClass</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00015\">timeManager.h:15</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a76446d0df445c23ecb583b3d50fb3f95\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a76446d0df445c23ecb583b3d50fb3f95\">TimeManagerClass::offset</a></div><div class=\"ttdeci\">int64_t offset</div><div class=\"ttdoc\">Offet between node millis() and gateway time.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00018\">timeManager.h:18</a></div></div>\n<div class=\"ttc\" id=\"aclassTimeManagerClass_html_a06cedd303513fccb86207c7f8e09d1d8\"><div class=\"ttname\"><a href=\"classTimeManagerClass.html#a06cedd303513fccb86207c7f8e09d1d8\">TimeManagerClass::reset</a></div><div class=\"ttdeci\">void reset()</div><div class=\"ttdoc\">Resets clock synchronization and sets values to initial status.</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"timeManager_8h_source.html#l00082\">timeManager.h:82</a></div></div>\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by&#160;<a href=\"http://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.8.20\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "docs/index.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head><meta http-equiv=Refresh content=\"0;url=html/index.html\"></head></html>"
  },
  {
    "path": "docs/node-ota-update.md",
    "content": "## OTA Update\n\nMQTT Gateway example includes plain Arduino OTA mechanism. OTA is protected using network key selected during initial configuration.\n\nOn nodes, OTA updates are transferred using the same mechanism. Firmware is sent over MQTT using a [Python script](./EnigmaIoTUpdate/EnigmaIoTUpdate.py). Then gateway selects the appropriate node and send this binary data over ESP-NOW.\n\nAs ESP-NOW restricts **maximum payload to 250 bytes per message** firmware is splitted in chunks. Every chunk is **212 bytes** long, so that it fits together with message headers and is multiple of 4. This splitting work is done by `EnigmaIoTUpdate.py` script.\n\n### Using EnigmaIoTUpdate.py\n\nA requirement is to have installed [Python3](https://www.python.org/download/releases/3.0/) in the computer used to do the update.\n\nIn order to run the update, you need to install [`paho-mqtt`](https://pypi.org/project/paho-mqtt/) library. To do that you can follow instructions [here](https://pypi.org/project/paho-mqtt/#installation).\n\n```\n$python3 ./EnigmaIoTUpdate.py --help\n\nUsage: EnigmaIoTUpdate.py [options]\n\nOptions:\n  -h, --help            show this help message and exit\n  -f FILENAME, --file=FILENAME\n                        File to program into device\n  -d ADDRESS, --daddress=ADDRESS\n                        Node address or name\n  -t BASETOPIC, --topic=BASETOPIC\n                        Base topic for MQTT messages\n  -u MQTTUSER, --user=MQTTUSER\n                        MQTT server username\n  -P MQTTPASS, --password=MQTTPASS\n                        MQTT server user password\n  -S MQTTSERVER, --server=MQTTSERVER\n                        MQTT server address or name\n  -p MQTTPORT, --port=MQTTPORT\n                        MQTT server port\n  -s, --secure          Use secure TLS in MQTT connection. Normally you should\n                          use port 8883\n  -D, --speed\t\t\tSets formware delivery speed [fast | medium | slow]. The fastest\n                          the biggest chance to get troubles during update. Fast option\n                          normally works but medium is more resilient\n  --unsecure            Use secure plain TCP in MQTT connection. Normally you\n                          should use port 1883\n```\n\nAn example of this command could be like this:\n\n```\npython3 ./EnigmaIoTUpdate.py \\\n             -f EnigmaIOTsensor.bin \\\n             -d 11:22:33:44:55:66 \\\n             -t enigmaiot \\\n             -u \"mymqttbrokeruser\" \\\n             -P \"mymqttbrokerpassword\" \\\n             -S mysecure.mqtt.server \\\n             -p 8883 \\\n             -D medium \\\n             -s\n```\n\nNotice that using ESP-NOW, device address correspond to **MAC address** of your ESP8266 or ESP32 node.\n\nIt is very important to configure user and password on you MQTT broker. Besides, if it is going to be accessed from the Internet you should activate TLS encryption and a certificate.\n\n"
  },
  {
    "path": "docs/technical-background.md",
    "content": "## Design\n\n### System Design\n\nSystem functions are divided in three layers: application, link and physical layer.\n\n![Software Layers](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/system_layers.png)\n\n- **Application layer** is not controlled by EnigmaIoT protocol but main program. User may choose whatever data format or final destination of payload. A good option is to use CayenneLPP format but any other format or even raw data may be used. The only limit is the maximum packet length that, for ESP-NOW is around 200 bytes.\n\n- **Link layer** is the one that add privacy and security. It manages connection between nodes and gateway in a transparent way. It does key agreement and node registration and checks the correctness of data messages. In case of any error it automatically start a new registration process. On this layer, data packets are encrypted using calculated symmetric key.\n\n- **Physical layer** currently uses connectionless ESP-NOW. But a hardware abstraction layer has been designed so it is possible to develop interfaces for any other layer 1 technology like LoRa or nRF24F01 radios.\n\n### EnigmaIoT protocol\n\nThe named **EnigmaIoT protocol** is designed to use encrypted communication without the need to hardcode the key. It uses [Elliptic Curves Diffie Hellman](https://en.wikipedia.org/wiki/Elliptic-curve_Diffie–Hellman) algorithm to calculate a shared key.\n\nThe process starts with node announcing itself with a Client Hello message. It tells the gateway its intention to establish a new shared key. It sends public key to be used on gateway to calculate the shared key.\n\nGateway answers with Server Hello message that includes its public key for shared key calculation on node.\n\nOnce shared key is calculated, node send an encrypted message as Key Exchange Finished message. Poly1305 encryption tag is used to check message integrity.\n\nIf gateway validates tag correctly it answers with a Cipher Finished message.\n\nThis process is protected with a 32 byte shared **network key**, used for **authentication**. As in the first two messages shared key is not known yet, Client Hello and Server Hello messages are encrypted whit this network key. If network key is not the same on gateway and node this will lead to decryption errors and messages will be ignored.\n\nIn case of any error on node key negotiation gateway sends an Invalidate Key to reset to original status and forgets any calculated shared key for this node.\n\nWhen key is marked as valid node may start sending sensor data.\n\nOptionally, gateway can send data to node. As node may be sleeping between communications, downlink messages has to be sent just after uplink data. So, one downlink message is queued until node communicates. Node waits some milliseconds before sleep for downlink data.\n\nIf a new downlink message arrives, old scheduled data for that node, if any, is overwritten.\n\nIn case of nodes that do not sleep (like a mains powered relay), gateway can send downlink data in any moment. Sleepy node is signaled during node registration on a bit in Key Exchange Finished message. It is set to 1 to signal that node will sleep just after sending data.\n\nKey is forced to change every period. Gateway decides the moment to invalidate each node key. If so, it sends an invalidate key as downlink, after next data message communication. This key validity period is configurable on [EnigmaIoTconfig.h](https://github.com/gmag11/EnigmaIOT/blob/master/src/lib/EnigmaIoTconfig.h) file.\n\nAfter that node may start new key agreement sending a new Client Hello message.\n\nAll nodes and gateway are identified by its MAC address. No name is assigned so no configuration is needed on node. Function assignment has to be done at a higher level.\n\n## State diagram for nodes and Gateway\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/StateDiagram-Sensor.svg?sanitize=true\" alt=\"Sensor State Diagram\" width=\"800\"/>\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/StateDiagram-Gateway.svg?sanitize=true\" alt=\"Gateway State Diagram\" width=\"800\"/>\n\n## Message format specification\n\n### Client Hello message\n\n![Client Hello message format](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ClientHello.png)\n\nClient hello is sent by node to start registration procedure. It includes the public key to be used on Elliptic Curve Diffie Hellman (EDCH) algorithm to calculate the key. Initialization vector (IV) is used for encryption. There is a random 4 byte field reserved for future use.\n\nThis message is sent encrypted with network key.\n\n### Server Hello message\n\n![Server Hello message format](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ServerHello.png)\n\nAfter receiving and checking Client Hello message, gateway responds with a Server Hello message. It carries gateway's public key to let node calculate key using ECDH. There is a random 4 byte field reserved for future use. Gateway assigns node a NodeID. It is signaled as a 2 byte field.\n\nServer Hello message is sent encrypted with network key.\n\n### Node Data message\n\n![Node payload message format](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/SensorData.png)\n\nNode data is always encrypted using shared key and IV. Apart from payload this message includes node ID and a counter used by gateway to check lost or repeated messages from that node.\n\nTotal message length (without tag) is included on a 2 byte field.\n\n### Unencrypted Node Data message\n\n![Node unencrypted payload message format](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/UnencryptedSensorData.png)\n\nIn case that extreme performance is needed there is the possibility to send unencrypted data so processor spends a few milliseconds less. It is not recommended to do so unless you want to investigate crypto software performance. Use at your own data risk :D\n\nThis message also includes node ID and a counter used by gateway to check lost or repeated messages from that node.\n\n### Node control message (downlink)\n\n![Node control message format](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/SensorCommand-Downlink.png)\n\nGateway can send commands to an individual node in a similar way as sensor data is sent by nodes. For nodes that can be slept between consecutive data messages this commands are queued and sent just after a data message is received.\n\nOnly last message is queued. In case Gateway tries to send a new message, old one gets deleted and overridden by the new one.\n\nPossible values of first byte means:\n\n02:  SET command (unicast)\n\n82: SET command (broadcast)\n\n12: GET command (unicast)\n\n92: GET command (broadcast)\n\n### Control message\n\n##### Downlink Control Message\n\n![DL Control Command message format](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ControlComand-Downlink.png)\n\nBroadcast messages of this type start with `0x84`.\n\n##### Uplink Control Message\n\n![UL Control Command message format](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ControlComand-Uplink.png)\n\nGateway  and node can exchange internal control commands. These are used to set internal protocol parameters like sleep time. This type of messages are processed like normal downlink messages, but are not passed to higher level (user code) in Node.\n\nSome control messages, like OTA update messages, require that they are processed immediately. Hence, it is required that node is not in deep sleep mode. This can be controlled, for instance, using another control command to set sleep time to 0.\n\n### Clock synchronization\n\n##### Clock sync request\n\n![Clock sync request](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ClockSyncRequest.png)\n\n##### Clock sync response\n\n![Clock sync response](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/ClockSyncResponse.png)\n\nIn non sleepy nodes, it may be useful to send a message from time to time to let Gateway know that node is still active and let Node to check that is is still registered in Gateway.\n\nClock syncronization may be a very good feature if you need to coordinate actions on different nodes.\n\nEnigmaIOT combines these two features into one request and response. Nodes may send clock sync request every some time to ping gateway and get common clock updated. Clock synchronization uses a mechanism similar to the one used by [SNTP protocol](https://en.wikipedia.org/wiki/Network_Time_Protocol#:~:text=Simple%20Network%20Time%20Protocol%20).\n\n~~Notice that this is not world time sync but a numeric clock.~~\n\nSince version 0.9.2, if Gateway has its internal time synchronized using NTP it sends non sleepy nodes **current real date and time** in millisecond Unix format .\n\nThis feature may be disabled if needed.\n\n### Address to node name translation\n\n##### Set node name\n\n![Set Node Name](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/SetNodeName.png)\n\n##### Set node name result\n\n![Set Node Name result](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/SetNodeNameResult.png)\n\nIn order to make node messages more readable for humans, this implements a way to let Gateway to translate EnigmaIOT addresses to custom names (for instance, \"RoomBlindControl\"). This eases node replacement in case of failure.\n\nNode names can be up to 32 characters long and should avoid characters different of letters and numbers. **Characters #,+ and / are specially forbidden**.\n\nNode name is configured by user during first configuration in WiFi Web portal.\n\n### Invalidate Key message\n\n![Invalidate Key message format](https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/InvalidateKey.png)\n\nAfter every data message from nodes, gateway evaluates key integrity and validity. In case of any error decoding the packet gateways ignores data and reply with this message indicating the reason that caused error. Node must start a new registration procedure in order to send data again. After this new registration node resends the last data message.\n\nA gateway defines a key validity period after that a node key is marked as expired. In a message is received after that is processed normally but an Invalidate Key message indicating key expiration as reason. Node then starts a registration procedure but does not retry communication.\n\nInvalidate Key message is always sent unencrypted.\n\n## Protocol procedures\n\n### Normal node registration and node data exchange\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/NodeRegistration.svg?sanitize=true\" alt=\"Normal node registration message sequence\" width=\"400\"/>\n\n### Incomplete Registration\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/RegistrationIncomplete.svg?sanitize=true\" alt=\"Incomplete Registration message sequence\" width=\"400\"/>\n\n### Node Not Registered\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/NodeNotRegistered.svg?sanitize=true\" alt=\"Node Not Registered message sequence\" width=\"400\"/>\n\n### Key Expiration\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/KeyExpiration.svg?sanitize=true\" alt=\"KeyExpiration message sequence\" width=\"400\"/>\n\n### Node Registration Collision\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/NodeRegistrationCollision.svg?sanitize=true\" alt=\"Node Registration Collision message sequence\" width=\"600\"/>\n\n### Wrong Data Counter\n\n<img src=\"https://raw.githubusercontent.com/gmag11/EnigmaIOT/master/img/WrongCounter.svg?sanitize=true\" alt=\"Wrong Counter message sequence\" width=\"400\"/>\n\n## Hardware description\n\n### Gateway\n\nA gateway concentrates communication from all nodes, manages their registrations status, negotiate session key with them and outputs their messages to an output protocol.\n\n[EnigmaIOT MQTT Gateway](https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOTGatewayMQTT) is the implementation for a MQTT gateway.\n\nSince version 0.7.0 Gateway is a ESP32 or ESP8266 board with 4 MB of flash memory or more. ESP8266 gateways cannot use MQTT TLS encryption due to memory limitations.\n\nUse of ESP32 platform is recommended. ESP8266 EnigmaIOT gateway code is less tested.\n\nThanks to modular design, other output modules may be easily developed by implementing `GwOutput_generic.h`. Examples of this may be LoRaWAN output gateway, COAP gateway or any other network protocol that is needed. Even an offline SD data logger could be done.\n\nI've included a [Gateway with dummy output module](https://github.com/gmag11/EnigmaIOT/tree/master/examples/EnigmaIOTGatewayDummy) to show simple OutputGw module development.\n\nIn order to **configure** you need at least this data:\n\n- **SSID**: WiFi network to connect to\n- **Password**: WiFi pre shared key\n- **Network Name**: Name of the EnigmaIOT network. If you have several gateways it is convenient to set them to different network names. Gateway sets up an AP with this name to help nodes to find its address and WiFi channel.\n- **Network Key**: Encryption key to be used during node registration. It is used as Gateway AP pre shared key (not external WiFi). It must have from 8 to 32 characters long\n- **Channel**: Initial WiFi channel to communicate nodes and Gateway. This is not important if gateway is connected to your home WiFi as nodes and gateway will use same channel as you have configured into your router.\n\nUser code may add additional custom parameters.\n\n### Node\n\nA node is either a ESP8266 or ESP32 board with a number of sensors. A node may sleep between sensor readings, status is stored so that it may send data without reconnection.\n\nAny ESP8266 or ESP32 board with at least 1 MB of flash may be used.\n\nThere are several implementations in [examples](https://github.com/gmag11/EnigmaIOT/tree/master/examples):\n\n[EnigmaIOT Node](https://github.com/gmag11/EnigmaIOT/tree/master/examples/enigmaiot_node): Basic node with deep sleep function. Sensor data is mocked up in example and sent using CayenneLPP encoding, you only need to replace it with your sensor reading code. Expected duration with 2 AA type batteries is more than one year, but a low power booster/regulator should be used in a custom board.\n\n[Enigmaiot Node MsgPack](https://github.com/gmag11/EnigmaIOT/tree/master/examples/enigmaiot_node_msgpack): It has same functionality as the example above but uses JSON and MessagePack as Payload encoding.\n\n[EnigmaIOT Node NonSleepy](https://github.com/gmag11/EnigmaIOT/tree/master/examples/enigmaiot_node_nonsleepy): Same functionality as previous examples but this does not sleep. This may be useful for sensors or actuators which are connected to mains, like light switches or smart plugs.\n\n[EnigmaIOT LED Flasher](https://github.com/gmag11/EnigmaIOT/tree/master/examples/enigmaiot_led_flasher): On non sleepy nodes a common clock may be synchronized with gateway. This is an example of this. All nodes that include this firmware will flash their built in LED synchronously after successful registration. \n\nFor **configuration**, node needs this data:\n\n- **SSID**: corresponds to network name configured on Gateway\n- **Password**: You must use network key used in Gateway\n- **Node Name**: Human readable name for node. This must be unique in all nodes in same EnigmaIOT network. This may be changed afterwards using MQTT protocol\n- **Sleep Time**: If a node uses deep sleep mode this configures the initial period to be slept. This can be modified using MQTT commands.\n\nUser code may add additional custom parameters.\n\n## Data format\n\nAlthough it is not mandatory at all, use of [CayenneLPP format](https://mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload) is recommended for sensor data compactness.\n\nYou may use [CayenneLPP library](https://github.com/ElectronicCats/CayenneLPP) for encoding on node and decoding on Gateway.\n\nExample gateway code expands data message to JSON data, to be used easily as payload on a MQTT publish message to a broker. For JSON generation [ArduinoJSON](https://arduinojson.org) library is required.\n\nIn any case you can use your own format or even raw unencoded data. Take care of maximum message length that communications layer uses. For ESP-NOW, maximum payload length it is 217 bytes.\n\nSince version 0.9 payload encoding is signaled on user data messages (both uplink and downlink) so new formats are possible. Currently  [CayenneLPP](https://mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload) and [MessagePack](https://msgpack.org) formats, in addition to RAW data, are possible. Check examples for usage instruction. MessagePack encoding and decoding are managed by ArduinoJSON library.\n\nThis change may produce incompatibilities with older versions so make sure you update your gateway and all your nodes to latest library version.\n\n## ESP-NOW channel selection\n\nGateway has always its WiFi interface working as an AP. Its name corresponds to configured Network Name.\n\nDuring first start, after connecting supply, node tries to search for a WiFi AP with that name. Whet it is found, node will use its MAC address and channel as destination for ESP-NOW messages. It also gets RSSI (signal level) and reports it to gateway.\n\nThis information is stored in flash so node will use it to communicate in all following messages.\n\nIn the case that gateway has changed its channel (for instance due to a reconfiguration) node will not be able to communicate again.\n\nIf several (2 by default) transmission errors are detected by node, it starts searching for gateway again. When found it keeps sending messages normally and new channel is updated in configuration persistently.\n\nSo, node will always follow the channel configuration that gateway is working in.\n\n## Output data from gateway\n\n### Uplink messages\n\nA user may program their own output format modifying gateway example program. For my use case gateway outputs MQTT messages in this format:\n\n```\n<configurable prefix>/<node address | node name>/data <json data>\n```\n\nA prefix is configured on gateway to allow several sensor networks to coexist in the same subnet. After that address and data are sent.\n\nAfter every received message, gateway detects if any packet has been lost before and reports it using MQTT message using this format:\n\n```\n<configurable prefix>/<node address | node name>/status {\"per\":<packet error rate>,\"lostmessages\":<Number of lost messages>,\"totalmessages\":<Total number of messages>,\"packetshour\":<Packet rate>}\n```\n\n### Downlink messages\n\nEnigmaIoT allows sending messages from gateway to nodes. In my implementation I use MQTT to trigger downlink messages too.\n\nTo make it simpler, downlink messages use the same structure than uplink.\n\n```\n<network name>/<node address | node name>/<get|set>/data <command data>\n```\n\nNode address means destination node address. Configurable prefix is the same used for uplink communication.\n\nCommands may be given in JSON format. In that case they are  sent to node in MessagePack format. That makes that mode gets the complete JSON object. This implies that no change is needed on Gateway to add new node types. Gateway is transparent to user data.\n\nThis is an example of MQTT message that triggers a downlink packet.\n\n```\nenigmaiot/12:34:56:78:90:12/set/data {\"light1\": 1, \"light2\": 0}\n```\n\nIf node uses a name, MQTT message may use of it.\n\n```\nenigmaiot/kitcken_light/set/data {\"light1\": 1, \"light2\": 0}\n```\n\nAfter sending that command node will receive a 'set' command with data `{\"light1\": 1, \"light2\": 0}`.\n\nCommands can be sent in any other format different that JSON, even binary. In that case they are sent without conversion to node using MessagePack encoding format to reduce transferred data bits.\n\n### Control messages\n\nControl messages are intended to set node specific settings, like sleep time, channel, trigger OTA update, etc. They are not passed to the main node sketch but gateway treat them as normal downlink messages.\n\nNormally control commands trigger a response as an uplink message.\n\nThis is the list of currently implemented control commands:\n\n- Get node protocol version\n- Get/Set sleep duration time\n- OTA Update\n- Identify\n- Node configuration reset\n- Get last node messagge RSSI\n- Get/Set node name\n- Restart node MCU\n\n<table>\n  <tr>\n    <th colspan=\"2\">Command</th>\n    <th>Response</th>\n  </tr>\n  <tr>\n    <td>Get version</td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address  | node name&gt;/get/version</code></td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/version {\"version\":\"&lt;version&gt;\"}</code></td>\n  </tr>\n  <tr>\n    <td>Get sleep duration</td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/get/sleeptime</code></td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/sleeptime {\"sleeptime\":\"&lt;sleep_time&gt;\"}\"</code></td>\n  </tr>\n  <tr>\n    <td>Set sleep duration</td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/sleeptime &lt;sleep_time&gt;</code></td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/sleeptime {\"sleeptime\":\"&lt;sleep_time&gt;\"}</code></td>\n  </tr>\n  <tr>\n    <td>OTA message</td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/ota &lt;ota message&gt;</code></td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/ota {\"result\":\"&lt;ota_result_text&gt;,\"status\":\"&lt;ota_result_code&gt;\"}</code></td>\n  </tr>\n  <tr>\n    <td>Identify node</td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/identify</code></td>\n    <td>None</td>\n  </tr>\n  <tr>\n    <td>Reset node configuration</td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/reset</code></td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/reset {}</code></td>\n  </tr>\n  <tr>\n    <td>Get node RSSI</td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/get/rssi</code></td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/rssi {\"rssi\":&lt;RSSI&gt;,\"channel\":&lt;WiFi channel&gt;}</code></td>\n  </tr>\n  <tr>\n    <td>Request node name</td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/get/name</code></td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/name {\"address\":&lt;node address&gt;,\"name\":&lt;Node name&gt;}</code></td>\n  </tr>\n  <tr>\n    <td>Set node name</td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/name &lt;Node name&gt;</code></td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/result/name {\"address\":&lt;node address&gt;,\"name\":&lt;Node name&gt;}</code></td>\n  </tr>\n    <tr>\n    <td>Restart Node MCU</td>\n    <td><code>&lt;configurable prefix&gt;/&lt;node address | node name&gt;/set/restart</code></td>\n    <td>None</td>\n  </tr>\n</table>\n\n\n\n\nFor instance, publishing `enigmaiot/12:34:56:78:90:12/get/version` will produce `enigmaiot/12:34:56:78:90:12/result/version 0.2.0`.\n\nMessages are encoded to reduce the amount of bytes to be sent over internal protocol, so that the air time is as short as possible.\n\n| Command                   | Msg type | Encoding                                                     |\n| ------------------------- | -------- | ------------------------------------------------------------ |\n| Get version               | `0x01`   | None                                                         |\n| Version result            | `0x81`   | version as ASCII string                                      |\n| Get sleep time            | `0x02`   | None                                                         |\n| Set sleep time            | `0x03`   | Sleep time in seconds (Unsigned integer - 32 bit)            |\n| Sleep time result         | `0x82`   | Sleep time in seconds (Unsigned integer - 32 bit)            |\n| OTA Update                | `0xEF`   | OTA update specific format                                   |\n| OTA Update result         | `0xFF`   | OTA result code (text and integer code)                      |\n| Identify                  | `0x04`   | None. Function to identify a physical node by flashing its LED |\n| Reset node configuration  | `0x05`   | None. This will set node to factory config                   |\n| Reset config confirmation | `0x85`   | None                                                         |\n| Request measure RSSI (Deprecated) *     | `0x06`   | None                                                         |\n| Report measure RSSI (Deprecated) *     | `0x86`   | RSSI (signed integer - 8 bit), WiFi channel (unsigned integer - 8 bit) |\n| Get node name             | `0x07`   | None                                                         |\n| Report node name          | `0x87`   | Node name as string                                          |\n| Set node name             | `0x08`   | Node name as string                                          |\n| Restart node MCU          | `0x09`   | None                                                         |\n| Send Broadcast Key        | `0x10`   | 32 byte key                                                  |\n\n* Note: Since version 0.9.8 RSSI information is got from every message, stored into gateway. There is no longer need for a request to node\n## OTA Update\n\nMQTT Gateway example includes plain Arduino OTA mechanism. OTA is protected using network key selected during initial configuration.\n\nOn nodes, OTA updates are transferred using the same mechanism. Firmware is sent over MQTT using a [Python script](./EnigmaIoTUpdate/EnigmaIoTUpdate.py). Then gateway selects the appropriate node and send this binary data over ESP-NOW.\n\nAs ESP-NOW restricts **maximum payload to 250 bytes per message** firmware is splitted in chunks. Every chunk is **212 bytes** long, so that it fits together with message headers and is multiple of 4. This splitting work is done by `EnigmaIoTUpdate.py` script.\n\n### Using EnigmaIoTUpdate.py\n\nA requirement is to have installed [Python3](https://www.python.org/download/releases/3.0/) in the computer used to do the update.\n\nIn order to run the update, you need to install [`paho-mqtt`](https://pypi.org/project/paho-mqtt/) library. To do that you can follow instructions [here](https://pypi.org/project/paho-mqtt/#installation).\n\n```\n$python3 ./EnigmaIoTUpdate.py --help\n\nUsage: EnigmaIoTUpdate.py [options]\n\nOptions:\n  -h, --help            show this help message and exit\n  -f FILENAME, --file=FILENAME\n                        File to program into device\n  -d ADDRESS, --daddress=ADDRESS\n                        Node address or name\n  -t BASETOPIC, --topic=BASETOPIC\n                        Base topic for MQTT messages\n  -u MQTTUSER, --user=MQTTUSER\n                        MQTT server username\n  -P MQTTPASS, --password=MQTTPASS\n                        MQTT server user password\n  -S MQTTSERVER, --server=MQTTSERVER\n                        MQTT server address or name\n  -p MQTTPORT, --port=MQTTPORT\n                        MQTT server port\n  -s, --secure          Use secure TLS in MQTT connection. Normally you should\n                          use port 8883\n  -D, --speed\t\t\tSets formware delivery speed [fast | medium | slow]. The fastest\n                          the biggest chance to get troubles during update. Fast option\n                          normally works but medium is more resilient\n  --unsecure            Use secure plain TCP in MQTT connection. Normally you\n                          should use port 1883\n```\n\nAn example of this command could be like this:\n\n```\npython3 ./EnigmaIoTUpdate.py \\\n             -f EnigmaIOTsensor.bin \\\n             -d 11:22:33:44:55:66 \\\n             -t enigmaiot \\\n             -u \"mymqttbrokeruser\" \\\n             -P \"mymqttbrokerpassword\" \\\n             -S mysecure.mqtt.server \\\n             -p 8883 \\\n             -D medium \\\n             -s\n```\n\nNotice that using ESP-NOW, device address correspond to **MAC address** of your ESP8266 or ESP32 node.\n\nIt is very important to configure user and password on you MQTT broker. Besides, if it is going to be accessed from the Internet you should activate TLS encryption and a certificate.\n\n## Home Assistant integration\n\nJSON controller examples have integrated [Home Assistant autoconfiguration](https://www.home-assistant.io/docs/mqtt/discovery/). So, it is possible to design a node that autoregister automatically as soon it is connected to EnigmaIOT network.\n\nYou just need to add the specfic header files that correspond with your node profile. Currently these are implemented:\n\n- [Sensors](https://www.home-assistant.io/integrations/sensor.mqtt/)\n- [Binary sensors](https://www.home-assistant.io/integrations/binary_sensor.mqtt/)\n- [Covers](https://www.home-assistant.io/integrations/cover.mqtt/)\n- [Switches](https://www.home-assistant.io/integrations/switch.mqtt/)\n- [Device Triggers](https://www.home-assistant.io/integrations/device_trigger.mqtt/)\n\nAdditionaly you need to add specific configuration in separate methods like this from `SmartSwitchController.cpp`\n\n```c++\nvoid CONTROLLER_CLASS_NAME::buildHASwitchDiscovery () {\n    // Select corresponding HAEntiny type\n    HASwitch* haEntity = new HASwitch ();\n\n    uint8_t* msgPackBuffer;\n\n    if (!haEntity) {\n        DEBUG_WARN (\"JSON object instance does not exist\");\n        return;\n    }\n\n    // *******************************\n    // Add your characteristics here\n    // There is no need to futher modify this function\n\n    haEntity->setNameSufix (\"switch\");\n    haEntity->setStateOn (1);\n    haEntity->setStateOff (0);\n    haEntity->setValueField (\"rly\");\n    haEntity->setPayloadOff (\"{\\\"cmd\\\":\\\"rly\\\",\\\"rly\\\":0}\");\n    haEntity->setPayloadOn (\"{\\\"cmd\\\":\\\"rly\\\",\\\"rly\\\":1}\");\n    // *******************************\n\n    size_t bufferLen = haEntity->measureMessage ();\n\n    msgPackBuffer = (uint8_t*)malloc (bufferLen);\n\n    size_t len = haEntity->getAnounceMessage (bufferLen, msgPackBuffer);\n\n    DEBUG_INFO (\"Resulting MSG pack length: %d\", len);\n\n    if (!sendHADiscovery (msgPackBuffer, len)) {\n        DEBUG_WARN (\"Error sending HA discovery message\");\n    }\n\n    if (haEntity) {\n        delete (haEntity);\n    }\n\n    if (msgPackBuffer) {\n        free (msgPackBuffer);\n    }\n}\n\n```\n\nFinally you need to register every auto discovery methods in `connectInform` method.\n\n```c++\nvoid CONTROLLER_CLASS_NAME::connectInform () {\n\n#if SUPPORT_HA_DISCOVERY    \n    // Register every HAEntity discovery function here. As many as you need\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHASwitchDiscovery, this));\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHATriggerDiscovery, this));\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHALinkDiscovery, this));\n#endif\n\n    EnigmaIOTjsonController::connectInform ();\n}\n```\n\n## External libraries\n\n- ESPAsyncTCP -- https://github.com/me-no-dev/ESPAsyncTCP **(Required only for ESP8266)**\n- AsyncTCP -- https://github.com/me-no-dev/AsyncTCP **(Required only for ESP32)**\n- ESPAsyncWebServer -- https://github.com/me-no-dev/ESPAsyncWebServer\n- ESPAsyncWiFiManager -- https://github.com/alanswx/ESPAsyncWiFiManager version > 0.22\n- Arduino Crypto Library -- https://github.com/gmag11/CryptoArduino forked and formatted from https://github.com/rweather\n- PubSubClient -- https://github.com/knolleary/pubsubclient\n- CayenneLPP -- https://github.com/sabas1080/CayenneLPP version > 1.0.2\n- ArduinoJSON 6 -- https://github.com/bblanchon/ArduinoJson version > 6.0.0\n\n"
  },
  {
    "path": "examples/EnigmaIOT-Button-Controller/.gitignore",
    "content": ".pio\n.vscode\n"
  },
  {
    "path": "examples/EnigmaIOT-Button-Controller/ButtonController.cpp",
    "content": "// \n// \n// \n\n#include <functional>\n#include \"ButtonController.h\"\n\nusing namespace std;\nusing namespace placeholders;\n\nconstexpr auto CONFIG_FILE = \"/customconf.json\"; ///< @brief Custom configuration file name\n\n// -----------------------------------------\n// You may add some global variables you need here,\n// like serial port instances, I2C, etc\n// -----------------------------------------\n\n\nbool CONTROLLER_CLASS_NAME::processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\t// Process incoming messages here\n\t// They are normally encoded as MsgPack so you can convert them to JSON very easily\n\treturn true;\n}\n\n\nbool CONTROLLER_CLASS_NAME::sendCommandResp (const char* command, bool result) {\n\t// Respond to command with a result: true if successful, false if failed \n\treturn true;\n}\n\nvoid CONTROLLER_CLASS_NAME::connectInform () {\n\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHADiscovery, this));\n\n    EnigmaIOTjsonController::connectInform ();\n    // Add more actions here if needed\n    // Keep this method duration short\n}\n\nvoid CONTROLLER_CLASS_NAME::setup (EnigmaIOTNodeClass* node, void* data) {\n\tenigmaIotNode = node;\n\t// You do node setup here. Use it as it was the normal setup() Arduino function\n    pinMode (BUTTON_PIN, INPUT_PULLUP);\n\n\t// Send a 'hello' message when initalizing is finished\n\tsendStartAnouncement ();\n\n\tDEBUG_DBG (\"Finish begin\");\n\n\t// If your node should sleep after sending data do all remaining tasks here\n}\n\nvoid CONTROLLER_CLASS_NAME::loop () {\n\n\t// If your node stays allways awake do your periodic task here\n\n\tif (pushReleased) { // Enter this only if button were not pushed in the last loop\n\t\tif (!digitalRead (BUTTON_PIN)) {\n\t\t\tdelay (50); // debounce button push\n\t\t\tif (!digitalRead (BUTTON_PIN)) {\n\t\t\t\tDEBUG_WARN (\"Button triggered!\");\n\t\t\t\tpushTriggered = true; // Button is pushed\n\t\t\t\tpushReleased = false; // Mark button as not released\n\t\t\t}\n\t\t}\n\t}\n\n\tif (pushTriggered) { // If button was pushed\n\t\tpushTriggered = false; // Disable push trigger\n\t\tconst size_t capacity = JSON_OBJECT_SIZE (2);\n\t\tDynamicJsonDocument json (capacity);\n\t\tjson[\"button\"] = BUTTON_PIN;\n\t\tjson[\"push\"] = 1;\n\t\tif (sendJson (json)) {\n\t\t\tDEBUG_WARN (\"Push triggered sent\");\n\t\t} else {\n\t\t\tDEBUG_ERROR (\"Push send error\");\n\t\t}\n\t}\n\n\tif (!pushReleased) {\n\t\tif (digitalRead (BUTTON_PIN)) { // If button is released\n\t\t\tDEBUG_WARN (\"Button released\");\n\t\t\tpushReleased = true;\n\t\t\tconst size_t capacity = JSON_OBJECT_SIZE (2);\n\t\t\tDynamicJsonDocument json (capacity);\n\t\t\tjson[\"button\"] = BUTTON_PIN;\n\t\t\tjson[\"push\"] = 0;\n\t\t\tif (sendJson (json)) {\n\t\t\t\tDEBUG_WARN (\"Push released sent\");\n\t\t\t} else {\n\t\t\t\tDEBUG_ERROR (\"Push send error\");\n\t\t\t}\n\t\t}\n\t}\n}\n\nCONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME () {\n\t// If your class uses dynamic data free it up here\n\t// This is normally not needed but it is a good practice\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerStart () {\n\n\tDEBUG_INFO (\"==== CCost Controller Configuration start ====\");\n\t// If you need to add custom configuration parameters do it here\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerExit (bool status) {\n\tDEBUG_INFO (\"==== CCost Controller Configuration result ====\");\n\t// You can read configuration paramenter values here\n}\n\nbool CONTROLLER_CLASS_NAME::loadConfig () {\n\t// If you need to read custom configuration data do it here\n\treturn true;\n}\n\nbool CONTROLLER_CLASS_NAME::saveConfig () {\n\t// If you need to save custom configuration data do it here\n\treturn true;\n}\n\nvoid CONTROLLER_CLASS_NAME::buildHADiscovery () {\n    HATrigger* haEntity = new HATrigger ();\n\n    uint8_t* msgPackBuffer;\n\n    if (!haEntity) {\n        DEBUG_WARN (\"JSON object instance does not exist\");\n        return;\n    }\n\n    haEntity->setType (button_short_press);\n    haEntity->setSubtype (button_1);\n\n    size_t bufferLen = haEntity->measureMessage ();\n\n    msgPackBuffer = (uint8_t*)malloc (bufferLen);\n\n    size_t len = haEntity->getAnounceMessage (bufferLen, msgPackBuffer);\n\n    DEBUG_WARN (\"Resulting MSG pack length: %d\", len);\n\n    if (!sendHADiscovery (msgPackBuffer, len)) {\n        DEBUG_WARN (\"Error sending HA discovery message\");\n    }\n\n    if (haEntity) {\n        delete (haEntity);\n    }\n\n    if (msgPackBuffer) {\n        free (msgPackBuffer);\n    }\n}\n"
  },
  {
    "path": "examples/EnigmaIOT-Button-Controller/ButtonController.h",
    "content": "// BasicController.h\n\n#ifndef _BUTTONCONTROLLER_h\n#define _BUTTONCONTROLLER_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n#ifdef ESP32\n#include <SPIFFS.h>\n#endif\n\n#include <EnigmaIOTjsonController.h>\n#include \"haTrigger.h\"\n\n// --------------------------------------------------\n// You may define data structures and constants here\n// --------------------------------------------------\n#define BUTTON_PIN 4\n\n#define CONTROLLER_CLASS_NAME ButtonController\nstatic const char* CONTROLLER_NAME = \"Button controller\";\n\nclass CONTROLLER_CLASS_NAME : EnigmaIOTjsonController {\nprotected:\n\t// --------------------------------------------------\n\t// add all parameters that your project needs here\n\t// --------------------------------------------------\n\tbool pushTriggered = false;\n\tbool pushReleased = true;\n\npublic:\n\tvoid setup (EnigmaIOTNodeClass* node, void* data = NULL);\n\n\tbool processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) override;\n\n    void loop () override;\n\n\t~CONTROLLER_CLASS_NAME ();\n\n\t/**\n\t * @brief Called when wifi manager starts config portal\n\t */\n    void configManagerStart () override;\n\n\t/**\n\t * @brief Called when wifi manager exits config portal\n\t * @param status `true` if configuration was successful\n\t */\n    void configManagerExit (bool status) override;\n\n\t/**\n\t * @brief Loads output module configuration\n\t * @return Returns `true` if load was successful. `false` otherwise\n\t */\n    bool loadConfig () override;\n\n    void connectInform ();\n\nprotected:\n\t/**\n\t  * @brief Saves output module configuration\n\t  * @return Returns `true` if save was successful. `false` otherwise\n\t  */\n    bool saveConfig () override;\n\n    bool sendCommandResp (const char* command, bool result) override;\n\n    bool sendStartAnouncement () override {\n        // You can send a 'hello' message when your node starts. Useful to detect unexpected reboot\n        const size_t capacity = JSON_OBJECT_SIZE (10);\n        DynamicJsonDocument json (capacity);\n        json[\"status\"] = \"start\";\n        json[\"device\"] = CONTROLLER_NAME;\n        char version_buf[10];\n        snprintf (version_buf, 10, \"%d.%d.%d\",\n                  ENIGMAIOT_PROT_VERS[0], ENIGMAIOT_PROT_VERS[1], ENIGMAIOT_PROT_VERS[2]);\n        json[\"version\"] = String (version_buf);\n\n        return sendJson (json);\n    }\n\n    void buildHADiscovery ();\n\n\t// ------------------------------------------------------------\n\t// You may add additional method definitions that you need here\n\t// ------------------------------------------------------------\n};\n\n#endif\n\n"
  },
  {
    "path": "examples/EnigmaIOT-Button-Controller/EnigmaIOT-Button-Controller.ino",
    "content": "/**\n  * @file EnigmaIOT-Button-Controller.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Node template for easy custom node creation\n  */\n\n#if !defined ESP8266 && !defined ESP32\n#error Node only supports ESP8266 or ESP32 platform\n#endif\n\n#include <Arduino.h>\n#include <EnigmaIOTjsonController.h>\n#include <FailSafe.h>\n#include \"ButtonController.h\" // <-- Include here your controller class header\n\n#include <EnigmaIOTNode.h>\n#include <espnow_hal.h>\n#include <CayenneLPP.h>\n#include <ArduinoJson.h>\n\n#ifdef ESP8266\n#include <ESP8266WiFi.h>\n#include <ESP8266HTTPClient.h>\n#include <ESP8266httpUpdate.h>\n#include <Hash.h>\n#elif defined ESP32\n#include <WiFi.h>\n#include <Update.h>\n#include <driver/adc.h>\n#include \"esp_wifi.h\"\n#endif\n#include <ArduinoJson.h>\n#include <Curve25519.h>\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n#include <DNSServer.h>\n\n#define SLEEPY 0 // Set it to 1 if your node should sleep after sending data\n\n#ifndef LED_BUILTIN\n#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5\n#endif // !LED_BUILTIN\n\n// If you do need serial for your project you must disable serial debug by commenting next line\n#define USE_SERIAL // Don't forget to set DEBUG_LEVEL to NONE if serial is disabled\n\n#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled\n\nEnigmaIOTjsonController* controller; // Generic controller is refferenced here. You do not need to modify it\n\n#define RESET_PIN 5 // You can set a different configuration reset pin here. Check for conflicts with used pins.\n\nconst time_t BOOT_FLAG_TIMEOUT = 10000; // Time in ms to reset flag\nconst int MAX_CONSECUTIVE_BOOT = 3; // Number of rapid boot cycles before enabling fail safe mode\nconst int LED = LED_BUILTIN; // Number of rapid boot cycles before enabling fail safe mode\nconst int FAILSAFE_RTC_ADDRESS = 0; // If you use RTC memory adjust offset to not overwrite other data\n\n// Called when node is connected to gateway. You don't need to do anything here usually\nvoid connectEventHandler () {\n\tDEBUG_WARN (\"Connected\");\n    controller->connectInform ();\n}\n\n// Called when node is unregistered from gateway. You don't need to do anything here usually\nvoid disconnectEventHandler (nodeInvalidateReason_t reason) {\n\tDEBUG_WARN (\"Disconnected. Reason %d\", reason);\n}\n\n// Called to route messages to EnitmaIOTNode class. Do not modify\nbool sendUplinkData (const uint8_t* data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType) {\n    if (dataMsgType == DATA_TYPE) {\n        return EnigmaIOTNode.sendData (data, len, payloadEncoding);    \n    } else if (dataMsgType == HA_DISC_TYPE) {\n        return EnigmaIOTNode.sendHADiscoveryMessage (data, len);\n    } else {\n        return false;\n    }\n}\n\n// Called to route incoming messages to your code. Do not modify\nvoid processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\tif (controller->processRxCommand (mac, buffer, length, command, payloadEncoding)) {\n\t\tDEBUG_INFO (\"Command processed\");\n\t} else {\n\t\tDEBUG_WARN (\"Command error\");\n\t}\n}\n\n// Do not modify\nvoid wifiManagerExit (boolean status) {\n\tcontroller->configManagerExit (status);\n}\n\n// Do not modify\nvoid wifiManagerStarted () {\n\tcontroller->configManagerStart ();\n}\n\nvoid setup () {\n\n#ifdef USE_SERIAL\n    Serial.begin (921600);\n\tSerial.println ();\n#endif\n\n    FailSafe.checkBoot (MAX_CONSECUTIVE_BOOT, LED, FAILSAFE_RTC_ADDRESS); // Parameters are optional\n    if (FailSafe.isActive ()) { // Skip all user setup if fail safe mode is activated\n        return;\n    }\n\n\tcontroller = (EnigmaIOTjsonController*)new CONTROLLER_CLASS_NAME (); // Use your class name here\n\n\tEnigmaIOTNode.setLed (BLUE_LED); // Set communication LED\n\tEnigmaIOTNode.setResetPin (RESET_PIN); // Set reset pin\n\tEnigmaIOTNode.onConnected (connectEventHandler); // Configure registration handler\n\tEnigmaIOTNode.onDisconnected (disconnectEventHandler); // Configure unregistration handler\n\tEnigmaIOTNode.onDataRx (processRxData); // Configure incoming data handler\n\tEnigmaIOTNode.enableClockSync (false); // Set to true if you need this node to get its clock syncronized with gateway\n\tEnigmaIOTNode.onWiFiManagerStarted (wifiManagerStarted);\n\tEnigmaIOTNode.onWiFiManagerExit (wifiManagerExit);\n\tEnigmaIOTNode.enableBroadcast ();\n\n\tif (!controller->loadConfig ()) { // Trigger custom configuration loading\n\t\tDEBUG_WARN (\"Error reading config file\");\n\t\tif (FILESYSTEM.format ())\n\t\t\tDEBUG_WARN (\"Filesystem Formatted\");\n\t}\n\n\tEnigmaIOTNode.begin (&Espnow_hal, NULL, NULL, true, SLEEPY == 1); // Start EnigmaIOT communication\n\n\tuint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n\t// Set Address using internal MAC Address. Do not modify\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress))\n#elif defined ESP32\n\tif ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))\n#endif\n\t{\n\t\tEnigmaIOTNode.setNodeAddress (macAddress);\n\t\tDEBUG_DBG (\"Node address set to %s\", mac2str (macAddress));\n\t} else {\n\t\tDEBUG_WARN (\"Node address error\");\n\t}\n\n\tcontroller->sendDataCallback (sendUplinkData); // Listen for data from controller class\n\tcontroller->setup (&EnigmaIOTNode);\t\t\t   // Start controller class\n\n#if SLEEPY == 1\n\tEnigmaIOTNode.sleep ();\n#endif\n\n\tDEBUG_DBG (\"END setup\");\n}\n\nvoid loop () {\n    FailSafe.loop (BOOT_FLAG_TIMEOUT); // Use always this line\n\n    if (FailSafe.isActive ()) { // Skip all user loop code if Fail Safe mode is active\n        return;\n    }\n\n    controller->loop (); // Loop controller class\n    controller->callHAdiscoveryCalls (); // Send HA registration messages\n\tEnigmaIOTNode.handle (); // Mantain EnigmaIOT connection\n}\n"
  },
  {
    "path": "examples/EnigmaIOT-Button-Controller/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n[env:esp8266-ButtonController]\nextends = esp8266_node_common\nlib_deps = \n    ${esp8266_common.lib_deps}\n    FailSafeMode\nbuild_flags = \n    ${esp8266_common.build_flags}\n    -DFS_USE_FLASH=1\n    -DFS_USE_LITTLEFS=1\n\n[env:esp32-ButtonController]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\n"
  },
  {
    "path": "examples/EnigmaIOT-Button-Controller/readme.md",
    "content": "# EnigmaIOT Button Controller\n\nThis shows the simplest implementation of [EnigmaIOTjsonController.h](https://github.com/gmag11/EnigmaIOT/blob/dev/src/EnigmaIOTjsonController.h) using a button as data origin.\n\nA message is sent on button press and another on button release. Node does not enter in deep sleep mode.\n\nSimple debounce is applied to avoid multiple pushes.\n\nUsing [EnigmaIOT Gateway MQTT](https://github.com/gmag11/EnigmaIOT/tree/dev/examples/EnigmaIOTGatewayMQTT), messages from button controller produce this output.\n\n```\n<Network_name>/<node_name or node_address>/data  {\"button\":<button_pin>,\"push\":< 1 or 0 >}\n```\n\n- 1 means button pushed\n- 0 means button released\n\nNo configuration data is added here to keep example as simple as possible."
  },
  {
    "path": "examples/EnigmaIOT-DashButton-Controller/.gitignore",
    "content": ".pio\n.vscode"
  },
  {
    "path": "examples/EnigmaIOT-DashButton-Controller/DashButtonController.cpp",
    "content": "// \n// \n// \n\n#include <functional>\n#include \"DashButtonController.h\"\n\nusing namespace std;\nusing namespace placeholders;\n\nconstexpr auto CONFIG_FILE = \"/customconf.json\"; ///< @brief Custom configuration file name\n\n// -----------------------------------------\n// You may add some global variables you need here,\n// like serial port instances, I2C, etc\n// -----------------------------------------\n\nbool CONTROLLER_CLASS_NAME::processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\t// Process incoming messages here\n\t// They are normally encoded as MsgPack so you can confert them to JSON very easily\n\treturn true;\n}\n\n\nbool CONTROLLER_CLASS_NAME::sendCommandResp (const char* command, bool result) {\n\t// Respond to command with a result: true if successful, false if failed \n\treturn true;\n}\n\nvoid CONTROLLER_CLASS_NAME::connectInform () {\n\n#if SUPPORT_HA_DISCOVERY    \n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHADiscovery, this));\n#endif\n\n    EnigmaIOTjsonController::connectInform ();\n}\n\nvoid CONTROLLER_CLASS_NAME::setup (EnigmaIOTNodeClass* node, void* data) {\n\tenigmaIotNode = node;\n\t// You do node setup here. Use it as it was the normal setup() Arduino function\n\n\t// Send a 'hello' message when initalizing is finished\n\t// Not needed as this will reboot after deep sleep\n\t// sendStartAnouncement (); \n\n\tDEBUG_DBG (\"Finish begin\");\n\n\t// If your node should sleep after sending data do all remaining tasks here\n}\n\nvoid CONTROLLER_CLASS_NAME::loop () {\n\n\t// If your node stays allways awake do your periodic task here\n\n\t// You can send your data as JSON. This is a basic example\n\n    if (!buttonPressSent && enigmaIotNode->isRegistered ()) {\n        const size_t capacity = JSON_OBJECT_SIZE (2);\n        DynamicJsonDocument json (capacity);\n        json[\"button\"] = 1;\n\n        if (sendJson (json)) {\n            DEBUG_WARN (\"Button press sent\");\n            buttonPressSent = true;\n        } else {\n            DEBUG_WARN (\"Error sending message\");\n        }\n    }\n\n        //const size_t capacity = JSON_OBJECT_SIZE (4);\n\t\t//DynamicJsonDocument json (capacity);\n\t\t//json[\"sensor\"] = data_description;\n\t\t//json[\"meas\"] = measurement;\n\n\t\t//sendJson (json);\n\n}\n\nCONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME () {\n\t// It your class uses dynamic data free it up here\n\t// This is normally not needed but it is a good practice\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerStart () {\n\tDEBUG_INFO (\"==== CCost Controller Configuration start ====\");\n\t// If you need to add custom configuration parameters do it here\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerExit (bool status) {\n\tDEBUG_INFO (\"==== CCost Controller Configuration result ====\");\n\t// You can read configuration paramenter values here\n}\n\nbool CONTROLLER_CLASS_NAME::loadConfig () {\n\t// If you need to read custom configuration data do it here\n\treturn true;\n}\n\nbool CONTROLLER_CLASS_NAME::saveConfig () {\n\t// If you need to save custom configuration data do it here\n\treturn true;\n}\n\n#if SUPPORT_HA_DISCOVERY    \n// Repeat this method for every entity\nvoid CONTROLLER_CLASS_NAME::buildHADiscovery () {\n    // Select corresponding HAEntiny type\n    HATrigger* haEntity = new HATrigger ();\n\n    uint8_t* msgPackBuffer;\n\n    if (!haEntity) {\n        DEBUG_WARN (\"JSON object instance does not exist\");\n        return;\n    }\n\n    // *******************************\n    // Add your characteristics here\n    // There is no need to futher modify this function\n\n    haEntity->setType (button_short_press);\n    haEntity->setSubtype (turn_on);\n\n    // *******************************\n\n    size_t bufferLen = haEntity->measureMessage ();\n\n    msgPackBuffer = (uint8_t*)malloc (bufferLen);\n\n    size_t len = haEntity->getAnounceMessage (bufferLen, msgPackBuffer);\n\n    DEBUG_DBG (\"Resulting MSG pack length: %d\", len);\n\n    if (!sendHADiscovery (msgPackBuffer, len)) {\n        DEBUG_WARN (\"Error sending HA discovery message\");\n    }\n\n    if (haEntity) {\n        delete (haEntity);\n    }\n\n    if (msgPackBuffer) {\n        free (msgPackBuffer);\n    }\n}\n#endif // SUPPORT_HA_DISCOVERY\n"
  },
  {
    "path": "examples/EnigmaIOT-DashButton-Controller/DashButtonController.h",
    "content": "// BasicController.h\n\n#ifndef _DASHBUTTONCONTROLLER_h\n#define _DASHBUTTONCONTROLLER_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n//#define DEBUG_SERIAL\n\n#ifdef ESP32\n#include <SPIFFS.h>\n#endif\n\n#include <EnigmaIOTjsonController.h>\n#define CONTROLLER_CLASS_NAME DashButtonController\nstatic const char* CONTROLLER_NAME = \"DashButton controller\";\n\n#if SUPPORT_HA_DISCOVERY    \n#include <haTrigger.h>\n#endif\n\n// --------------------------------------------------\n// You may define data structures and constants here\n// --------------------------------------------------\n\nclass CONTROLLER_CLASS_NAME : EnigmaIOTjsonController {\nprotected:\n\t// --------------------------------------------------\n\t// add all parameters that your project needs here\n\t// --------------------------------------------------\n    bool buttonPressSent = false;\npublic:\n\tvoid setup (EnigmaIOTNodeClass* node, void* data = NULL);\n\n\tbool processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding);\n\n\tvoid loop ();\n\n\t~CONTROLLER_CLASS_NAME ();\n\n\t/**\n\t * @brief Called when wifi manager starts config portal\n\t */\n\tvoid configManagerStart ();\n\n\t/**\n\t * @brief Called when wifi manager exits config portal\n\t * @param status `true` if configuration was successful\n\t */\n\tvoid configManagerExit (bool status);\n\n\t/**\n\t * @brief Loads output module configuration\n\t * @return Returns `true` if load was successful. `false` otherwise\n\t */\n\tbool loadConfig ();\n\n    void connectInform ();\n\nprotected:\n\t/**\n\t  * @brief Saves output module configuration\n\t  * @return Returns `true` if save was successful. `false` otherwise\n\t  */\n\tbool saveConfig ();\n\n\tbool sendCommandResp (const char* command, bool result);\n\n    bool sendStartAnouncement () {\n        // You can send a 'hello' message when your node starts. Useful to detect unexpected reboot\n        const size_t capacity = JSON_OBJECT_SIZE (10);\n        DynamicJsonDocument json (capacity);\n        json[\"status\"] = \"start\";\n        json[\"device\"] = CONTROLLER_NAME;\n        char version_buf[10];\n        snprintf (version_buf, 10, \"%d.%d.%d\",\n                  ENIGMAIOT_PROT_VERS[0], ENIGMAIOT_PROT_VERS[1], ENIGMAIOT_PROT_VERS[2]);\n        json[\"version\"] = String (version_buf);\n\n        return sendJson (json);\n    }\n\n    void buildHADiscovery ();\n    \n\t// ------------------------------------------------------------\n\t// You may add additional method definitions that you need here\n\t// ------------------------------------------------------------\n};\n\n#endif\n\n"
  },
  {
    "path": "examples/EnigmaIOT-DashButton-Controller/EnigmaIOT-DashButton-Controller.ino",
    "content": "/**\n  * @file EnigmaIOT-DashButton-Controller.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Node template for easy custom node creation\n  */\n\n#if !defined ESP8266 && !defined ESP32\n#error Node only supports ESP8266 or ESP32 platform\n#endif\n\n#include <Arduino.h>\n#include <EnigmaIOTjsonController.h>\n#include <FailSafe.h>\n#include \"DashButtonController.h\" // <-- Include here your controller class header\n\n#include <EnigmaIOTNode.h>\n#include <espnow_hal.h>\n#include <CayenneLPP.h>\n#include <ArduinoJson.h>\n\n#ifdef ESP8266\n#include <ESP8266WiFi.h>\n#include <ESP8266HTTPClient.h>\n#include <ESP8266httpUpdate.h>\n#include <ESPAsyncTCP.h> // Comment to compile for ESP32\n#include <Hash.h>\n#elif defined ESP32\n#include <WiFi.h>\n#include <SPIFFS.h>\n#include <AsyncTCP.h> // Comment to compile for ESP8266\n#include <SPIFFS.h>\n#include <Update.h>\n#include <driver/adc.h>\n#include \"esp_wifi.h\"\n#endif\n#include <ArduinoJson.h>\n#include <Curve25519.h>\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n#include <DNSServer.h>\n#include <FS.h>\n\n#define SLEEPY 1 // Set it to 1 if your node should sleep after sending data\n\n#ifndef LED_BUILTIN\n#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5\n#endif // !LED_BUILTIN\n\n// If you do need serial for your project you must disable serial debug by commenting next line\n#define USE_SERIAL // Don't forget to set DEBUG_LEVEL to NONE if serial is disabled\n\n#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled\n\nEnigmaIOTjsonController* controller; // Generic controller is refferenced here. You do not need to modify it\n\n#define RESET_PIN 13 // You can set a different configuration reset pin here. Check for conflicts with used pins.\n\nconst time_t BOOT_FLAG_TIMEOUT = 7000; // Time in ms to reset flag\nconst int MAX_CONSECUTIVE_BOOT = 3; // Number of rapid boot cycles before enabling fail safe mode\nconst int LED = LED_BUILTIN; // Number of rapid boot cycles before enabling fail safe mode\nconst int FAILSAFE_RTC_ADDRESS = 0; // If you use RTC memory adjust offset to not overwrite other data\n\n// Called when node is connected to gateway. You don't need to do anything here usually\nvoid connectEventHandler () {\n\tcontroller->connectInform ();\n\tDEBUG_WARN (\"Connected\");\n}\n\n// Called when node is unregistered from gateway. You don't need to do anything here usually\nvoid disconnectEventHandler (nodeInvalidateReason_t reason) {\n\tDEBUG_WARN (\"Disconnected. Reason %d\", reason);\n}\n\n// Called to route messages to EnitmaIOTNode class. Do not modify\nbool sendUplinkData (const uint8_t* data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType) {\n    if (dataMsgType == DATA_TYPE) {\n        return EnigmaIOTNode.sendData (data, len, payloadEncoding);\n    } else if (dataMsgType == HA_DISC_TYPE) {\n        return EnigmaIOTNode.sendHADiscoveryMessage (data, len);\n    } else {\n        return false;\n    }\n}\n\n// Called to route incoming messages to your code. Do not modify\nvoid processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\tif (controller->processRxCommand (mac, buffer, length, command, payloadEncoding)) {\n\t\tDEBUG_INFO (\"Command processed\");\n\t} else {\n\t\tDEBUG_WARN (\"Command error\");\n\t}\n}\n\n// Do not modify\nvoid wifiManagerExit (boolean status) {\n\tcontroller->configManagerExit (status);\n}\n\n// Do not modify\nvoid wifiManagerStarted () {\n\tcontroller->configManagerStart ();\n}\n\nvoid setup () {\n\n#ifdef USE_SERIAL\n    Serial.begin (921600);\n\t//delay (1000);\n\tSerial.println ();\n#endif\n\n    FailSafe.checkBoot (MAX_CONSECUTIVE_BOOT, LED, FAILSAFE_RTC_ADDRESS); // Parameters are optional\n    if (FailSafe.isActive ()) { // Skip all user setup if fail safe mode is activated\n        return;\n    }\n\n\tcontroller = (EnigmaIOTjsonController*)new CONTROLLER_CLASS_NAME (); // Use your class name here\n\n\tEnigmaIOTNode.setLed (BLUE_LED); // Set communication LED\n\tEnigmaIOTNode.setResetPin (RESET_PIN); // Set reset pin\n\tEnigmaIOTNode.onConnected (connectEventHandler); // Configure registration handler\n\tEnigmaIOTNode.onDisconnected (disconnectEventHandler); // Configure unregistration handler\n\tEnigmaIOTNode.onDataRx (processRxData); // Configure incoming data handler\n\tEnigmaIOTNode.enableClockSync (false); // Set to true if you need this node to get its clock syncronized with gateway\n\tEnigmaIOTNode.onWiFiManagerStarted (wifiManagerStarted);\n\tEnigmaIOTNode.onWiFiManagerExit (wifiManagerExit);\n\n\tif (!controller->loadConfig ()) { // Trigger custom configuration loading\n\t\tDEBUG_WARN (\"Error reading config file\");\n\t\tif (FILESYSTEM.format ())\n\t\t\tDEBUG_WARN (\"SPIFFS Formatted\");\n\t}\n\n    EnigmaIOTNode.begin (&Espnow_hal, NULL, NULL, true, SLEEPY == 1); // Start EnigmaIOT communication\n#if SLEEPY\n    EnigmaIOTNode.setSleepTime (0, true);\n#endif\n    \n\tuint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n\t// Set Address using internal MAC Address. Do not modify\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress))\n#elif defined ESP32\n\tif ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))\n#endif\n\t{\n\t\tEnigmaIOTNode.setNodeAddress (macAddress);\n\t\tDEBUG_DBG (\"Node address set to %s\", mac2str (macAddress));\n\t} else {\n\t\tDEBUG_WARN (\"Node address error\");\n\t}\n\n\tcontroller->sendDataCallback (sendUplinkData); // Listen for data from controller class\n\tcontroller->setup (&EnigmaIOTNode);\t\t\t   // Start controller class\n\n#if SLEEPY == 1\n\tEnigmaIOTNode.sleep ();\n#endif\n\n\tDEBUG_DBG (\"END setup\");\n}\n\nvoid loop () {\n    FailSafe.loop (BOOT_FLAG_TIMEOUT); // Use always this line\n\n    if (FailSafe.isActive ()) { // Skip all user loop code if Fail Safe mode is active\n        return;\n    }\n\n    controller->loop (); // Loop controller class\n#if SUPPORT_HA_DISCOVERY    \n    controller->callHAdiscoveryCalls (); // Send HA registration messages\n#endif // SUPPORT_HA_DISCOVERY \n    EnigmaIOTNode.handle (); // Mantain EnigmaIOT connection\n\n#if SLEEPY\n    FailSafe.resetFlag ();\n#endif\n}\n"
  },
  {
    "path": "examples/EnigmaIOT-DashButton-Controller/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n[env:esp8266-DashButtonController]\nextends = esp8266_node_common\nbuild_flags = \n    ${esp32_common.build_flags}\n    -DFS_USE_FLASH=1\n    -DFS_USE_LITTLEFS=1\nlib_deps = \n    ${esp8266_common.lib_deps}\n    FailSafeMode\n\n[env:esp32-DashButtonController]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\n"
  },
  {
    "path": "examples/EnigmaIOT-DashButton-Controller/readme.md",
    "content": "# EnigmaIOT Dash Button Controller\n\nThis shows the simplest implementation of [EnigmaIOTjsonController.h](https://github.com/gmag11/EnigmaIOT/blob/dev/src/EnigmaIOTjsonController.h) using deep sleep mode.\n\nA message is sent when node wakes from deep sleep, after triggering RESET button. Then it enters deep sleep mode again for an indefinite time. So reset is the only way to wake the node.\n\nThis may be used as a Dash Button like device. Other uses may be a door sensor, a PIR movement detector, a laser barrier or any other sensor that may trigger reset when activated.\n\nUsing [EnigmaIOT Gateway MQTT](https://github.com/gmag11/EnigmaIOT/tree/dev/examples/EnigmaIOTGatewayMQTT), message from Dash Button controller produces this output.\n\n```\n<Network_name>/<node_name or node_address>/data  {\"button\":1}\n```\n\nNo configuration data is added here to keep example as simple as possible."
  },
  {
    "path": "examples/EnigmaIOT-Json-Controller-Template/.gitignore",
    "content": ".pio\n.vscode\n"
  },
  {
    "path": "examples/EnigmaIOT-Json-Controller-Template/BasicController.cpp",
    "content": "// \n// \n// \n\n#include <functional>\n#include \"BasicController.h\"\n\nusing namespace std;\nusing namespace placeholders;\n\nconstexpr auto CONFIG_FILE = \"/customconf.json\"; ///< @brief Custom configuration file name\n\n// -----------------------------------------\n// You may add some global variables you need here,\n// like serial port instances, I2C, etc\n// -----------------------------------------\n\nbool CONTROLLER_CLASS_NAME::processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\t// Process incoming messages here\n\t// They are normally encoded as MsgPack so you can confert them to JSON very easily\n\treturn true;\n}\n\n\nbool CONTROLLER_CLASS_NAME::sendCommandResp (const char* command, bool result) {\n\t// Respond to command with a result: true if successful, false if failed \n\treturn true;\n}\n\nvoid CONTROLLER_CLASS_NAME::connectInform () {\n\n#if SUPPORT_HA_DISCOVERY    \n// Register every HAEntity discovery function here. As many as you need\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHADiscovery, this));\n#endif\n\n    EnigmaIOTjsonController::connectInform ();\n}\n\nvoid CONTROLLER_CLASS_NAME::setup (EnigmaIOTNodeClass* node, void* data) {\n\tenigmaIotNode = node;\n\n    // You do node setup here. Use it as it was the normal setup() Arduino function\n\n    // Send a 'hello' message when initalizing is finished\n    if (!(enigmaIotNode->getNode ()->getSleepy ())) {\n        sendStartAnouncement ();  // Disable this if node is sleepy\n    }\n\n\tDEBUG_DBG (\"Finish begin\");\n\n\t// If your node should sleep after sending data do all remaining tasks here\n}\n\nvoid CONTROLLER_CLASS_NAME::loop () {\n\n\t// If your node stays allways awake do your periodic task here\n\n\t// You can send your data as JSON. This is a basic example\n\n\t\t//const size_t capacity = JSON_OBJECT_SIZE (4);\n\t\t//DynamicJsonDocument json (capacity);\n\t\t//json[\"sensor\"] = data_description;\n\t\t//json[\"meas\"] = measurement;\n\n\t\t//sendJson (json);\n\n}\n\nCONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME () {\n\t// It your class uses dynamic data free it up here\n\t// This is normally not needed but it is a good practice\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerStart () {\n\tDEBUG_INFO (\"==== CCost Controller Configuration start ====\");\n\t// If you need to add custom configuration parameters do it here\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerExit (bool status) {\n\tDEBUG_INFO (\"==== CCost Controller Configuration result ====\");\n\t// You can read configuration paramenter values here\n}\n\nbool CONTROLLER_CLASS_NAME::loadConfig () {\n\t// If you need to read custom configuration data do it here\n\treturn true;\n}\n\nbool CONTROLLER_CLASS_NAME::saveConfig () {\n\t// If you need to save custom configuration data do it here\n\treturn true;\n}\n\n#if SUPPORT_HA_DISCOVERY   \n// Repeat this method for every entity\nvoid CONTROLLER_CLASS_NAME::buildHADiscovery () {\n    // Select corresponding HAEntiny type\n    HATrigger* haEntity = new HATrigger ();\n\n    uint8_t* msgPackBuffer;\n\n    if (!haEntity) {\n        DEBUG_WARN (\"JSON object instance does not exist\");\n        return;\n    }\n\n    // *******************************\n    // Add your characteristics here\n    // There is no need to futher modify this function\n    \n    haEntity->setType (button_short_press);\n    haEntity->setSubtype (turn_on);\n\n    // *******************************\n\n    size_t bufferLen = haEntity->measureMessage ();\n\n    msgPackBuffer = (uint8_t*)malloc (bufferLen);\n\n    size_t len = haEntity->getAnounceMessage (bufferLen, msgPackBuffer);\n\n    DEBUG_INFO (\"Resulting MSG pack length: %d\", len);\n\n    if (!sendHADiscovery (msgPackBuffer, len)) {\n        DEBUG_WARN (\"Error sending HA discovery message\");\n    }\n\n    if (haEntity) {\n        delete (haEntity);\n    }\n\n    if (msgPackBuffer) {\n        free (msgPackBuffer);\n    }\n}\n#endif // SUPPORT_HA_DISCOVERY\n"
  },
  {
    "path": "examples/EnigmaIOT-Json-Controller-Template/BasicController.h",
    "content": "// BasicController.h\n\n#ifndef _BASICCONTROLLER_h\n#define _BASICCONTROLLER_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n//#define DEBUG_SERIAL\n\n#include <EnigmaIOTjsonController.h>\n#define CONTROLLER_CLASS_NAME BasicController\nstatic const char* CONTROLLER_NAME = \"EnigmaIOT controller template\";\n\n#if SUPPORT_HA_DISCOVERY    \n#include <haTrigger.h>\n#endif\n\n// --------------------------------------------------\n// You may define data structures and constants here\n// --------------------------------------------------\n\nclass CONTROLLER_CLASS_NAME : EnigmaIOTjsonController {\nprotected:\n\t// --------------------------------------------------\n\t// add all parameters that your project needs here\n\t// --------------------------------------------------\n\npublic:\n    /**\n     * @brief Initializes controller structures\n     * @param node Pointer to EnigmaIOT gateway instance\n     * @param data Parameter data for controller\n     */\n\tvoid setup (EnigmaIOTNodeClass* node, void* data = NULL);\n\n    /**\n     * @brief Processes received GET or SET commands\n     * @param address Origin MAC address\n     * @param buffer Command payload\n     * @param length Payload length in bytes\n     * @param command Command type. nodeMessageType_t::DOWNSTREAM_DATA_GET or nodeMessageType_t::DOWNSTREAM_DATA_SET\n     * @param payloadEncoding Payload encoding. MSG_PACK is recommended\n     */\n\tbool processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding);\n\n    /**\n     * @brief Executes repetitive tasks on controller\n     */\n\tvoid loop ();\n\n    /**\n     * @brief Default destructor\n     */\n\t~CONTROLLER_CLASS_NAME ();\n\n\t/**\n\t * @brief Called when wifi manager starts config portal\n\t */\n\tvoid configManagerStart ();\n\n\t/**\n\t * @brief Called when wifi manager exits config portal\n\t * @param status `true` if configuration was successful\n\t */\n\tvoid configManagerExit (bool status);\n\n\t/**\n\t * @brief Loads output module configuration\n\t * @return Returns `true` if load was successful. `false` otherwise\n\t */\n\tbool loadConfig ();\n\n    /**\n     * @brief Executed as soon as node is registered on EnigmaIOT network\n     */\n    void connectInform ();\n\nprotected:\n\t/**\n\t  * @brief Saves output module configuration\n\t  * @return Returns `true` if save was successful. `false` otherwise\n\t  */\n\tbool saveConfig ();\n\n    /**\n     * @brief Send response to commands to gateway\n     * @param command Refered command\n     * @param result `true` if command was correctly executed, `false` otherwise\n     */\n\tbool sendCommandResp (const char* command, bool result);\n\n    /**\n     * @brief Sends a notification message including configurable controller name and protocol version\n     */\n    bool sendStartAnouncement () {\n        // You can send a 'hello' message when your node starts. Useful to detect unexpected reboot\n        const size_t capacity = JSON_OBJECT_SIZE (10);\n        DynamicJsonDocument json (capacity);\n        json[\"status\"] = \"start\";\n        json[\"device\"] = CONTROLLER_NAME;\n        char version_buf[10];\n        snprintf (version_buf, 10, \"%d.%d.%d\",\n                  ENIGMAIOT_PROT_VERS[0], ENIGMAIOT_PROT_VERS[1], ENIGMAIOT_PROT_VERS[2]);\n        json[\"version\"] = String (version_buf);\n\n        return sendJson (json);\n    }\n\n    /**\n     * @brief Sends a HA discovery message for a single entity. Add as many functions like this\n     * as number of entities you need to create\n     */\n    void buildHADiscovery ();\n\n\t// ------------------------------------------------------------\n\t// You may add additional method definitions that you need here\n\t// ------------------------------------------------------------\n};\n\n#endif\n\n"
  },
  {
    "path": "examples/EnigmaIOT-Json-Controller-Template/EnigmaIOT-Json-Controller-Template.ino",
    "content": "/**\n  * @file EnigmaIOT-Json-Controller-Template.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Node template for easy custom node creation\n  *\n  * Using this template you may create custom nodes in minutes by adding your code in a class.\n  * You only need to edit BasicController.h and BasicController.cpp with your code.\n  * All EnigmaIOT management is done internally\n  */\n\n#if !defined ESP8266 && !defined ESP32\n#error Node only supports ESP8266 or ESP32 platform\n#endif\n\n#include <Arduino.h>\n#include <EnigmaIOTjsonController.h>\n#include <FailSafe.h>\n#include \"BasicController.h\" // <-- Include here your controller class header\n\n#include <EnigmaIOTNode.h>\n#include <espnow_hal.h>\n#include <ArduinoJson.h>\n\n#ifdef ESP8266\n#include <ESP8266WiFi.h>\n#elif defined ESP32\n#include <WiFi.h>\n#include <Update.h>\n#include <driver/adc.h>\n#include \"esp_wifi.h\"\n#endif\n#include <ArduinoJson.h>\n\n#ifndef SLEEPY\n#define SLEEPY 0 // Set it to 1 if your node should sleep after sending data\n#endif // SLEEPY\n\n#ifndef LED_BUILTIN\n#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5\n#endif // LED_BUILTIN\n\n// If you do need serial for your project you must disable serial debug by commenting next line\n#define USE_SERIAL // Don't forget to set DEBUG_LEVEL to NONE if serial is disabled\n\n#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled\n\nEnigmaIOTjsonController* controller; // Generic controller is refferenced here. You do not need to modify it\n\n#define RESET_PIN 13 // You can set a different configuration reset pin here. Check for conflicts with used pins.\n\nconst time_t BOOT_FLAG_TIMEOUT = 10000; // Time in ms to reset flag\nconst int MAX_CONSECUTIVE_BOOT = 3; // Number of rapid boot cycles before enabling fail safe mode\nconst int LED = LED_BUILTIN; // Number of rapid boot cycles before enabling fail safe mode\nconst int FAILSAFE_RTC_ADDRESS = 0; // If you use RTC memory adjust offset to not overwrite other data\n#if SLEEPY\nconst int SLEEP_TIME = 10; // Sleep time time in secons.\n#endif\n\n// Called when node is connected to gateway. You don't need to do anything here usually\nvoid connectEventHandler () {\n\tcontroller->connectInform ();\n\tDEBUG_WARN (\"Connected\");\n}\n\n// Called when node is unregistered from gateway. You don't need to do anything here usually\nvoid disconnectEventHandler (nodeInvalidateReason_t reason) {\n\tDEBUG_WARN (\"Disconnected. Reason %d\", reason);\n}\n\n// Called to route messages to EnitmaIOTNode class. Do not modify\nbool sendUplinkData (const uint8_t* data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType) {\n    if (dataMsgType == DATA_TYPE) {\n        return EnigmaIOTNode.sendData (data, len, payloadEncoding);\n    } else if (dataMsgType == HA_DISC_TYPE) {\n        return EnigmaIOTNode.sendHADiscoveryMessage (data, len);\n    } else {\n        return false;\n    }\n}\n\n// Called to route incoming messages to your code. Do not modify\nvoid processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\tif (controller->processRxCommand (mac, buffer, length, command, payloadEncoding)) {\n\t\tDEBUG_INFO (\"Command processed\");\n\t} else {\n\t\tDEBUG_WARN (\"Command error\");\n\t}\n}\n\n// Do not modify\nvoid wifiManagerExit (bool status) {\n\tcontroller->configManagerExit (status);\n}\n\n// Do not modify\nvoid wifiManagerStarted () {\n\tcontroller->configManagerStart ();\n}\n\nvoid setup () {\n\n#ifdef USE_SERIAL\n\tSerial.begin (921600);\n\tdelay (1000); // Only for testing\n\tSerial.println ();\n#endif\n\n    FailSafe.checkBoot (MAX_CONSECUTIVE_BOOT, LED, FAILSAFE_RTC_ADDRESS); // Parameters are optional\n    if (FailSafe.isActive ()) { // Skip all user setup if fail safe mode is activated\n        return;\n    }\n\n\tcontroller = (EnigmaIOTjsonController*)new CONTROLLER_CLASS_NAME (); // Use your class name here\n\n\tEnigmaIOTNode.setLed (BLUE_LED); // Set communication LED\n\tEnigmaIOTNode.setResetPin (RESET_PIN); // Set reset pin\n\tEnigmaIOTNode.onConnected (connectEventHandler); // Configure registration handler\n\tEnigmaIOTNode.onDisconnected (disconnectEventHandler); // Configure unregistration handler\n\tEnigmaIOTNode.onDataRx (processRxData); // Configure incoming data handler\n\tEnigmaIOTNode.enableClockSync (false); // Set to true if you need this node to get its clock syncronized with gateway\n\tEnigmaIOTNode.onWiFiManagerStarted (wifiManagerStarted);\n\tEnigmaIOTNode.onWiFiManagerExit (wifiManagerExit);\n\tEnigmaIOTNode.enableBroadcast ();\n\n\tif (!controller->loadConfig ()) { // Trigger custom configuration loading\n\t\tDEBUG_WARN (\"Error reading config file\");\n\t\tif (FILESYSTEM.format ())\n            DEBUG_WARN (\"File System Formatted\");\n\t}\n\n    EnigmaIOTNode.begin (&Espnow_hal, NULL, NULL, true, SLEEPY == 1); // Start EnigmaIOT communication\n#if SLEEPY\n    // EnigmaIOTNode.setSleepTime (SLEEP_TIME, true); // Optional\n#endif\n\n\tuint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n\t// Set Address using internal MAC Address. Do not modify\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress))\n#elif defined ESP32\n\tif ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))\n#endif\n\t{\n\t\tEnigmaIOTNode.setNodeAddress (macAddress);\n\t\tDEBUG_DBG (\"Node address set to %s\", mac2str (macAddress));\n\t} else {\n\t\tDEBUG_WARN (\"Node address error\");\n\t}\n\n\tcontroller->sendDataCallback (sendUplinkData); // Listen for data from controller class\n\tcontroller->setup (&EnigmaIOTNode);\t\t\t   // Start controller class\n\n#if SLEEPY\n\tEnigmaIOTNode.sleep ();\n#endif\n\n\tDEBUG_DBG (\"END setup\");\n}\n\nvoid loop () {\n    FailSafe.loop (BOOT_FLAG_TIMEOUT); // Use always this line\n\n    if (FailSafe.isActive ()) { // Skip all user loop code if Fail Safe mode is active\n        return;\n    }\n\n    controller->loop (); // Loop controller class\n#if SUPPORT_HA_DISCOVERY \n    controller->callHAdiscoveryCalls (); // Send HA registration messages\n#endif // SUPPORT_HA_DISCOVERY \n\tEnigmaIOTNode.handle (); // Mantain EnigmaIOT connection\n\n#if SLEEPY\n    FailSafe.resetFlag ();\n#endif\n\n}\n"
  },
  {
    "path": "examples/EnigmaIOT-Json-Controller-Template/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n[env:esp8266-JsonControllerTemplate]\nextends = esp8266_node_common\nlib_deps = \n    ${esp8266_common.lib_deps}\n    FailSafeMode\nbuild_flags = \n    ${esp8266_common.build_flags}\n    -DFS_USE_FLASH=1\n    -DFS_USE_LITTLEFS=1\n\n\n[env:esp32-JsonControllerTemplate]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\n\n"
  },
  {
    "path": "examples/EnigmaIOT-Json-Controller-Template/readme.md",
    "content": "# EnigmaIOT JSON Controller Template\n\nThis adds a layer to EnigmaIOT node using the concept of **controller**.\n\nA controller is a class that gets data and execute commands in peripherals of a node. Those peripherals may be sensors, buttons, relays, leds or any other hardware that you may use in a microcontroller hardware.\n\nEnigmaIOT library includes an interface definition in [EnigmaIOTjsonController.h](https://github.com/gmag11/EnigmaIOT/blob/dev/src/EnigmaIOTjsonController.h) that you need to implement in order to include EnigmaIOT communication to a simple project.\n\nThis example may be used as a template to start to develop any kind of node. It allows sending and receiving data hiding the complexity of layers below.\n\nIf your code needs configuration parameters that have to persist reboots, interface gives a simple way to add those parameters to EnigmaIOT node web configuration interface. Check other controller examples to see how this may be used.\n\nThis is called JSON controller because all user payload is encoded using JSON objects, so this makes that Gateway transfers data transparently to/from the right peer."
  },
  {
    "path": "examples/EnigmaIOT-Led-Controller/.gitignore",
    "content": ".pio\n.vscode"
  },
  {
    "path": "examples/EnigmaIOT-Led-Controller/EnigmaIOT-Led-Controller.ino",
    "content": "/**\n  * @file EnigmaIOT-Led-Controller.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Node template for easy custom node creation\n  */\n\n#if !defined ESP8266 && !defined ESP32\n#error Node only supports ESP8266 or ESP32 platform\n#endif\n\n#include <Arduino.h>\n#include <EnigmaIOTjsonController.h>\n#include <FailSafe.h>\n#include \"LedController.h\" // <-- Include here your controller class header\n\n#include <EnigmaIOTNode.h>\n#include <espnow_hal.h>\n#include <CayenneLPP.h>\n#include <ArduinoJson.h>\n\n#ifdef ESP8266\n#include <ESP8266WiFi.h>\n#include <ESP8266HTTPClient.h>\n#include <ESP8266httpUpdate.h>\n#include <ESPAsyncTCP.h> // Comment to compile for ESP32\n#include <Hash.h>\n#elif defined ESP32\n#include <WiFi.h>\n#include <SPIFFS.h>\n#include <AsyncTCP.h> // Comment to compile for ESP8266\n#include <SPIFFS.h>\n#include <Update.h>\n#include <driver/adc.h>\n#include \"esp_wifi.h\"\n#endif\n#include <ArduinoJson.h>\n#include <Curve25519.h>\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n#include <DNSServer.h>\n#include <FS.h>\n\n#define SLEEPY 0 // Set it to 1 if your node should sleep after sending data\n\n#ifndef LED_BUILTIN\n#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5\n#endif // !LED_BUILTIN\n\n// If you do need serial for your project you must disable serial debug by commenting next line\n#define USE_SERIAL // Don't forget to set DEBUG_LEVEL to NONE if serial is disabled\n\n#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled\n\nEnigmaIOTjsonController* controller; // Generic controller is refferenced here. You do not need to modify it\n\n#define RESET_PIN 13 // You can set a different configuration reset pin here. Check for conflicts with used pins.\n\nconst time_t BOOT_FLAG_TIMEOUT = 10000; // Time in ms to reset flag\nconst int MAX_CONSECUTIVE_BOOT = 3; // Number of rapid boot cycles before enabling fail safe mode\nconst int LED = LED_BUILTIN; // Number of rapid boot cycles before enabling fail safe mode\nconst int FAILSAFE_RTC_ADDRESS = 0; // If you use RTC memory adjust offset to not overwrite other data\n#if SLEEPY\nconst int SLEEP_TIME = 10; // Sleep time time in secons.\n#endif\n\n// Called when node is connected to gateway. You don't need to do anything here usually\nvoid connectEventHandler () {\n\tcontroller->connectInform ();\n\tDEBUG_WARN (\"Connected\");\n}\n\n// Called when node is unregistered from gateway. You don't need to do anything here usually\nvoid disconnectEventHandler (nodeInvalidateReason_t reason) {\n\tDEBUG_WARN (\"Disconnected. Reason %d\", reason);\n}\n\n// Called to route messages to EnitmaIOTNode class. Do not modify\nbool sendUplinkData (const uint8_t* data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType) {\n    if (dataMsgType == DATA_TYPE) {\n        return EnigmaIOTNode.sendData (data, len, payloadEncoding);\n    } else if (dataMsgType == HA_DISC_TYPE) {\n        return EnigmaIOTNode.sendHADiscoveryMessage (data, len);\n    } else {\n        return false;\n    }\n}\n\n// Called to route incoming messages to your code. Do not modify\nvoid processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\tif (controller->processRxCommand (mac, buffer, length, command, payloadEncoding)) {\n\t\tDEBUG_INFO (\"Command processed\");\n\t} else {\n\t\tDEBUG_WARN (\"Command error\");\n\t}\n}\n\n// Do not modify\nvoid wifiManagerExit (boolean status) {\n\tcontroller->configManagerExit (status);\n}\n\n// Do not modify\nvoid wifiManagerStarted () {\n\tcontroller->configManagerStart ();\n}\n\nvoid setup () {\n\n#ifdef USE_SERIAL\n\tSerial.begin (921600);\n\t//delay (1000);\n\tSerial.println ();\n#endif\n    FailSafe.checkBoot (MAX_CONSECUTIVE_BOOT, LED, FAILSAFE_RTC_ADDRESS); // Parameters are optional\n    if (FailSafe.isActive ()) { // Skip all user setup if fail safe mode is activated\n        return;\n    }\n\n\tcontroller = (EnigmaIOTjsonController*)new CONTROLLER_CLASS_NAME (); // Use your class name here\n\n\t//EnigmaIOTNode.setLed (BLUE_LED); // Set communication LED\n\tEnigmaIOTNode.setResetPin (RESET_PIN); // Set reset pin\n\tEnigmaIOTNode.onConnected (connectEventHandler); // Configure registration handler\n\tEnigmaIOTNode.onDisconnected (disconnectEventHandler); // Configure unregistration handler\n\tEnigmaIOTNode.onDataRx (processRxData); // Configure incoming data handler\n\tEnigmaIOTNode.enableClockSync (true); // Set to true if you need this node to get its clock syncronized with gateway\n\t\t\t\t\t\t\t\t\t\t  // You should enable it if your node noes not send any periodic data\n\tEnigmaIOTNode.onWiFiManagerStarted (wifiManagerStarted);\n\tEnigmaIOTNode.onWiFiManagerExit (wifiManagerExit);\n\n\tif (!controller->loadConfig ()) { // Trigger custom configuration loading\n\t\tDEBUG_WARN (\"Error reading config file\");\n\t\tif (FILESYSTEM.format ())\n\t\t\tDEBUG_WARN (\"SPIFFS Formatted\");\n\t}\n\n\tEnigmaIOTNode.begin (&Espnow_hal, NULL, NULL, true, SLEEPY == 1); // Start EnigmaIOT communication\n#if SLEEPY\n    EnigmaIOTNode.setSleepTime (SLEEP_TIME, true);\n#endif\n    \n\tuint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n\t// Set Address using internal MAC Address. Do not modify\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress))\n#elif defined ESP32\n\tif ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))\n#endif\n\t{\n\t\tEnigmaIOTNode.setNodeAddress (macAddress);\n\t\tchar macStr[ENIGMAIOT_ADDR_LEN * 3];\n\t\tDEBUG_DBG (\"Node address set to %s\", mac2str (macAddress, macStr));\n\t} else {\n\t\tDEBUG_WARN (\"Node address error\");\n\t}\n\n\tcontroller->sendDataCallback (sendUplinkData); // Listen for data from controller class\n\tcontroller->setup (&EnigmaIOTNode);\t\t\t   // Start controller class\n\n#if SLEEPY\n\tEnigmaIOTNode.sleep ();\n#endif\n\n\tDEBUG_DBG (\"END setup\");\n}\n\nvoid loop () {\n    FailSafe.loop (BOOT_FLAG_TIMEOUT); // Use always this line\n\n    if (FailSafe.isActive ()) { // Skip all user loop code if Fail Safe mode is active\n        return;\n    }\n\n\tcontroller->loop (); // Loop controller class\n#if SUPPORT_HA_DISCOVERY \n    controller->callHAdiscoveryCalls (); // Send HA registration messages\n#endif // SUPPORT_HA_DISCOVERY \n    EnigmaIOTNode.handle (); // Mantain EnigmaIOT connection\n}\n"
  },
  {
    "path": "examples/EnigmaIOT-Led-Controller/LedController.cpp",
    "content": "// \n// \n// \n\n#include <functional>\n#include \"LedController.h\"\n\nusing namespace std;\nusing namespace placeholders;\n\nconstexpr auto CONFIG_FILE = \"/customconf.json\"; ///< @brief Custom configuration file name\n\n// -----------------------------------------\n// You may add some global variables you need here,\n// like serial port instances, I2C, etc\n// -----------------------------------------\n\nconst char* ledKey = \"led\";\nconst char* commandKey = \"cmd\";\n\n\nbool CONTROLLER_CLASS_NAME::processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\t// Process incoming messages here\n\t// They are normally encoded as MsgPack so you can confert them to JSON very easily\n\n\t// Check command type\n\tif (command != nodeMessageType_t::DOWNSTREAM_DATA_GET && command != nodeMessageType_t::DOWNSTREAM_DATA_SET) {\n\t\tDEBUG_WARN (\"Wrong message type\");\n\t\treturn false;\n\t}\n\t// Check payload encoding\n\tif (payloadEncoding != MSG_PACK) {\n\t\tDEBUG_WARN (\"Wrong payload encoding\");\n\t\treturn false;\n\t}\n\n\t// Decode payload\n\tDynamicJsonDocument doc (256);\n\tuint8_t tempBuffer[MAX_MESSAGE_LENGTH];\n\n\tmemcpy (tempBuffer, buffer, length);\n\tDeserializationError error = deserializeMsgPack (doc, tempBuffer, length);\n\t// Check decoding\n\tif (error != DeserializationError::Ok) {\n\t\tDEBUG_WARN (\"Error decoding command: %s\", error.c_str ());\n\t\treturn false;\n\t}\n\n\tDEBUG_WARN (\"Command: %d = %s\", command, command == nodeMessageType_t::DOWNSTREAM_DATA_GET ? \"GET\" : \"SET\");\n\n\t// Dump debug data\n\tsize_t strLen = measureJson (doc) + 1;\n\tchar* strBuffer = (char*)malloc (strLen);\n\tserializeJson (doc, strBuffer, strLen);\n\tDEBUG_WARN (\"Data: %s\", strBuffer);\n\tfree (strBuffer);\n\n\t// Check cmd field on JSON data\n\tif (!doc.containsKey (commandKey)) {\n\t\tDEBUG_WARN (\"Wrong format\");\n\t\treturn false;\n\t}\n\n\t// Get state\n\tif (command == nodeMessageType_t::DOWNSTREAM_DATA_GET) {\n\t\tif (!strcmp (doc[commandKey], ledKey)) {\n\t\t\tDEBUG_WARN (\"Request LED status. LED = %s\", led == _LED_ON ? \"ON\" : \"OFF\");\n\t\t\tif (!sendLedStatus ()) {\n\t\t\t\tDEBUG_WARN (\"Error sending LED status\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set state\n\tif (command == nodeMessageType_t::DOWNSTREAM_DATA_SET) {\n\t\tif (!strcmp (doc[commandKey], ledKey)) {\n\t\t\tif (doc.containsKey (ledKey)) {\n\t\t\t\tif (doc[ledKey].as<int> () == 1) {\n\t\t\t\t\tled = _LED_ON;\n\t\t\t\t} else if (doc[ledKey].as<int> () == 0) {\n\t\t\t\t\tled = _LED_OFF;\n\t\t\t\t} else {\n\t\t\t\t\tDEBUG_WARN (\"Wrong LED value: %d\", doc[ledKey].as<int> ());\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tDEBUG_WARN (\"Set LED status to %s\", led == _LED_ON ? \"ON\" : \"OFF\");\n\t\t\t} else {\n\t\t\t\tDEBUG_WARN (\"Wrong format\");\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Confirm command execution with send state\n\t\t\tif (!sendLedStatus ()) {\n\t\t\t\tDEBUG_WARN (\"Error sending LED status\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\n\treturn true;\n}\n\nbool CONTROLLER_CLASS_NAME::sendLedStatus () {\n\tconst size_t capacity = JSON_OBJECT_SIZE (2);\n\tDynamicJsonDocument json (capacity);\n\n\tjson[commandKey] = ledKey;\n    json[ledKey] = led ? _LED_ON : _LED_OFF;\n\n\treturn sendJson (json);\n}\n\n\nbool CONTROLLER_CLASS_NAME::sendCommandResp (const char* command, bool result) {\n\t// Respond to command with a result: true if successful, false if failed \n\treturn true;\n}\n\nvoid CONTROLLER_CLASS_NAME::connectInform () {\n\n#if SUPPORT_HA_DISCOVERY    \n    // Register every HAEntity discovery function here. As many as you need\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHADiscovery, this));\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::sendLedStatus, this));\n#endif\n\n    EnigmaIOTjsonController::connectInform ();\n}\n\nvoid CONTROLLER_CLASS_NAME::setup (EnigmaIOTNodeClass* node, void* data) {\n\tenigmaIotNode = node;\n\n\t// You do node setup here. Use it as it was the normal setup() Arduino function\n\tpinMode (LED_PIN, OUTPUT);\n\tdigitalWrite (LED_PIN, _LED_ON);\n\n\t// Send a 'hello' message when initalizing is finished\n    sendStartAnouncement ();\n    \n    sendLedStatus ();\n    \n\tDEBUG_DBG (\"Finish begin\");\n\n\t// If your node should sleep after sending data do all remaining tasks here\n}\n\nvoid CONTROLLER_CLASS_NAME::loop () {\n\n\t// If your node stays allways awake do your periodic task here\n\tdigitalWrite (LED_PIN, led);\n}\n\nCONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME () {\n\t// It your class uses dynamic data free it up here\n\t// This is normally not needed but it is a good practice\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerStart () {\n\tDEBUG_INFO (\"==== CCost Controller Configuration start ====\");\n\t// If you need to add custom configuration parameters do it here\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerExit (bool status) {\n\tDEBUG_INFO (\"==== CCost Controller Configuration result ====\");\n\t// You can read configuration paramenter values here\n}\n\nbool CONTROLLER_CLASS_NAME::loadConfig () {\n\t// If you need to read custom configuration data do it here\n\treturn true;\n}\n\nbool CONTROLLER_CLASS_NAME::saveConfig () {\n\t// If you need to save custom configuration data do it here\n\treturn true;\n}\n\n#if SUPPORT_HA_DISCOVERY   \n// Repeat this method for every entity\nvoid CONTROLLER_CLASS_NAME::buildHADiscovery () {\n    // Select corresponding HAEntiny type\n    HASwitch* haEntity = new HASwitch ();\n\n    uint8_t* msgPackBuffer;\n\n    if (!haEntity) {\n        DEBUG_WARN (\"JSON object instance does not exist\");\n        return;\n    }\n\n    // *******************************\n    // Add your characteristics here\n    // There is no need to futher modify this function\n\n    //haEntity->setNameSufix (\"switch\");\n    haEntity->setPayloadOff (\"{\\\"cmd\\\":\\\"led\\\",\\\"led\\\":0}\");\n    haEntity->setPayloadOn (\"{\\\"cmd\\\":\\\"led\\\",\\\"led\\\":1}\");\n    haEntity->setValueField (\"led\");\n    haEntity->setStateOff (0);\n    haEntity->setStateOn (1);\n\n    // *******************************\n\n    size_t bufferLen = haEntity->measureMessage ();\n\n    msgPackBuffer = (uint8_t*)malloc (bufferLen);\n\n    size_t len = haEntity->getAnounceMessage (bufferLen, msgPackBuffer);\n\n    DEBUG_INFO (\"Resulting MSG pack length: %d\", len);\n\n    if (!sendHADiscovery (msgPackBuffer, len)) {\n        DEBUG_WARN (\"Error sending HA discovery message\");\n    }\n\n    if (haEntity) {\n        delete (haEntity);\n    }\n\n    if (msgPackBuffer) {\n        free (msgPackBuffer);\n    }\n}\n#endif // SUPPORT_HA_DISCOVERY\n"
  },
  {
    "path": "examples/EnigmaIOT-Led-Controller/LedController.h",
    "content": "// BasicController.h\n\n#ifndef _BASICCONTROLLER_h\n#define _BASICCONTROLLER_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n//#define DEBUG_SERIAL\n\n#ifdef ESP32\n#include <SPIFFS.h>\n#endif\n\n#include <EnigmaIOTjsonController.h>\n#define CONTROLLER_CLASS_NAME LedController\nstatic const char* CONTROLLER_NAME = \"LED controller\";\n\n#if SUPPORT_HA_DISCOVERY    \n#include <haSwitch.h>\n#endif\n\n// --------------------------------------------------\n// You may define data structures and constants here\n// --------------------------------------------------\n#define LED_PIN 2\n#define _LED_ON LOW\n#define _LED_OFF !_LED_ON\n\nclass CONTROLLER_CLASS_NAME : EnigmaIOTjsonController {\nprotected:\n\t// --------------------------------------------------\n\t// add all parameters that your project needs here\n\t// --------------------------------------------------\n\tint led = _LED_OFF;\n\npublic:\n\tvoid setup (EnigmaIOTNodeClass* node, void* data = NULL);\n\n\tbool processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding);\n\n\tvoid loop ();\n\n\t~CONTROLLER_CLASS_NAME ();\n\n\t/**\n\t * @brief Called when wifi manager starts config portal\n\t * @param node Pointer to EnigmaIOT gateway instance\n\t */\n\tvoid configManagerStart ();\n\n\t/**\n\t * @brief Called when wifi manager exits config portal\n\t * @param status `true` if configuration was successful\n\t */\n\tvoid configManagerExit (bool status);\n\n\t/**\n\t * @brief Loads output module configuration\n\t * @return Returns `true` if load was successful. `false` otherwise\n\t */\n\tbool loadConfig ();\n\n    void connectInform ();\n\nprotected:\n\t/**\n\t  * @brief Saves output module configuration\n\t  * @return Returns `true` if save was successful. `false` otherwise\n\t  */\n\tbool saveConfig ();\n\n\tbool sendCommandResp (const char* command, bool result);\n\n    bool sendStartAnouncement () {\n        // You can send a 'hello' message when your node starts. Useful to detect unexpected reboot\n        const size_t capacity = JSON_OBJECT_SIZE (10);\n        DynamicJsonDocument json (capacity);\n        json[\"status\"] = \"start\";\n        json[\"device\"] = CONTROLLER_NAME;\n        char version_buf[10];\n        snprintf (version_buf, 10, \"%d.%d.%d\",\n                  ENIGMAIOT_PROT_VERS[0], ENIGMAIOT_PROT_VERS[1], ENIGMAIOT_PROT_VERS[2]);\n        json[\"version\"] = String (version_buf);\n\n        return sendJson (json);\n    }\n\n    void buildHADiscovery ();\n    \n    // ------------------------------------------------------------\n\t// You may add additional method definitions that you need here\n\t// ------------------------------------------------------------\n\n\tbool sendLedStatus ();\n};\n\n#endif\n\n"
  },
  {
    "path": "examples/EnigmaIOT-Led-Controller/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n[env:esp8266-LedController]\nextends = esp8266_node_common\nlib_deps = \n    ${esp8266_common.lib_deps}\n    FailSafeMode\nbuild_flags = \n    ${esp8266_common.build_flags}\n    -DFS_USE_FLASH=1\n    -DFS_USE_LITTLEFS=1\n\n[env:esp32-LedController]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\n"
  },
  {
    "path": "examples/EnigmaIOT-Led-Controller/readme.md",
    "content": "# EnigmaIOT Led Controller\n\nThis shows the simplest implementation of [EnigmaIOTjsonController.h](https://github.com/gmag11/EnigmaIOT/blob/dev/src/EnigmaIOTjsonController.h) that accepts commands.\n\nLed can be turned on by sending the right command.\n\nUsing [EnigmaIOT Gateway MQTT](https://github.com/gmag11/EnigmaIOT/tree/dev/examples/EnigmaIOTGatewayMQTT), this node get commands if MQTT messages use this format.\n\n```\n<Network_name>/<node_name or node_address>/set/data  {\"cmd\":\"led\",\"led\":< 1 or 0 >}\n```\n\n- 1 means led on\n- 0 means led off\n\nYou may interrogate node for led status in any moment by sending this message\n\n```\n<Network_name>/<node_name or node_address>/get/data  {\"cmd\":\"led\"}\n```\n\nNode will answer with a message using this format.\n\n```\n<Network_name>/<node_name or node_address>/set/data  {\"cmd\":\"led\",\"led\":< 1 or 0 >}\n```\n\nNo configuration data is added here to keep example as simple as possible."
  },
  {
    "path": "examples/EnigmaIOT-Sensor-Controller/.gitignore",
    "content": ".pio\n.vscode"
  },
  {
    "path": "examples/EnigmaIOT-Sensor-Controller/EnigmaIOT-Sensor-Controller.ino",
    "content": "/**\n  * @file EnigmaIOT-Json-Controller-Template.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Node template for easy custom node creation\n  *\n  * Using this template you may create custom nodes in minutes by adding your code in a class.\n  * You only need to edit BasicController.h and BasicController.cpp with your code.\n  * All EnigmaIOT management is done internally\n  */\n\n#if !defined ESP8266 && !defined ESP32\n#error Node only supports ESP8266 or ESP32 platform\n#endif\n\n#include <Arduino.h>\n#include <EnigmaIOTjsonController.h>\n#include <FailSafe.h>\n#include \"ds18b20Controller.h\" // <-- Include here your controller class header\n#include <OneWire.h>\n#include <DallasTemperature.h>\n\n#include <EnigmaIOTNode.h>\n#include <espnow_hal.h>\n#include <CayenneLPP.h>\n#include <ArduinoJson.h>\n\n#ifdef ESP8266\n#include <ESP8266WiFi.h>\n#include <ESP8266HTTPClient.h>\n#include <ESP8266httpUpdate.h>\n#include <ESPAsyncTCP.h> // Comment to compile for ESP32\n#include <Hash.h>\n#elif defined ESP32\n#include <WiFi.h>\n#include <AsyncTCP.h> // Comment to compile for ESP8266\n#include <Update.h>\n#include <driver/adc.h>\n#include \"esp_wifi.h\"\n#endif\n#include <ArduinoJson.h>\n#include <Curve25519.h>\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n#include <DNSServer.h>\n#include <FS.h>\n\n#define SLEEPY 1 // Set it to 1 if your node should sleep after sending data\n\n#ifndef LED_BUILTIN\n#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5\n#endif // !LED_BUILTIN\n\n// If you do need serial for your project you must disable serial debug by commenting next line\n#define USE_SERIAL // Don't forget to set DEBUG_LEVEL to NONE if serial is disabled\n\n#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled\n\nEnigmaIOTjsonController* controller; // Generic controller is refferenced here. You do not need to modify it\n\n#define RESET_PIN 13 // You can set a different configuration reset pin here. Check for conflicts with used pins.\n\nconst time_t BOOT_FLAG_TIMEOUT = 10000; // Time in ms to reset flag\nconst int MAX_CONSECUTIVE_BOOT = 3; // Number of rapid boot cycles before enabling fail safe mode\nconst int LED = LED_BUILTIN; // Number of rapid boot cycles before enabling fail safe mode\nconst int FAILSAFE_RTC_ADDRESS = 0; // If you use RTC memory adjust offset to not overwrite other data\n#if SLEEPY\nconst int SLEEP_TIME = 10; // Sleep time time in secons.\n#endif\n\n// Called when node is connected to gateway. You don't need to do anything here usually\nvoid connectEventHandler () {\n    controller->connectInform ();\n\tDEBUG_WARN (\"Connected\");\n}\n\n// Called when node is unregistered from gateway. You don't need to do anything here usually\nvoid disconnectEventHandler (nodeInvalidateReason_t reason) {\n\tDEBUG_WARN (\"Disconnected. Reason %d\", reason);\n}\n\n// Called to route messages to EnitmaIOTNode class. Do not modify\nbool sendUplinkData (const uint8_t* data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType) {\n    if (dataMsgType == DATA_TYPE) {\n        return EnigmaIOTNode.sendData (data, len, payloadEncoding);\n    } else if (dataMsgType == HA_DISC_TYPE) {\n        return EnigmaIOTNode.sendHADiscoveryMessage (data, len);\n    } else {\n        return false;\n    }\n}\n\n// Called to route incoming messages to your code. Do not modify\nvoid processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\tif (controller->processRxCommand (mac, buffer, length, command, payloadEncoding)) {\n\t\tDEBUG_INFO (\"Command processed\");\n\t} else {\n\t\tDEBUG_WARN (\"Command error\");\n\t}\n}\n\n// Do not modify\nvoid wifiManagerExit (boolean status) {\n\tcontroller->configManagerExit (status);\n}\n\n// Do not modify\nvoid wifiManagerStarted () {\n\tcontroller->configManagerStart ();\n}\n\nvoid setup () {\n\n#ifdef USE_SERIAL\n    Serial.begin (921600);\n\t//delay (1000);\n\tSerial.println ();\n#endif\n\n    FailSafe.checkBoot (MAX_CONSECUTIVE_BOOT, LED, FAILSAFE_RTC_ADDRESS); // Parameters are optional\n    if (FailSafe.isActive ()) { // Skip all user setup if fail safe mode is activated\n        return;\n    }\n\n\tcontroller = (EnigmaIOTjsonController*)new CONTROLLER_CLASS_NAME (); // Use your class name here\n\n\tEnigmaIOTNode.setLed (BLUE_LED); // Set communication LED\n\tEnigmaIOTNode.setResetPin (RESET_PIN); // Set reset pin\n\tEnigmaIOTNode.onConnected (connectEventHandler); // Configure registration handler\n\tEnigmaIOTNode.onDisconnected (disconnectEventHandler); // Configure unregistration handler\n\tEnigmaIOTNode.onDataRx (processRxData); // Configure incoming data handler\n\tEnigmaIOTNode.enableClockSync (false); // Set to true if you need this node to get its clock syncronized with gateway\n\tEnigmaIOTNode.onWiFiManagerStarted (wifiManagerStarted);\n    EnigmaIOTNode.onWiFiManagerExit (wifiManagerExit);\n#if !SLEEPY \n    EnigmaIOTNode.enableBroadcast ();\n#endif\n\n\tif (!controller->loadConfig ()) { // Trigger custom configuration loading\n\t\tDEBUG_WARN (\"Error reading config file\");\n\t\tif (FILESYSTEM.format ())\n\t\t\tDEBUG_WARN (\"Filesystem Formatted\");\n\t}\n\n\tEnigmaIOTNode.begin (&Espnow_hal, NULL, NULL, true, SLEEPY == 1); // Start EnigmaIOT communication\n#if SLEEPY\n    // EnigmaIOTNode.setSleepTime (SLEEP_TIME, true);\n#endif\n    \n\tuint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n\t// Set Address using internal MAC Address. Do not modify\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress))\n#elif defined ESP32\n\tif ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))\n#endif\n\t{\n\t\tEnigmaIOTNode.setNodeAddress (macAddress);\n\t\tDEBUG_DBG (\"Node address set to %s\", mac2str (macAddress));\n\t} else {\n\t\tDEBUG_WARN (\"Node address error\");\n\t}\n\n\tcontroller->sendDataCallback (sendUplinkData); // Listen for data from controller class\n\tcontroller->setup (&EnigmaIOTNode);\t\t\t   // Start controller class\n\n#if SLEEPY\n\tEnigmaIOTNode.sleep ();\n#endif\n\n\tDEBUG_DBG (\"END setup\");\n}\n\nvoid loop () {\n    FailSafe.loop (BOOT_FLAG_TIMEOUT); // Use always this line\n\n    if (FailSafe.isActive ()) { // Skip all user loop code if Fail Safe mode is active\n        return;\n    }\n\n\tcontroller->loop (); // Loop controller class\n#if SUPPORT_HA_DISCOVERY \n    controller->callHAdiscoveryCalls (); // Send HA registration messages\n#endif // SUPPORT_HA_DISCOVERY \n    EnigmaIOTNode.handle (); // Mantain EnigmaIOT connection\n\n#if SLEEPY\n    FailSafe.resetFlag ();\n#endif\n}\n"
  },
  {
    "path": "examples/EnigmaIOT-Sensor-Controller/ds18b20Controller.cpp",
    "content": "// \n// \n// \n\n#include <functional>\n#include \"ds18b20Controller.h\"\n\nusing namespace std;\nusing namespace placeholders;\n\n#define TEST 0\n\nconstexpr auto CONFIG_FILE = \"/customconf.json\"; ///< @brief Custom configuration file name\n\n// -----------------------------------------\n// You may add some global variables you need here,\n// like serial port instances, I2C, etc\n// -----------------------------------------\n\n#define ONE_WIRE_BUS 4\n\n\nbool CONTROLLER_CLASS_NAME::processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\t// Process incoming messages here\n\t// They are normally encoded as MsgPack so you can confert them to JSON very easily\n\treturn true;\n}\n\n\nbool CONTROLLER_CLASS_NAME::sendCommandResp (const char* command, bool result) {\n\t// Respond to command with a result: true if successful, false if failed \n\treturn true;\n}\n\nbool CONTROLLER_CLASS_NAME::sendTemperature (float temp) {\n\tconst size_t capacity = JSON_OBJECT_SIZE (2);\n\tDynamicJsonDocument json (capacity);\n\tjson[\"temp\"] = temp;\n\n\treturn sendJson (json);\n}\n\nvoid CONTROLLER_CLASS_NAME::connectInform () {\n\n#if SUPPORT_HA_DISCOVERY    \n    // Register every HAEntity discovery function here. As many as you need\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHADiscovery, this));\n#endif\n\n    EnigmaIOTjsonController::connectInform ();\n}\n\nvoid CONTROLLER_CLASS_NAME::setup (EnigmaIOTNodeClass* node, void* data) {\n\tenigmaIotNode = node;\n\n\t// You do node setup here. Use it as it was the normal setup() Arduino function\n\n#if !TEST\n\toneWire = new OneWire (ONE_WIRE_BUS);\n\tsensors = new DallasTemperature (oneWire);\n\tsensors->begin ();\n\tsensors->setWaitForConversion (false);\n\tsensors->requestTemperatures ();\n#endif\n    time_t start = millis ();\n\n    // Send a 'hello' message when initalizing is finished\n    if (!enigmaIotNode->getNode ()->getSleepy ()) {\n        if (!(enigmaIotNode->getNode ()->getSleepy ())) {\n            sendStartAnouncement ();  // Disable this if node is sleepy\n        }\n    }\n\n#if !TEST\n\twhile (!sensors->isConversionComplete ()) {\n\t\tdelay (0);\n\t}\n\tDEBUG_WARN (\"Conversion completed in %d ms\", millis () - start);\n    tempC = sensors->getTempCByIndex (0);\n#else\n    tempC = 25.8;\n#endif\n    \n    // Send a 'hello' message when initalizing is finished\n    //sendStartAnouncement ();\n\n\tDEBUG_DBG (\"Finish begin\");\n\n\t// If your node should sleep after sending data do all remaining tasks here\n}\n\nvoid CONTROLLER_CLASS_NAME::loop () {\n\n\t// If your node stays allways awake do your periodic task here\n\n\t// You can send your data as JSON. This is a basic example\n\n    if (!tempSent && enigmaIotNode->isRegistered()) {\n        if (sendTemperature (tempC)) {\n            tempSent = true;\n        }\n        // else {\n        //}\n    }\n    \n        //const size_t capacity = JSON_OBJECT_SIZE (4);\n\t\t//DynamicJsonDocument json (capacity);\n\t\t//json[\"sensor\"] = data_description;\n\t\t//json[\"meas\"] = measurement;\n\n\t\t//sendJson (json);\n\n}\n\nCONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME () {\n\t// It your class uses dynamic data free it up here\n\t// This is normally not needed but it is a good practice\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerStart () {\n\tDEBUG_INFO (\"==== CCost Controller Configuration start ====\");\n\t// If you need to add custom configuration parameters do it here\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerExit (bool status) {\n\tDEBUG_INFO (\"==== CCost Controller Configuration result ====\");\n\t// You can read configuration paramenter values here\n}\n\nbool CONTROLLER_CLASS_NAME::loadConfig () {\n\t// If you need to read custom configuration data do it here\n\treturn true;\n}\n\nbool CONTROLLER_CLASS_NAME::saveConfig () {\n\t// If you need to save custom configuration data do it here\n\treturn true;\n}\n\n#if SUPPORT_HA_DISCOVERY   \n// Repeat this method for every entity\nvoid CONTROLLER_CLASS_NAME::buildHADiscovery () {\n    // Select corresponding HAEntiny type\n    HASensor* haEntity = new HASensor ();\n\n    uint8_t* msgPackBuffer;\n\n    if (!haEntity) {\n        DEBUG_WARN (\"JSON object instance does not exist\");\n        return;\n    }\n\n    // *******************************\n    // Add your characteristics here\n    // There is no need to futher modify this function\n\n    haEntity->setNameSufix (\"temp\");\n    haEntity->setDeviceClass (sensor_temperature);\n    haEntity->setExpireTime (3600);\n    haEntity->setUnitOfMeasurement (\"ºC\");\n    haEntity->setValueField (\"temp\");\n    //haEntity->setValueTemplate (\"{%if value_json.dp==2-%}{{value_json.temp}}{%-else-%}{{states('sensor.***_temp')}}{%-endif%}\");\n\n    // *******************************\n\n    size_t bufferLen = haEntity->measureMessage ();\n\n    msgPackBuffer = (uint8_t*)malloc (bufferLen);\n\n    size_t len = haEntity->getAnounceMessage (bufferLen, msgPackBuffer);\n\n    DEBUG_INFO (\"Resulting MSG pack length: %d\", len);\n\n    if (!sendHADiscovery (msgPackBuffer, len)) {\n        DEBUG_WARN (\"Error sending HA discovery message\");\n    }\n\n    if (haEntity) {\n        delete (haEntity);\n    }\n\n    if (msgPackBuffer) {\n        free (msgPackBuffer);\n    }\n}\n#endif // SUPPORT_HA_DISCOVERY\n"
  },
  {
    "path": "examples/EnigmaIOT-Sensor-Controller/ds18b20Controller.h",
    "content": "// BasicController.h\n\n#ifndef _DS18B20CONTROLLER_h\n#define _DS18B20CONTROLLER_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n//#define DEBUG_SERIAL\n\n#ifdef ESP32\n#include <SPIFFS.h>\n#endif\n\n#include <EnigmaIOTjsonController.h>\n#define CONTROLLER_CLASS_NAME ds18b20Controller\nstatic const char* CONTROLLER_NAME = \"DS18B20 controller\";\n\n#if SUPPORT_HA_DISCOVERY    \n#include <haSensor.h>\n#endif\n\n// --------------------------------------------------\n// You may define data structures and constants here\n// --------------------------------------------------\n#include <DallasTemperature.h>\n\n\nclass CONTROLLER_CLASS_NAME : EnigmaIOTjsonController {\nprotected:\n\t// --------------------------------------------------\n\t// add all parameters that your project needs here\n\t// --------------------------------------------------\n\tOneWire* oneWire;\n\tDallasTemperature* sensors;\n    DeviceAddress insideThermometer;\n    bool tempSent = false;\n    float tempC;\n\npublic:\n\tvoid setup (EnigmaIOTNodeClass* node, void* data = NULL);\n\n\tbool processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding);\n\n\tvoid loop ();\n\n\t~CONTROLLER_CLASS_NAME ();\n\n\t/**\n\t * @brief Called when wifi manager starts config portal\n\t * @param node Pointer to EnigmaIOT gateway instance\n\t */\n\tvoid configManagerStart ();\n\n\t/**\n\t * @brief Called when wifi manager exits config portal\n\t * @param status `true` if configuration was successful\n\t */\n\tvoid configManagerExit (bool status);\n\n\t/**\n\t * @brief Loads output module configuration\n\t * @return Returns `true` if load was successful. `false` otherwise\n\t */\n\tbool loadConfig ();\n\n    void connectInform ();\n\nprotected:\n\t/**\n\t  * @brief Saves output module configuration\n\t  * @return Returns `true` if save was successful. `false` otherwise\n\t  */\n\tbool saveConfig ();\n\n\tbool sendCommandResp (const char* command, bool result);\n\n    bool sendStartAnouncement () {\n        // You can send a 'hello' message when your node starts. Useful to detect unexpected reboot\n        const size_t capacity = JSON_OBJECT_SIZE (10);\n        DynamicJsonDocument json (capacity);\n        json[\"status\"] = \"start\";\n        json[\"device\"] = CONTROLLER_NAME;\n        char version_buf[10];\n        snprintf (version_buf, 10, \"%d.%d.%d\",\n                  ENIGMAIOT_PROT_VERS[0], ENIGMAIOT_PROT_VERS[1], ENIGMAIOT_PROT_VERS[2]);\n        json[\"version\"] = String (version_buf);\n\n        return sendJson (json);\n    }\n\n#if SUPPORT_HA_DISCOVERY    \n    /**\n     * @brief Sends a HA discovery message for a single entity. Add as many functions like this\n     * as number of entities you need to create\n     */\n    void buildHADiscovery ();\n#endif\n    \n    // ------------------------------------------------------------\n\t// You may add additional method definitions that you need here\n\t// ------------------------------------------------------------\n\n    bool sendTemperature (float temp);\n\n};\n\n#endif\n\n"
  },
  {
    "path": "examples/EnigmaIOT-Sensor-Controller/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n[env:esp8266-SensorController]\nextends = esp8266_node_common\nlib_deps = \n    ${esp8266_node_common.lib_deps}\n    FailSafeMode\n    paulstoffregen/OneWire\n    milesburton/DallasTemperature\nbuild_flags = \n    ${esp8266_common.build_flags}\n    -DFS_USE_FLASH=1\n    -DFS_USE_LITTLEFS=1\n\n[env:esp32-SensorController]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\n    paulstoffregen/OneWire\n    milesburton/DallasTemperature\n"
  },
  {
    "path": "examples/EnigmaIOT-Sensor-Controller/readme.md",
    "content": "# EnigmaIOT Sensor Controller\n\nEnigmaIOT Sensor Controller example shows how to create a node that reads a value from a sensor, sends its value and sleeps for a certain time.\n\nSensor used is a DS18B20 thermometer, connected to pin 4.\n\nOutput messages using EnigmaIOT Gateway MQTT is like this:\n\n```\n<Network_name>/<node_name or node_address>/data  {\"temp\":<temperature in celsius>}\n```\n\n"
  },
  {
    "path": "examples/EnigmaIOT-SmartSwitch-Controller/.gitignore",
    "content": ".pio\n.vscode"
  },
  {
    "path": "examples/EnigmaIOT-SmartSwitch-Controller/EnigmaIOT-SmartSwitch-Controller.ino",
    "content": "/**\n  * @file EnigmaIOT-SmartSwitch-Controller.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Node template for easy custom node creation\n  */\n\n#if !defined ESP8266 && !defined ESP32\n#error Node only supports ESP8266 or ESP32 platform\n#endif\n\n#include <Arduino.h>\n#include <EnigmaIOTjsonController.h>\n#include <FailSafe.h>\n#include \"SmartSwitchController.h\" // <-- Include here your controller class header\n\n#include <EnigmaIOTNode.h>\n#include <espnow_hal.h>\n#include <CayenneLPP.h>\n#include <ArduinoJson.h>\n\n#ifdef ESP8266\n#include <ESP8266WiFi.h>\n#include <ESP8266HTTPClient.h>\n#include <ESP8266httpUpdate.h>\n#include <ESPAsyncTCP.h> // Comment to compile for ESP32\n#include <Hash.h>\n#elif defined ESP32\n#include <WiFi.h>\n#include <SPIFFS.h>\n#include <AsyncTCP.h> // Comment to compile for ESP8266\n#include <SPIFFS.h>\n#include <Update.h>\n#include <driver/adc.h>\n#include \"esp_wifi.h\"\n#endif\n#include <ArduinoJson.h>\n#include <Curve25519.h>\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n#include <DNSServer.h>\n#include <FS.h>\n\n#define SLEEPY 0 // Set it to 1 if your node should sleep after sending data\n\n#ifndef LED_BUILTIN\n#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO3 or GPIO5\n#endif // !LED_BUILTIN\n\n// If you do need serial for your project you must disable serial debug by commenting next line\n#define USE_SERIAL // Don't forget to set DEBUG_LEVEL to NONE if serial is disabled\n\n#define BLUE_LED LED_BUILTIN // You can set a different LED pin here. -1 means disabled\n\nEnigmaIOTjsonController* controller; // Generic controller is refferenced here. You do not need to modify it\n\n#define RESET_PIN 4 // You can set a different configuration reset pin here. Check for conflicts with used pins.\n\nconst time_t BOOT_FLAG_TIMEOUT = 10000; // Time in ms to reset flag\nconst int MAX_CONSECUTIVE_BOOT = 3; // Number of rapid boot cycles before enabling fail safe mode\nconst int LED = LED_BUILTIN; // Number of rapid boot cycles before enabling fail safe mode\nconst int FAILSAFE_RTC_ADDRESS = 0; // If you use RTC memory adjust offset to not overwrite other data\n\n// Called when node is connected to gateway. You don't need to do anything here usually\nvoid connectEventHandler () {\n    controller->connectInform ();\n    DEBUG_WARN (\"Connected\");\n}\n\n// Called when node is unregistered from gateway. You don't need to do anything here usually\nvoid disconnectEventHandler (nodeInvalidateReason_t reason) {\n\tDEBUG_WARN (\"Disconnected. Reason %d\", reason);\n}\n\n// Called to route messages to EnitmaIOTNode class. Do not modify\nbool sendUplinkData (const uint8_t* data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType) {\n    if (dataMsgType == DATA_TYPE) {\n        return EnigmaIOTNode.sendData (data, len, payloadEncoding);\n    } else if (dataMsgType == HA_DISC_TYPE) {\n        return EnigmaIOTNode.sendHADiscoveryMessage (data, len);\n    } else {\n        return false;\n    }\n}\n\n// Called to route incoming messages to your code. Do not modify\nvoid processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\tif (controller->processRxCommand (mac, buffer, length, command, payloadEncoding)) {\n\t\tDEBUG_INFO (\"Command processed\");\n\t} else {\n\t\tDEBUG_WARN (\"Command error\");\n\t}\n}\n\n// Do not modify\nvoid wifiManagerExit (boolean status) {\n\tcontroller->configManagerExit (status);\n}\n\n// Do not modify\nvoid wifiManagerStarted () {\n\tcontroller->configManagerStart ();\n}\n\nvoid setup () {\n\n#ifdef USE_SERIAL\n    Serial.begin (921600);\n\t//delay (1000);\n\tSerial.println ();\n#endif\n    FailSafe.checkBoot (MAX_CONSECUTIVE_BOOT, LED, FAILSAFE_RTC_ADDRESS); // Parameters are optional\n    if (FailSafe.isActive ()) { // Skip all user setup if fail safe mode is activated\n        return;\n    }\n\n\tcontroller = (EnigmaIOTjsonController*)new CONTROLLER_CLASS_NAME (); // Use your class name here\n\n\tEnigmaIOTNode.setLed (BLUE_LED); // Set communication LED\n\tEnigmaIOTNode.setResetPin (RESET_PIN); // Set reset pin\n\tEnigmaIOTNode.onConnected (connectEventHandler); // Configure registration handler\n\tEnigmaIOTNode.onDisconnected (disconnectEventHandler); // Configure unregistration handler\n\tEnigmaIOTNode.onDataRx (processRxData); // Configure incoming data handler\n\tEnigmaIOTNode.enableClockSync (true); // Set to true if you need this node to get its clock syncronized with gateway\n\tEnigmaIOTNode.onWiFiManagerStarted (wifiManagerStarted);\n\tEnigmaIOTNode.onWiFiManagerExit (wifiManagerExit);\n\tEnigmaIOTNode.enableBroadcast ();\n\n\tif (!controller->loadConfig ()) { // Trigger custom configuration loading\n\t\tDEBUG_WARN (\"Error reading config file\");\n\t\tif (FILESYSTEM.format ())\n            DEBUG_WARN (\"FILESYSTEM Formatted\");\n\t}\n\n\tEnigmaIOTNode.begin (&Espnow_hal, NULL, NULL, true, SLEEPY == 1); // Start EnigmaIOT communication\n    \n    uint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n\t// Set Address using internal MAC Address. Do not modify\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress))\n#elif defined ESP32\n\tif ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))\n#endif\n\t{\n\t\tEnigmaIOTNode.setNodeAddress (macAddress);\n\t\tDEBUG_DBG (\"Node address set to %s\", mac2str (macAddress));\n\t} else {\n\t\tDEBUG_WARN (\"Node address error\");\n\t}\n\n\tcontroller->sendDataCallback (sendUplinkData); // Listen for data from controller class\n\tcontroller->setup (&EnigmaIOTNode);\t\t\t   // Start controller class\n\n#if SLEEPY == 1\n\tEnigmaIOTNode.sleep ();\n#endif\n\n\tDEBUG_DBG (\"END setup\");\n}\n\nvoid loop () {\n    FailSafe.loop (BOOT_FLAG_TIMEOUT); // Use always this line\n\n    if (FailSafe.isActive ()) { // Skip all user loop code if Fail Safe mode is active\n        return;\n    }\n\n    controller->loop (); // Loop controller class\n#if SUPPORT_HA_DISCOVERY \n    controller->callHAdiscoveryCalls (); // Send HA registration messages\n#endif // SUPPORT_HA_DISCOVERY \n    EnigmaIOTNode.handle (); // Mantain EnigmaIOT connection\n\n#if SLEEPY\n    FailSafe.resetFlag ();\n#endif\n}\n"
  },
  {
    "path": "examples/EnigmaIOT-SmartSwitch-Controller/SmartSwitchController.cpp",
    "content": "// \n// \n// \n\n#include <functional>\n#include \"SmartSwitchController.h\"\n\nusing namespace std;\nusing namespace placeholders;\n\nconstexpr auto CONFIG_FILE = \"/customconf.json\"; ///< @brief Custom configuration file name\n\n// -----------------------------------------\n// You may add some global variables you need here,\n// like serial port instances, I2C, etc\n// -----------------------------------------\nconst char* relayKey = \"rly\";\nconst char* commandKey = \"cmd\";\nconst char* buttonKey = \"button\";\nconst char* linkKey = \"link\";\nconst char* bootStateKey = \"bstate\";\n\nbool CONTROLLER_CLASS_NAME::processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\t// Process incoming messages here\n\t// They are normally encoded as MsgPack so you can confert them to JSON very easily\n\tif (command != nodeMessageType_t::DOWNSTREAM_DATA_GET && command != nodeMessageType_t::DOWNSTREAM_DATA_SET) {\n\t\tDEBUG_WARN (\"Wrong message type\");\n\t\treturn false;\n\t}\n\t// Check payload encoding\n\tif (payloadEncoding != MSG_PACK) {\n\t\tDEBUG_WARN (\"Wrong payload encoding\");\n\t\treturn false;\n\t}\n\n\t// Decode payload\n\tDynamicJsonDocument doc (256);\n\tuint8_t tempBuffer[MAX_MESSAGE_LENGTH];\n\n\tmemcpy (tempBuffer, buffer, length);\n\tDeserializationError error = deserializeMsgPack (doc, tempBuffer, length);\n\t// Check decoding\n\tif (error != DeserializationError::Ok) {\n\t\tDEBUG_WARN (\"Error decoding command: %s\", error.c_str ());\n\t\treturn false;\n\t}\n\n\tDEBUG_WARN (\"Command: %d = %s\", command, command == nodeMessageType_t::DOWNSTREAM_DATA_GET ? \"GET\" : \"SET\");\n\n\t// Dump debug data\n\tsize_t strLen = measureJson (doc) + 1;\n\tchar* strBuffer = (char*)malloc (strLen);\n\tserializeJson (doc, strBuffer, strLen);\n\tDEBUG_WARN (\"Data: %s\", strBuffer);\n\tfree (strBuffer);\n\n\t// Check cmd field on JSON data\n\tif (!doc.containsKey (commandKey)) {\n\t\tDEBUG_WARN (\"Wrong format\");\n\t\treturn false;\n\t}\n\n\tif (command == nodeMessageType_t::DOWNSTREAM_DATA_GET) {\n\t\tif (!strcmp (doc[commandKey], relayKey)) {\n\t\t\tDEBUG_WARN (\"Request relay status. Relay = %s\", config.relayStatus == ON ? \"ON\" : \"OFF\");\n\t\t\tif (!sendRelayStatus ()) {\n\t\t\t\tDEBUG_WARN (\"Error sending relay status\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (!strcmp (doc[commandKey], linkKey)) {\n\t\t\tDEBUG_WARN (\"Request link status. Link = %s\", config.linked ? \"enabled\" : \"disabled\");\n\t\t\tif (!sendLinkStatus ()) {\n\t\t\t\tDEBUG_WARN (\"Error sending link status\");\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t} else if (!strcmp (doc[commandKey], bootStateKey)) {\n\t\t\tDEBUG_WARN (\"Request boot status configuration. Boot = %d\",\n\t\t\t\t\t\tconfig.bootStatus);\n\t\t\tif (!sendBootStatus ()) {\n\t\t\t\tDEBUG_WARN (\"Error sending boot status configuration\");\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t}\n\t}\n\n\tif (command == nodeMessageType_t::DOWNSTREAM_DATA_SET) {\n\t\tif (!strcmp (doc[commandKey], relayKey)) {\n\t\t\tif (!doc.containsKey (relayKey)) {\n\t\t\t\tDEBUG_WARN (\"Wrong format\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t//DEBUG_WARN (\"Set relay status. Relay = %s\", doc[relayKey].as<bool> () ? \"ON\" : \"OFF\");\n\n\t\t\tsetRelay (doc[relayKey].as<bool> ());\n\n\t\t\tif (!sendRelayStatus ()) {\n\t\t\t\tDEBUG_WARN (\"Error sending relay status\");\n\t\t\t\treturn false;\n\t\t\t}\n\n\n\t\t} else if (!strcmp (doc[commandKey], linkKey)) {\n\t\t\tif (!doc.containsKey (linkKey)) {\n\t\t\t\tDEBUG_WARN (\"Wrong format\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tDEBUG_WARN (\"Set link status. Link = %s\", doc[linkKey].as<bool> () ? \"enabled\" : \"disabled\");\n\n\t\t\tsetLinked (doc[linkKey].as<bool> ());\n\n\t\t\tif (!sendLinkStatus ()) {\n\t\t\t\tDEBUG_WARN (\"Error sending link status\");\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t} else if (!strcmp (doc[commandKey], bootStateKey)) {\n\t\t\tif (!doc.containsKey (bootStateKey)) {\n\t\t\t\tDEBUG_WARN (\"Wrong format\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tDEBUG_WARN (\"Set boot status. Link = %d\", doc[bootStateKey].as<int> ());\n\n\t\t\tsetBoot (doc[bootStateKey].as<int> ());\n\n\t\t\tif (!sendBootStatus ()) {\n\t\t\t\tDEBUG_WARN (\"Error sending boot status configuration\");\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t}\n\t}\n\n\treturn true;\n}\n\nbool CONTROLLER_CLASS_NAME::sendRelayStatus () {\n\tconst size_t capacity = JSON_OBJECT_SIZE (6);\n\tDynamicJsonDocument json (capacity);\n\n\tjson[commandKey] = relayKey;\n    json[relayKey] = config.relayStatus ? 1 : 0;\n    json[linkKey] = config.linked ? 1 : 0;\n    json[bootStateKey] = config.bootStatus;\n\n\treturn sendJson (json);\n}\n\nbool CONTROLLER_CLASS_NAME::sendLinkStatus () {\n\tconst size_t capacity = JSON_OBJECT_SIZE (2);\n\tDynamicJsonDocument json (capacity);\n\n\tjson[commandKey] = linkKey;\n    json[linkKey] = config.linked ? 1 : 0;\n\n\treturn sendJson (json);\n}\n\nbool CONTROLLER_CLASS_NAME::sendBootStatus () {\n\tconst size_t capacity = JSON_OBJECT_SIZE (2);\n\tDynamicJsonDocument json (capacity);\n\n\tjson[commandKey] = bootStateKey;\n\tint bootStatus = config.bootStatus;\n\tjson[bootStateKey] = bootStatus;\n\n\treturn sendJson (json);\n}\n\nbool CONTROLLER_CLASS_NAME::sendCommandResp (const char* command, bool result) {\n\t// Respond to command with a result: true if successful, false if failed \n\treturn true;\n}\n\nvoid CONTROLLER_CLASS_NAME::connectInform () {\n\n#if SUPPORT_HA_DISCOVERY    \n    // Register every HAEntity discovery function here. As many as you need\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHASwitchDiscovery, this));\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHATriggerDiscovery, this));\n    addHACall (std::bind (&CONTROLLER_CLASS_NAME::buildHALinkDiscovery, this));\n#endif\n\n    EnigmaIOTjsonController::connectInform ();\n}\n\nvoid CONTROLLER_CLASS_NAME::setup (EnigmaIOTNodeClass* node, void* data) {\n\tenigmaIotNode = node;\n\n\t// You do node setup here. Use it as it was the normal setup() Arduino function\n\tpinMode (config.buttonPin, INPUT_PULLUP);\n\tpinMode (config.relayPin, OUTPUT);\n\n    if (config.bootStatus != SAVE_RELAY_STATUS) {\n\t\tconfig.relayStatus = (bool)config.bootStatus;\n\t\tDEBUG_WARN (\"Relay status set to Boot Status %d -> %d\", config.bootStatus, config.relayStatus);\n\t}\n\tDEBUG_WARN (\"Relay status set to %s\", config.relayStatus ? \"ON\" : \"OFF\");\n\tdigitalWrite (config.relayPin, config.relayStatus);\n\t// if (!sendRelayStatus ()) {\n\t// \tDEBUG_WARN (\"Error sending relay status\");\n\t// }\n\n    // Send a 'hello' message when initalizing is finished\n\tsendStartAnouncement ();\n\n\tDEBUG_WARN (\"Finish begin\");\n\n\t// If your node should sleep after sending data do all remaining tasks here\n}\n\nvoid CONTROLLER_CLASS_NAME::toggleRelay () {\n\tDEBUG_INFO (\"Toggle relay\");\n\tconfig.relayStatus = !config.relayStatus;\n\tdigitalWrite (config.relayPin, config.relayStatus ? ON : OFF);\n\tif (config.bootStatus == SAVE_RELAY_STATUS) {\n\t\tif (saveConfig ()) {\n\t\t\tDEBUG_INFO (\"Config updated. Relay is %s\", config.relayStatus ? \"ON\" : \"OFF\");\n\t\t} else {\n\t\t\tDEBUG_ERROR (\"Error saving config\");\n\t\t}\n\t}\n\tsendRelayStatus ();\n}\n\nvoid CONTROLLER_CLASS_NAME::setRelay (bool state) {\n\tDEBUG_WARN (\"Set relay %s\", state ? \"ON\" : \"OFF\");\n\tconfig.relayStatus = state;\n\tdigitalWrite (config.relayPin, config.relayStatus ? ON : OFF);\n\tif (config.bootStatus == SAVE_RELAY_STATUS) {\n\t\tif (saveConfig ()) {\n\t\t\tDEBUG_WARN (\"Config updated. Relay is %s\", config.relayStatus ? \"ON\" : \"OFF\");\n\t\t} else {\n\t\t\tDEBUG_ERROR (\"Error saving config\");\n\t\t}\n\t}\n}\n\nvoid CONTROLLER_CLASS_NAME::setLinked (bool state) {\n\tDEBUG_WARN (\"Set link %s\", state ? \"ON\" : \"OFF\");\n\tconfig.linked = state;\n\tif (saveConfig ()) {\n\t\tDEBUG_WARN (\"Config updated. Relay is %slinked\", !config.relayStatus ? \"not \" : \"\");\n\t} else {\n\t\tDEBUG_ERROR (\"Error saving config\");\n\t}\n}\n\nvoid CONTROLLER_CLASS_NAME::setBoot (int state) {\n\tDEBUG_WARN (\"Set boot state to %d\", state);\n\tif (state >= RELAY_OFF && state <= SAVE_RELAY_STATUS) {\n\t\tconfig.bootStatus = (bootRelayStatus_t)state;\n\t} else {\n\t\tconfig.bootStatus = RELAY_OFF;\n\t}\n\n\tif (saveConfig ()) {\n\t\tDEBUG_WARN (\"Config updated\");\n\t} else {\n\t\tDEBUG_ERROR (\"Error saving config\");\n\t}\n}\n\nvoid CONTROLLER_CLASS_NAME::loop () {\n\n\t// If your node stays allways awake do your periodic task here\n\tif (pushReleased) { // Enter this only if button were not pushed in the last loop\n\t\tif (!digitalRead (config.buttonPin)) {\n\t\t\tdelay (50); // debounce button push\n\t\t\tif (!digitalRead (config.buttonPin)) {\n\t\t\t\tDEBUG_INFO (\"Button triggered!\");\n\t\t\t\tpushTriggered = true; // Button is pushed\n\t\t\t\tpushReleased = false; // Mark button as not released\n\t\t\t}\n\t\t}\n\t}\n\n\tif (pushTriggered) { // If button was pushed\n\t\tpushTriggered = false; // Disable push trigger\n\t\tconst size_t capacity = JSON_OBJECT_SIZE (2);\n\t\tDynamicJsonDocument json (capacity);\n\t\tjson[buttonKey] = config.buttonPin;\n\t\tjson[\"push\"] = 1;\n\t\tif (sendJson (json)) {\n\t\t\tDEBUG_INFO (\"Push triggered sent\");\n\t\t} else {\n\t\t\tDEBUG_ERROR (\"Push send error\");\n\t\t}\n\t\tif (config.linked) {\n\t\t\ttoggleRelay ();\n\t\t}\n\t}\n\n\tif (!pushReleased) {\n\t\tif (digitalRead (config.buttonPin)) { // If button is released\n\t\t\tDEBUG_INFO (\"Button released\");\n\t\t\tpushReleased = true;\n\t\t}\n    }\n\n    static clock_t lastSentStatus;\n    static clock_t sendStatusPeriod = 2000;\n    if (enigmaIotNode->isRegistered () && millis () - lastSentStatus > sendStatusPeriod) {\n        lastSentStatus = millis ();\n        sendStatusPeriod = 300000;\n        sendRelayStatus ();\n    }\n}\n\nCONTROLLER_CLASS_NAME::~CONTROLLER_CLASS_NAME () {\n\t// It your class uses dynamic data free it up here\n\t// This is normally not needed but it is a good practice\n\tif (buttonPinParam) {\n\t\tdelete (buttonPinParam);\n\t\tdelete (relayPinParam);\n\t\tdelete (bootStatusListParam);\n\t\tdelete (bootStatusParam);\n\t}\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerStart () {\n\tDEBUG_WARN (\"==== CCost Controller Configuration start ====\");\n\t// If you need to add custom configuration parameters do it here\n\n\tstatic char buttonPinParamStr[4];\n\titoa (DEFAULT_BUTTON_PIN, buttonPinParamStr, 10);\n\tstatic char relayPinParamStr[4];\n\titoa (DEFAULT_RELAY_PIN, relayPinParamStr, 10);\n\tbuttonPinParam = new AsyncWiFiManagerParameter (\"buttonPin\", \"Button Pin\", buttonPinParamStr, 3, \"required type=\\\"text\\\" pattern=\\\"^1[2-5]$|^[0-5]$\\\"\");\n\trelayPinParam = new AsyncWiFiManagerParameter (\"relayPin\", \"Relay Pin\", relayPinParamStr, 3, \"required type=\\\"text\\\" pattern=\\\"^1[2-5]$|^[0-5]$\\\"\");\n\tbootStatusParam = new AsyncWiFiManagerParameter (\"bootStatus\", \"Boot Relay Status\", \"\", 6, \"required type=\\\"text\\\" list=\\\"bootStatusList\\\" pattern=\\\"^ON$|^OFF$|^SAVE$\\\"\");\n\tbootStatusListParam = new AsyncWiFiManagerParameter (\"<datalist id=\\\"bootStatusList\\\">\" \\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \"<option value = \\\"OFF\\\" >\" \\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \"<option valsenue = \\\"OFF\\\" >\" \\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \"<option value = \\\"ON\\\">\" \\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \"<option value = \\\"SAVE\\\">\" \\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \"</datalist>\");\n\tEnigmaIOTNode.addWiFiManagerParameter (buttonPinParam);\n    EnigmaIOTNode.addWiFiManagerParameter (relayPinParam);\n    EnigmaIOTNode.addWiFiManagerParameter (bootStatusListParam);\n    EnigmaIOTNode.addWiFiManagerParameter (bootStatusParam);\n}\n\nvoid CONTROLLER_CLASS_NAME::configManagerExit (bool status) {\n\tDEBUG_WARN (\"==== CCost Controller Configuration result ====\");\n\t// You can read configuration paramenter values here\n\tDEBUG_WARN (\"Button Pin: %s\", buttonPinParam->getValue ());\n\tDEBUG_WARN (\"Boot Relay Status: %s\", bootStatusParam->getValue ());\n\n\t// TODO: Finish bootStatusParam analysis\n\n\tif (status) {\n\t\tconfig.buttonPin = atoi (buttonPinParam->getValue ());\n\t\tif (config.buttonPin > 15 || config.buttonPin < 0) {\n\t\t\tconfig.buttonPin = DEFAULT_BUTTON_PIN;\n\t\t}\n\t\tconfig.relayPin = atoi (relayPinParam->getValue ());\n\t\tif (config.relayPin > 15 || config.relayPin < 0) {\n\t\t\tconfig.relayPin = DEFAULT_BUTTON_PIN;\n\t\t}\n\t\tif (!strncmp (bootStatusParam->getValue (), \"ON\", 6)) {\n\t\t\tconfig.bootStatus = RELAY_ON;\n\t\t} else if (!strncmp (bootStatusParam->getValue (), \"SAVE\", 6)) {\n\t\t\tconfig.bootStatus = SAVE_RELAY_STATUS;\n\t\t} else {\n\t\t\tconfig.bootStatus = RELAY_OFF;\n\t\t}\n\t\tconfig.ON_STATE = ON;\n\t\tconfig.linked = true;\n\n\t\tif (!saveConfig ()) {\n\t\t\tDEBUG_ERROR (\"Error writting blind controller config to filesystem.\");\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Configuration stored\");\n\t\t}\n\t} else {\n\t\tDEBUG_WARN (\"Configuration does not need to be saved\");\n\t}\n}\n\nvoid CONTROLLER_CLASS_NAME::defaultConfig () {\n\tconfig.buttonPin = DEFAULT_BUTTON_PIN;\n\tconfig.relayPin = DEFAULT_RELAY_PIN;\n\tconfig.linked = true;\n\tconfig.ON_STATE = ON;\n\n}\n\nbool CONTROLLER_CLASS_NAME::loadConfig () {\n\t// If you need to read custom configuration data do it here\n\tbool json_correct = false;\n\n\tif (!FILESYSTEM.begin ()) {\n\t\tDEBUG_WARN (\"Error starting filesystem. Formatting\");\n        FILESYSTEM.format ();\n\t}\n\n    // FILESYSTEM.remove (CONFIG_FILE); // Only for testing\n\n    if (FILESYSTEM.exists (CONFIG_FILE)) {\n\t\tDEBUG_WARN (\"Opening %s file\", CONFIG_FILE);\n        File configFile = FILESYSTEM.open (CONFIG_FILE, \"r\");\n\t\tif (configFile) {\n\t\t\tsize_t size = configFile.size ();\n\t\t\tDEBUG_WARN (\"%s opened. %u bytes\", CONFIG_FILE, size);\n\t\t\tDynamicJsonDocument doc (512);\n\t\t\tDeserializationError error = deserializeJson (doc, configFile);\n\t\t\tif (error) {\n\t\t\t\tDEBUG_ERROR (\"Failed to parse file\");\n\t\t\t} else {\n\t\t\t\tDEBUG_WARN (\"JSON file parsed\");\n\t\t\t}\n\n\t\t\tif (doc.containsKey (\"buttonPin\") &&\n\t\t\t\tdoc.containsKey (\"relayPin\") &&\n\t\t\t\tdoc.containsKey (\"linked\") &&\n\t\t\t\tdoc.containsKey (\"ON_STATE\") &&\n\t\t\t\tdoc.containsKey (\"bootStatus\")) {\n\n\t\t\t\tjson_correct = true;\n\t\t\t\tconfig.buttonPin = doc[\"buttonPin\"].as<int> ();\n\t\t\t\tconfig.relayPin = doc[\"relayPin\"].as<int> ();\n\t\t\t\tconfig.linked = doc[\"linked\"].as<bool> ();\n\t\t\t\tconfig.ON_STATE = doc[\"ON_STATE\"].as<int> ();\n\t\t\t\tint bootStatus = doc[\"bootStatus\"].as<int> ();\n\t\t\t\tif (bootStatus >= RELAY_OFF && bootStatus <= SAVE_RELAY_STATUS) {\n\t\t\t\t\tconfig.bootStatus = (bootRelayStatus_t)bootStatus;\n\t\t\t\t\tDEBUG_WARN (\"Boot status set to %d\", config.bootStatus);\n\t\t\t\t} else {\n\t\t\t\t\tconfig.bootStatus = RELAY_OFF;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (doc.containsKey (\"relayStatus\")) {\n\t\t\t\tconfig.relayStatus = doc[\"relayStatus\"].as<bool> ();\n\t\t\t}\n\n\t\t\tconfigFile.close ();\n\t\t\tif (json_correct) {\n\t\t\t\tDEBUG_WARN (\"Smart switch controller configuration successfuly read\");\n\t\t\t} else {\n\t\t\t\tDEBUG_WARN (\"Smart switch controller configuration error\");\n\t\t\t}\n\t\t\tDEBUG_WARN (\"==== Smart switch Controller Configuration ====\");\n\t\t\tDEBUG_WARN (\"Button pin: %d\", config.buttonPin);\n\t\t\tDEBUG_WARN (\"Relay pin: %d\", config.relayPin);\n\t\t\tDEBUG_WARN (\"Linked: %s\", config.linked ? \"true\" : \"false\");\n\t\t\tDEBUG_WARN (\"ON level: %s \", config.ON_STATE ? \"HIGH\" : \"LOW\");\n\t\t\tDEBUG_WARN (\"Boot relay status: %d \", config.bootStatus);\n\n\n\t\t\tsize_t jsonLen = measureJsonPretty (doc) + 1;\n\t\t\tchar* output = (char*)malloc (jsonLen);\n\t\t\tserializeJsonPretty (doc, output, jsonLen);\n\n\t\t\tDEBUG_WARN (\"File content:\\n%s\", output);\n\n\t\t\tfree (output);\n\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Error opening %s\", CONFIG_FILE);\n\t\t\tdefaultConfig ();\n\t\t}\n\t} else {\n\t\tDEBUG_WARN (\"%s do not exist\", CONFIG_FILE);\n\t\tdefaultConfig ();\n\t}\n\n\treturn json_correct;\n}\n\nbool CONTROLLER_CLASS_NAME::saveConfig () {\n    // If you need to save custom configuration data do it here\n    if (!FILESYSTEM.begin ()) {\n\t\tDEBUG_WARN (\"Error opening filesystem\");\n\t\treturn false;\n\t}\n\tDEBUG_INFO (\"Filesystem opened\");\n\n    File configFile = FILESYSTEM.open (CONFIG_FILE, \"w\");\n\tif (!configFile) {\n\t\tDEBUG_WARN (\"Failed to open config file %s for writing\", CONFIG_FILE);\n\t\treturn false;\n\t} else {\n\t\tDEBUG_INFO (\"%s opened for writting\", CONFIG_FILE);\n\t}\n\n\tDynamicJsonDocument doc (512);\n\n\tdoc[\"buttonPin\"] = config.buttonPin;\n\tdoc[\"relayPin\"] = config.relayPin;\n\tdoc[\"linked\"] = config.linked;\n\tdoc[\"ON_STATE\"] = config.ON_STATE;\n\tdoc[\"relayStatus\"] = config.relayStatus;\n\tint bootStatus = config.bootStatus;\n\tdoc[\"bootStatus\"] = bootStatus;\n\n\tif (serializeJson (doc, configFile) == 0) {\n\t\tDEBUG_ERROR (\"Failed to write to file\");\n\t\tconfigFile.close ();\n        //FILESYSTEM.remove (CONFIG_FILE);\n\t\treturn false;\n\t}\n\n\tsize_t jsonLen = measureJsonPretty (doc) + 1;\n\tchar* output = (char*)malloc (jsonLen);\n\tserializeJsonPretty (doc, output, jsonLen);\n\n\tDEBUG_DBG (\"File content:\\n%s\", output);\n\n\tfree (output);\n\n\tconfigFile.flush ();\n\tsize_t size = configFile.size ();\n\n\t//configFile.write ((uint8_t*)(&mqttgw_config), sizeof (mqttgw_config));\n\tconfigFile.close ();\n\tDEBUG_DBG (\"Smart Switch controller configuration saved to flash. %u bytes\", size);\n\n\treturn true;\n}\n\n#if SUPPORT_HA_DISCOVERY   \n// Repeat this method for every entity\nvoid CONTROLLER_CLASS_NAME::buildHASwitchDiscovery () {\n    // Select corresponding HAEntiny type\n    HASwitch* haEntity = new HASwitch ();\n\n    uint8_t* msgPackBuffer;\n\n    if (!haEntity) {\n        DEBUG_WARN (\"JSON object instance does not exist\");\n        return;\n    }\n\n    // *******************************\n    // Add your characteristics here\n    // There is no need to futher modify this function\n\n    haEntity->setNameSufix (\"switch\");\n    haEntity->setStateOn (1);\n    haEntity->setStateOff (0);\n    haEntity->setValueField (\"rly\");\n    haEntity->setPayloadOff (\"{\\\"cmd\\\":\\\"rly\\\",\\\"rly\\\":0}\");\n    haEntity->setPayloadOn (\"{\\\"cmd\\\":\\\"rly\\\",\\\"rly\\\":1}\");\n    // *******************************\n\n    size_t bufferLen = haEntity->measureMessage ();\n\n    msgPackBuffer = (uint8_t*)malloc (bufferLen);\n\n    size_t len = haEntity->getAnounceMessage (bufferLen, msgPackBuffer);\n\n    DEBUG_INFO (\"Resulting MSG pack length: %d\", len);\n\n    if (!sendHADiscovery (msgPackBuffer, len)) {\n        DEBUG_WARN (\"Error sending HA discovery message\");\n    }\n\n    if (haEntity) {\n        delete (haEntity);\n    }\n\n    if (msgPackBuffer) {\n        free (msgPackBuffer);\n    }\n}\n\nvoid CONTROLLER_CLASS_NAME::buildHALinkDiscovery () {\n    // Select corresponding HAEntiny type\n    HASwitch* haEntity = new HASwitch ();\n\n    uint8_t* msgPackBuffer;\n\n    if (!haEntity) {\n        DEBUG_WARN (\"JSON object instance does not exist\");\n        return;\n    }\n\n    // *******************************\n    // Add your characteristics here\n    // There is no need to futher modify this function\n\n    haEntity->setNameSufix (\"link\");\n    haEntity->setStateOn (1);\n    haEntity->setStateOff (0);\n    haEntity->setValueField (\"link\");\n    haEntity->setPayloadOff (\"{\\\"cmd\\\":\\\"link\\\",\\\"link\\\":0}\");\n    haEntity->setPayloadOn (\"{\\\"cmd\\\":\\\"link\\\",\\\"link\\\":1}\");\n    // *******************************\n\n    size_t bufferLen = haEntity->measureMessage ();\n\n    msgPackBuffer = (uint8_t*)malloc (bufferLen);\n\n    size_t len = haEntity->getAnounceMessage (bufferLen, msgPackBuffer);\n\n    DEBUG_INFO (\"Resulting MSG pack length: %d\", len);\n\n    if (!sendHADiscovery (msgPackBuffer, len)) {\n        DEBUG_WARN (\"Error sending HA discovery message\");\n    }\n\n    if (haEntity) {\n        delete (haEntity);\n    }\n\n    if (msgPackBuffer) {\n        free (msgPackBuffer);\n    }\n}\n\nvoid CONTROLLER_CLASS_NAME::buildHATriggerDiscovery () {\n    // Select corresponding HAEntiny type\n    HATrigger* haEntity = new HATrigger ();\n\n    uint8_t* msgPackBuffer;\n\n    if (!haEntity) {\n        DEBUG_WARN (\"JSON object instance does not exist\");\n        return;\n    }\n\n    // *******************************\n    // Add your characteristics here\n    // There is no need to futher modify this function\n\n    haEntity->setNameSufix (\"button\");\n    haEntity->setType (button_short_press);\n    haEntity->setSubtype (turn_on);\n    haEntity->setPayload (\"{\\\"button\\\":4,\\\"push\\\":1}\");\n    // *******************************\n\n    size_t bufferLen = haEntity->measureMessage ();\n\n    msgPackBuffer = (uint8_t*)malloc (bufferLen);\n\n    size_t len = haEntity->getAnounceMessage (bufferLen, msgPackBuffer);\n\n    DEBUG_INFO (\"Resulting MSG pack length: %d\", len);\n\n    if (!sendHADiscovery (msgPackBuffer, len)) {\n        DEBUG_WARN (\"Error sending HA discovery message\");\n    }\n\n    if (haEntity) {\n        delete (haEntity);\n    }\n\n    if (msgPackBuffer) {\n        free (msgPackBuffer);\n    }\n}\n#endif // SUPPORT_HA_DISCOVERY\n"
  },
  {
    "path": "examples/EnigmaIOT-SmartSwitch-Controller/SmartSwitchController.h",
    "content": "// BasicController.h\n\n#ifndef _BASICCONTROLLER_h\n#define _BASICCONTROLLER_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n//#define DEBUG_SERIAL\n\n#ifdef ESP32\n#include <SPIFFS.h>\n#endif\n\n#include <EnigmaIOTjsonController.h>\n#define CONTROLLER_CLASS_NAME SmartSwitchController\nstatic const char* CONTROLLER_NAME = \"SamrtSwitch controller\";\n\n#if SUPPORT_HA_DISCOVERY    \n#include <haTrigger.h>\n#include <haSwitch.h>\n#endif\n\n// --------------------------------------------------\n// You may define data structures and constants here\n// --------------------------------------------------\n#define DEFAULT_BUTTON_PIN 4\n#define DEFAULT_RELAY_PIN 14\n#define ON HIGH\n#define OFF !ON\n\ntypedef enum {\n\tRELAY_OFF = 0,\n\tRELAY_ON = 1,\n\tSAVE_RELAY_STATUS = 2\n} bootRelayStatus_t;\n\nstruct smartSwitchControllerHw_t {\n\tint relayPin;\n\tbool relayStatus;\n\tuint8_t buttonPin;\n\tbool linked;\n\tbootRelayStatus_t bootStatus;\n\tint ON_STATE;\n};\n\nclass CONTROLLER_CLASS_NAME : EnigmaIOTjsonController {\nprotected:\n\t// --------------------------------------------------\n\t// add all parameters that your project needs here\n\t// --------------------------------------------------\n\tbool pushTriggered = false;\n\tbool pushReleased = true;\n\tsmartSwitchControllerHw_t config;\n\tAsyncWiFiManagerParameter* buttonPinParam;\n\tAsyncWiFiManagerParameter* relayPinParam;\n\tAsyncWiFiManagerParameter* bootStatusParam;\n\tAsyncWiFiManagerParameter* bootStatusListParam;\n\npublic:\n\tvoid setup (EnigmaIOTNodeClass* node, void* data = NULL);\n\n\tbool processRxCommand (const uint8_t* address, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding);\n\n\tvoid loop ();\n\n\t~CONTROLLER_CLASS_NAME ();\n\n\t/**\n\t * @brief Called when wifi manager starts config portal\n\t * @param node< Pointer to EnigmaIOT gateway instance\n\t */\n\tvoid configManagerStart ();\n\n\t/**\n\t * @brief Called when wifi manager exits config portal\n\t * @param status `true` if configuration was successful\n\t */\n\tvoid configManagerExit (bool status);\n\n\t/**\n\t * @brief Loads output module configuration\n\t * @return Returns `true` if load was successful. `false` otherwise\n\t */\n\tbool loadConfig ();\n\n    void connectInform ();\n\nprotected:\n\t/**\n\t  * @brief Saves output module configuration\n\t  * @return Returns `true` if save was successful. `false` otherwise\n\t  */\n\tbool saveConfig ();\n\n\tbool sendCommandResp (const char* command, bool result);\n\n    bool sendStartAnouncement () {\n        // You can send a 'hello' message when your node starts. Useful to detect unexpected reboot\n        const size_t capacity = JSON_OBJECT_SIZE (10);\n        DynamicJsonDocument json (capacity);\n        json[\"status\"] = \"start\";\n        json[\"device\"] = CONTROLLER_NAME;\n        char version_buf[10];\n        snprintf (version_buf, 10, \"%d.%d.%d\",\n                  ENIGMAIOT_PROT_VERS[0], ENIGMAIOT_PROT_VERS[1], ENIGMAIOT_PROT_VERS[2]);\n        json[\"version\"] = String (version_buf);\n\n        return sendJson (json);\n    }\n\n    /**\n     * @brief Sends a HA discovery message for a single entity. Add as many functions like this\n     * as number of entities you need to create\n     */\n    void buildHASwitchDiscovery ();\n    void buildHATriggerDiscovery ();\n    void buildHALinkDiscovery ();\n\n\t// ------------------------------------------------------------\n\t// You may add additional method definitions that you need here\n\t// ------------------------------------------------------------\n\tvoid defaultConfig ();\n\n\tvoid toggleRelay ();\n\n\tvoid setRelay (bool state);\n\n\tbool sendRelayStatus ();\n\n\tvoid setLinked (bool state);\n\n\tbool sendLinkStatus ();\n\n\tvoid setBoot (int state);\n\n\tbool sendBootStatus ();\n};\n\n#endif\n\n"
  },
  {
    "path": "examples/EnigmaIOT-SmartSwitch-Controller/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n[env:esp8266-SmartSwitchController]\nextends = esp8266_node_common\nlib_deps = \n    ${esp8266_common.lib_deps}\n    FailSafeMode\nbuild_flags = \n    ${esp8266_common.build_flags}\n    -DFS_USE_FLASH=1\n    -DFS_USE_LITTLEFS=1\n\n[env:esp32-SmartSwitchController]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\n"
  },
  {
    "path": "examples/EnigmaIOT-SmartSwitch-Controller/readme.md",
    "content": "# EnigmaIOT SmartSwitch Controller\n\nThis example shows how all features of [EnigmaIOTjsonController.h](https://github.com/gmag11/EnigmaIOT/blob/dev/src/EnigmaIOTjsonController.h) may be used to build a complete node.\n\nIt controls a relay and gets messages by button presses. Button may be linked so that relay is toggled on every button press.\n\nThree configurable parameters are added:\n\n- Relay pin\n- Button pin\n- Initial relay status after boot: it may be either ON, OFF or SAVED. If this is \"SAVED\" node stores last status and keeps after a reboot.\n\nRelay is controller with this command\n\n```\n<Network_name>/<node_name or node_address>/set/data  {\"cmd\":\"rly\",\"rly\":< 1 or 0 >}\n```\n\nIf button is pressed, this MQTT message is produced\n\n```\n<Network_name>/<node_name or node_address>/data  {\"button\":< button_pin >,\"push\":1}\n```\n\nTo change button and relay link status you may use this message\n\n```\n<Network_name>/<node_name or node_address>/set/data  {\"cmd\":\"link\",\"link\":< 1 or 0 >}\n```\n\n`1` makes button and relay to be linked, `0` makes that button does not produce any immediate effect in relay.\n\nInitial relay state after boot may be configured with a MQTT message too.\n\n```\n<Network_name>/<node_name or node_address>/set/data  {\"cmd\":\"bstate\",\"bstate\":< 0, 1 or 2 >}\n```\n\n`0` and `1` mean that LED will start in OFF or ON state respectively, and `2` means that status will be saved.\n\nYou may ask about these configurations using\n\n```\n<Network_name>/<node_name or node_address>/det/data  {\"cmd\":<command>}\n```\n\nCommand field may be `rly`, `link` or `bstate`.\n\n "
  },
  {
    "path": "examples/EnigmaIOTGatewayDummy/.gitignore",
    "content": ".pio\n.vscode\n"
  },
  {
    "path": "examples/EnigmaIOTGatewayDummy/EnigmaIOTGatewayDummy.ino",
    "content": "/**\n  * @file EnigmaIOTGatewayDummy.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Gateway based on EnigmaIoT over ESP-NOW with dummy output module to serve as start for new gateways\n  */\n\n\n#include <Arduino.h>\n\n#include <GwOutput_generic.h>\n#include \"GwOutput_dummy.h\"\n\n#ifdef ESP32\n#include <WiFi.h>\n#include <AsyncTCP.h> // Comment to compile for ESP8266\n#include <Update.h>\n#include <SPIFFS.h>\n#include \"esp_system.h\"\n#include \"esp_event.h\"\n#include \"esp_tls.h\"\n#include \"soc/soc.h\"           // Disable brownout problems\n#include \"soc/rtc_cntl_reg.h\"  // Disable brownout problems\n#elif defined(ESP8266)\n#include <ESP8266WiFi.h>\n#include <ESPAsyncTCP.h> // Comment to compile for ESP32\n#include <Hash.h>\n#include <SPI.h>\n#endif // ESP32\n\n\n#include <CayenneLPP.h>\n#include <FS.h>\n\n#include <EnigmaIOTGateway.h>\n#include <helperFunctions.h>\n#include <EnigmaIOTdebug.h>\n#include <espnow_hal.h>\n#include <Curve25519.h>\n#include <ChaChaPoly.h>\n#include <Poly1305.h>\n#include <SHA256.h>\n#include <ArduinoJson.h>\n#include <DNSServer.h>\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n\n#ifndef BUILTIN_LED\n#define BUILTIN_LED 5\n#endif // BUILTIN_LED\n\n#define BLUE_LED BUILTIN_LED\n#define RED_LED BUILTIN_LED\n\n#ifdef ESP32\nTimerHandle_t connectionLedTimer;\n#elif defined(ESP8266)\nETSTimer connectionLedTimer;\n#endif // ESP32\n\nconst int connectionLed = BUILTIN_LED;\nboolean connectionLedFlashing = false;\n\nvoid flashConnectionLed (void* led) {\n\t//digitalWrite (*(int*)led, !digitalRead (*(int*)led));\n\tdigitalWrite (BUILTIN_LED, !digitalRead (BUILTIN_LED));\n}\n\nvoid startConnectionFlash (int period) {\n#ifdef ESP32\n\tif (!connectionLedFlashing) {\n\t\tconnectionLedFlashing = true;\n\t\tconnectionLedTimer = xTimerCreate (\"led_flash\", pdMS_TO_TICKS (period), pdTRUE, (void*)0, flashConnectionLed);\n\t\txTimerStart (connectionLedTimer, 0);\n\t}\n#elif defined (ESP8266)\n\tets_timer_disarm (&connectionLedTimer);\n\tif (!connectionLedFlashing) {\n\t\tconnectionLedFlashing = true;\n\t\tets_timer_arm_new (&connectionLedTimer, period, true, true);\n\t}\n#endif // ESP32\n}\n\nvoid stopConnectionFlash () {\n#ifdef ESP32\n\tif (connectionLedFlashing) {\n\t\tconnectionLedFlashing = false;\n\t\txTimerStop (connectionLedTimer, 0);\n\t\txTimerDelete (connectionLedTimer, 0);\n\t}\n#elif defined(ESP8266)\n\tif (connectionLedFlashing) {\n\t\tconnectionLedFlashing = false;\n\t\tets_timer_disarm (&connectionLedTimer);\n\t\tdigitalWrite (connectionLed, HIGH);\n\t}\n#endif // ESP32\n}\n\nvoid wifiManagerExit (boolean status) {\n\tGwOutput.configManagerExit (status);\n}\n\nvoid wifiManagerStarted () {\n\tGwOutput.configManagerStart (&EnigmaIOTGateway);\n}\n\nvoid processRxControlData (char* macStr, uint8_t* data, uint8_t length) {\n\tif (data) {\n\t\tGwOutput.outputControlSend (macStr, data, length);\n\t}\n}\n\nvoid processRxData (uint8_t* mac, uint8_t* buffer, uint8_t length, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char* nodeName = NULL) {\n\t//uint8_t *addr = mac;\n\tsize_t pld_size;\n\tconst int PAYLOAD_SIZE = 512;\n    char payload[PAYLOAD_SIZE];\n\n\t//payload = (char*)malloc (PAYLOAD_SIZE);\n\n\tchar mac_str[ENIGMAIOT_ADDR_LEN * 3];\n\tmac2str (mac, mac_str);\n\tif (control) {\n\t\tprocessRxControlData (nodeName ? nodeName : mac_str, buffer, length);\n\t\treturn;\n\t}\n\t//char* netName = EnigmaIOTGateway.getNetworkName ();\n\tif (payload_type == CAYENNELPP) {\n\t\tconst int capacity = JSON_ARRAY_SIZE (25) + 25 * JSON_OBJECT_SIZE (4);\n\t\tDynamicJsonDocument jsonBuffer (capacity);\n\t\tJsonArray root = jsonBuffer.createNestedArray ();\n\t\tCayenneLPP cayennelpp (MAX_DATA_PAYLOAD_SIZE);\n\n\t\tcayennelpp.decode ((uint8_t*)buffer, length, root);\n\t\tuint8_t error = cayennelpp.getError ();\n\t\tif (error != LPP_ERROR_OK) {\n\t\t\tDEBUG_ERROR (\"Error decoding CayenneLPP data: %d\", error);\n\t\t\treturn;\n\t\t}\n\t\tpld_size = serializeJson (root, payload, PAYLOAD_SIZE);\n\t} else if (payload_type == MSG_PACK) {\n\t\tconst int capacity = JSON_ARRAY_SIZE (25) + 25 * JSON_OBJECT_SIZE (4);\n\t\tDynamicJsonDocument jsonBuffer (capacity);\n\t\tDeserializationError error = deserializeMsgPack (jsonBuffer, buffer, length);\n\t\tif (error != DeserializationError::Ok) {\n\t\t\tDEBUG_ERROR (\"Error decoding MSG Pack data: %s\", error.c_str ());\n\t\t\treturn;\n\t\t}\n\t\tpld_size = serializeJson (jsonBuffer, payload, PAYLOAD_SIZE);\n\t} else if (payload_type == RAW) {\n\t\tif (length <= PAYLOAD_SIZE) {\n\t\t\tmemcpy (payload, buffer, length);\n\t\t\tpld_size = length;\n\t\t} else { // This will not happen but may lead to errors in case of using another physical transport\n\t\t\tmemcpy (payload, buffer, PAYLOAD_SIZE);\n\t\t\tpld_size = PAYLOAD_SIZE;\n\t\t}\n\t}\n\n\tGwOutput.outputDataSend (mac_str, payload, pld_size);\n\tDEBUG_INFO (\"Published data message from %s: %s\", mac_str, payload);\n\tif (lostMessages > 0) {\n\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"%u\", lostMessages);\n\t\tGwOutput.outputDataSend (mac_str, payload, pld_size, GwOutput_data_type::lostmessages);\n\t\t//DEBUG_INFO (\"Published MQTT from %s: %s\", mac_str, payload);\n\t}\n\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"per\\\":%e,\\\"lostmessages\\\":%u,\\\"totalmessages\\\":%u,\\\"packetshour\\\":%.2f}\",\n\t\t\t\t\t\t EnigmaIOTGateway.getPER ((uint8_t*)mac),\n\t\t\t\t\t\t EnigmaIOTGateway.getErrorPackets ((uint8_t*)mac),\n\t\t\t\t\t\t EnigmaIOTGateway.getTotalPackets ((uint8_t*)mac),\n\t\t\t\t\t\t EnigmaIOTGateway.getPacketsHour ((uint8_t*)mac));\n\tGwOutput.outputDataSend (mac_str, payload, pld_size, GwOutput_data_type::status);\n\t//DEBUG_INFO (\"Published MQTT from %s: %s\", mac_str, payload);\n\t//free (payload);\n}\n\nvoid onDownlinkData (uint8_t* address, char* nodeName, control_message_type_t msgType, char* data, unsigned int len) {\n    //char* buffer;\n    char buffer[1024];\n\tunsigned int bufferLen = len;\n\n\tif (nodeName) {\n\t\tDEBUG_INFO (\"DL Message for %s. Type 0x%02X\", nodeName, msgType);\n\t} else {\n\t\tDEBUG_INFO (\"DL Message for \" MACSTR \". Type 0x%02X\", MAC2STR (address), msgType);\n\t}\n\tDEBUG_DBG (\"Data: %.*s\", len, data);\n\n\t//buffer = (char*)malloc (len + 1);\n\tsprintf (buffer, \"%.*s\", len, data);\n\tbufferLen++;\n\n\tif (!EnigmaIOTGateway.sendDownstream (address, (uint8_t*)buffer, bufferLen, msgType)) {\n\t\tDEBUG_ERROR (\"Error sending esp_now message to \" MACSTR, MAC2STR (address));\n\t} else {\n\t\tDEBUG_DBG (\"Esp-now message sent or queued correctly\");\n\t}\n\n\t//free (buffer);\n}\n\nvoid newNodeConnected (uint8_t* mac, uint16_t node_id, char* nodeName = NULL) {\n\tif (nodeName) {\n\t\tif (!GwOutput.newNodeSend (nodeName, node_id)) {\n\t\t\tDEBUG_WARN (\"Error sending new node %s\", nodeName);\n\t\t} else {\n\t\t\tDEBUG_DBG (\"New node %s message sent\", nodeName);\n\t\t}\n\t} else {\n\t\tchar macstr[ENIGMAIOT_ADDR_LEN * 3];\n\t\tmac2str (mac, macstr);\n\t\tif (!GwOutput.newNodeSend (macstr, node_id)) {\n\t\t\tDEBUG_WARN (\"Error sending new node %s\", macstr);\n\t\t} else {\n\t\t\tDEBUG_DBG (\"New node %s message sent\", macstr);\n\t\t}\n\t}\n\n}\n\nvoid nodeDisconnected (uint8_t* mac, gwInvalidateReason_t reason) {\n\tchar macstr[ENIGMAIOT_ADDR_LEN * 3];\n\tmac2str (mac, macstr);\n\t//Serial.printf (\"Node %s disconnected. Reason %u\\n\", macstr, reason);\n\tif (!GwOutput.nodeDisconnectedSend (macstr, reason)) {\n\t\tDEBUG_WARN (\"Error sending node disconnected %s reason %d\", macstr, reason);\n\t} else {\n\t\tDEBUG_DBG (\"Node %s disconnected message sent. Reason %d\", macstr, reason);\n\t}\n}\n\n#ifdef ESP32\n// void EnigmaIOTGateway_handle (void* param) {\n// \tfor (;;) {\n// \t\tEnigmaIOTGateway.handle ();\n// \t\tvTaskDelay (0);\n// \t}\n// }\n\n// void GwOutput_handle (void* param) {\n// \tfor (;;) {\n// \t\tGwOutput.loop ();\n// \t\tvTaskDelay (0);\n// \t}\n// }\n\nTaskHandle_t xEnigmaIOTGateway_handle = NULL;\nTaskHandle_t gwoutput_handle = NULL;\n#endif // ESP32\n\nvoid setup () {\n\tSerial.begin (115200); Serial.println (); Serial.println ();\n\n#ifdef ESP32\n\t// Turn-off the 'brownout detector' to avoid random restarts during wake up,\n\t// normally due to bad quality regulator on board\n\tWRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);\n#endif\n\n#ifdef ESP8266\n\tets_timer_setfn (&connectionLedTimer, flashConnectionLed, (void*)&connectionLed);\n#elif defined ESP32\n\n#endif\n\tpinMode (BUILTIN_LED, OUTPUT);\n\tdigitalWrite (BUILTIN_LED, HIGH);\n\tstartConnectionFlash (100);\n\n\n\tif (!GwOutput.loadConfig ()) {\n\t\tDEBUG_WARN (\"Error reading config file\");\n\t}\n\n\tEnigmaIOTGateway.setRxLed (BLUE_LED);\n\tEnigmaIOTGateway.setTxLed (RED_LED);\n\tEnigmaIOTGateway.onNewNode (newNodeConnected);\n\tEnigmaIOTGateway.onNodeDisconnected (nodeDisconnected);\n\tEnigmaIOTGateway.onWiFiManagerStarted (wifiManagerStarted);\n\tEnigmaIOTGateway.onWiFiManagerExit (wifiManagerExit);\n\tEnigmaIOTGateway.onDataRx (processRxData);\n\tEnigmaIOTGateway.begin (&Espnow_hal);\n\n#if CONNECT_TO_WIFI_AP == 1\n\tWiFi.mode (WIFI_AP_STA);\n\tWiFi.begin ();\n\tEnigmaIOTGateway.configWiFiManager ();\n#else\n\t//WiFi.mode (WIFI_AP);\n#endif // CONNECT_TO_WIFI_AP\n\n\n\tWiFi.softAP (EnigmaIOTGateway.getNetworkName (), EnigmaIOTGateway.getNetworkKey ());\n\tstopConnectionFlash ();\n\n\tDEBUG_INFO (\"STA MAC Address: %s\", WiFi.macAddress ().c_str ());\n\tDEBUG_INFO (\"AP MAC Address: %s\", WiFi.softAPmacAddress ().c_str ());\n\tDEBUG_INFO (\"BSSID Address: %s\", WiFi.BSSIDstr ().c_str ());\n\n\tDEBUG_INFO (\"IP address: %s\", WiFi.localIP ().toString ().c_str ());\n\tDEBUG_INFO (\"AP IP address: %s\", WiFi.softAPIP ().toString ().c_str ());\n\tDEBUG_INFO (\"WiFi Channel: %d\", WiFi.channel ());\n\n\tDEBUG_INFO (\"WiFi SSID: %s\", WiFi.SSID ().c_str ());\n\tDEBUG_INFO (\"Network Name: %s\", EnigmaIOTGateway.getNetworkName ());\n\n\tGwOutput.setDlCallback (onDownlinkData);\n\tGwOutput.begin ();\n\n#ifdef ESP32\n\t//xTaskCreate (EnigmaIOTGateway_handle, \"handle\", 10000, NULL, 1, &xEnigmaIOTGateway_handle);\n\t//xTaskCreatePinnedToCore (EnigmaIOTGateway_handle, \"handle\", 4096, NULL, 0, &xEnigmaIOTGateway_handle, 1);\n\t//xTaskCreatePinnedToCore (GwOutput_handle, \"gwoutput\", 10000, NULL, 2, &gwoutput_handle, 1);\n#endif\n}\n\nvoid loop () {\n\n\tGwOutput.loop ();\n\tEnigmaIOTGateway.handle ();\n\n}\n"
  },
  {
    "path": "examples/EnigmaIOTGatewayDummy/GwOutput_dummy.cpp",
    "content": "/**\n  * @file GwOutput_dummy.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Dummy Gateway output module\n  *\n  * Module to serve as start boilerplate of EnigmaIOT gateway projects\n  */\n\n#include <Arduino.h>\n#include \"GwOutput_dummy.h\"\n#include <ESPAsyncWebServer.h>\n#include <helperFunctions.h>\n#include <EnigmaIOTdebug.h>\n\n#ifdef ESP32\n#include <SPIFFS.h>\n#include \"esp_system.h\"\n#include \"esp_event.h\"\n#include \"esp_tls.h\"\n#elif defined(ESP8266)\n#include <Hash.h>\n#endif // ESP32\n\n#include <FS.h>\n\n\nGatewayOutput_dummy GwOutput;\n\nvoid GatewayOutput_dummy::configManagerStart (EnigmaIOTGatewayClass* enigmaIotGw) {\n\n}\n\nbool GatewayOutput_dummy::saveConfig () {\n    return true;\n}\n\nbool GatewayOutput_dummy::loadConfig () {\n    return true;\n}\n\nvoid GatewayOutput_dummy::configManagerExit (bool status) {\n\n}\n\nbool GatewayOutput_dummy::begin () {\n    DEBUG_INFO (\"Begin\");\n    return true;\n}\n\n\nvoid GatewayOutput_dummy::loop () {\n\n}\n\nbool GatewayOutput_dummy::outputDataSend (char* address, char* data, size_t length, GwOutput_data_type_t type) {\n    DEBUG_WARN (\"Output data send. Address %s. Data %.*s\", address, length, data);\n    return true;\n}\n\nbool GatewayOutput_dummy::outputControlSend (char* address, uint8_t* data, size_t length) {\n    DEBUG_INFO (\"Output control send. Address %s. Data %s\", address, printHexBuffer (data, length));\n    return true;\n}\n\nbool GatewayOutput_dummy::newNodeSend (char* address, uint16_t node_id) {\n    DEBUG_WARN (\"New node: %s NodeID: %d\", address, node_id);\n    return true;\n}\n\nbool GatewayOutput_dummy::nodeDisconnectedSend (char* address, gwInvalidateReason_t reason) {\n    DEBUG_WARN (\"Node %s disconnected. Reason %d\", address, reason);\n    return true;\n}"
  },
  {
    "path": "examples/EnigmaIOTGatewayDummy/GwOutput_dummy.h",
    "content": "/**\n  * @file GwOutput_dummy.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief  Dummy Gateway output module\n  */\n\n#ifndef _GWOUT_DUMMY_h\n#define _GWOUT_DUMMY_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n#include <EnigmaIOTGateway.h>\n#include <GwOutput_generic.h>\n\nclass GatewayOutput_dummy : public GatewayOutput_generic {\nprotected:\n\t//EnigmaIOTGatewayClass* enigmaIotGateway; ///< @brief Pointer to EnigmaIOT gateway instance\n\t//onDlData_t downlinkCb; ///< @brief downlink processing function handle\n\n\t/**\n\t  * @brief Saves output module configuration\n\t  * @return Returns `true` if save was successful. `false` otherwise\n\t  */\n\tbool saveConfig ();\n\npublic:\n\t//String netName; ///< @brief EnigmaIOT network name\n\t//String clientId; ///< @brief clientId\n\t//String gwTopic; ///< @brief topic for gateway\n\n\t//virtual int send () = 0;\n\t//virtual void onReveive () = 0;\n\n\t/**\n\t  * @brief Called when wifi manager starts config portal\n\t  * @param enigmaIotGw Pointer to EnigmaIOT gateway instance\n\t  */\n\tvoid configManagerStart (EnigmaIOTGatewayClass* enigmaIotGw);\n\n\t/**\n\t  * @brief Called when wifi manager exits config portal\n\t  * @param status `true` if configuration was successful\n\t  */\n\tvoid configManagerExit (bool status);\n\n\t/**\n\t  * @brief Starts output module\n\t  * @return Returns `true` if successful. `false` otherwise\n\t  */\n\tbool begin ();\n\n\t/**\n\t  * @brief Loads output module configuration\n\t  * @return Returns `true` if load was successful. `false` otherwise\n\t  */\n\tbool loadConfig ();\n\n\t /**\n\t  * @brief Send control data from nodes\n\t  * @param address Node Address\n\t  * @param data Message data buffer\n\t  * @param length Data buffer length\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tbool outputControlSend (char* address, uint8_t* data, size_t length);\n\n\t /**\n\t  * @brief Send new node notification\n\t  * @param address Node Address\n\t  * @param node_id Node Id\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tbool newNodeSend (char* address, uint16_t node_id);\n\n\t /**\n\t  * @brief Send node disconnection notification\n\t  * @param address Node Address\n\t  * @param reason Disconnection reason code\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tbool nodeDisconnectedSend (char* address, gwInvalidateReason_t reason);\n\n\t /**\n\t  * @brief Send data from nodes\n\t  * @param address Node Address\n\t  * @param data Message data buffer\n\t  * @param length Data buffer length\n\t  * @param type Type of message\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tbool outputDataSend (char* address, char* data, size_t length, GwOutput_data_type_t type = data);\n\n\t /**\n\t  * @brief Should be called often for module management\n\t  */\n\tvoid loop ();\n\n\t /**\n\t  * @brief Set data processing function\n\t  * @param cb Function handle\n\t  */\n\tvoid setDlCallback (onDlData_t cb) {\n\t\tdownlinkCb = cb;\n\t}\n};\n\nextern GatewayOutput_dummy GwOutput;\n\n#endif // _GWOUT_DUMMY_h"
  },
  {
    "path": "examples/EnigmaIOTGatewayDummy/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time ;, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[env:esp32-DummyGateway]\nextends = esp32_common\n\n\n[env:esp8266-DummyGateway]\nextends = esp8266_common\n\n"
  },
  {
    "path": "examples/EnigmaIOTGatewayDummy/readme.md",
    "content": "# EnigmaIOT Gateway Dummy\n\nThis example represent the basis to develop an EnigmaIOT gateway. You may build a gateway that register measurements from node sensors to an SD or uses LoRaWAN as output instead MQTT.\n\nTo do that you only need to implement the class defined in [GwOutput_generic.h](https://github.com/gmag11/EnigmaIOT/blob/master/src/GwOutput_generic.h)\n\nThis only implements the EnigmaIOT side using ESP-NOW."
  },
  {
    "path": "examples/EnigmaIOTGatewayMQTT/.gitignore",
    "content": ".pio\n.vscode"
  },
  {
    "path": "examples/EnigmaIOTGatewayMQTT/EnigmaIOTGatewayMQTT.ino",
    "content": "/**\n  * @file EnigmaIOTGatewayMQTT.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief MQTT Gateway based on EnigmaIoT over ESP-NOW\n  *\n  * EnigmaIOT Gateway to connect nodes to MQTT broker\n  */\n\n\n#include <Arduino.h>\n\n#include \"GwOutput_mqtt.h\"\n\n#ifdef SECURE_MQTT\n#include <WiFiClientSecure.h>\n#else\n#include <WiFiClient.h>\n#endif // SECURE_MQTT\n\n\n#ifdef ESP32\n#include <WiFi.h>\n#include \"soc/soc.h\"           // Disable brownout problems\n#include \"soc/rtc_cntl_reg.h\"  // Disable brownout problems\n#elif defined ESP8266\n#include <ESP8266WiFi.h>\n#endif // ESP32\n\n#include <ArduinoOTA.h>\n\n#include <CayenneLPP.h>\n\n#include <EnigmaIOTGateway.h>\n#include <helperFunctions.h>\n#include <EnigmaIOTdebug.h>\n#include <espnow_hal.h>\n#include <ArduinoJson.h>\n#include <ESPAsyncWiFiManager.h>\n\n//#define MEAS_TEMP // Temperature measurement for Gateway monitoring using DS18B20\n\n#ifdef MEAS_TEMP\n#include <DallasTemperature.h>\n#include <OneWire.h>\nconst time_t statusPeriod = 300 * 1000;\nconst int DS18B20_PIN = 16;\nconst int DS18B20_PREC = 12;\nOneWire ow (DS18B20_PIN);\nDallasTemperature ds18b20 (&ow);\nDeviceAddress dsAddress;\nfloat temperature;\n#endif\n\n#ifndef LED_BUILTIN\n#define LED_BUILTIN 5\n#endif // BUILTIN_LED\n\n#define BLUE_LED LED_BUILTIN\n#define RED_LED LED_BUILTIN\n\n#ifdef ESP32\nTimerHandle_t connectionLedTimer;\n#elif defined(ESP8266)\nETSTimer connectionLedTimer;\n#endif // ESP32\n\nconst int connectionLed = LED_BUILTIN;\nbool connectionLedFlashing = false;\n\nbool restartRequested = false;\ntime_t restartRequestTime;\n\n\nvoid flashConnectionLed (void* led) {\n\t//digitalWrite (*(int*)led, !digitalRead (*(int*)led));\n\tdigitalWrite (LED_BUILTIN, !digitalRead (LED_BUILTIN));\n}\n\nvoid startConnectionFlash (int period) {\n#ifdef ESP32\n\tif (!connectionLedFlashing) {\n\t\tconnectionLedFlashing = true;\n\t\tconnectionLedTimer = xTimerCreate (\"led_flash\", pdMS_TO_TICKS (period), pdTRUE, (void*)0, flashConnectionLed);\n\t\txTimerStart (connectionLedTimer, 0);\n\t}\n#elif defined (ESP8266)\n\tets_timer_disarm (&connectionLedTimer);\n\tif (!connectionLedFlashing) {\n\t\tconnectionLedFlashing = true;\n\t\tets_timer_arm_new (&connectionLedTimer, period, true, true);\n\t}\n#endif // ESP32\n}\n\nvoid stopConnectionFlash () {\n#ifdef ESP32\n\tif (connectionLedFlashing) {\n\t\tconnectionLedFlashing = false;\n\t\txTimerStop (connectionLedTimer, 0);\n\t\txTimerDelete (connectionLedTimer, 0);\n\t}\n#elif defined(ESP8266)\n\tif (connectionLedFlashing) {\n\t\tconnectionLedFlashing = false;\n\t\tets_timer_disarm (&connectionLedTimer);\n\t\tdigitalWrite (connectionLed, LED_OFF);\n\t}\n#endif // ESP32\n}\n\nvoid arduinoOTAConfigure () {\n\t// Port defaults to 3232\n\t// ArduinoOTA.setPort(3232);\n\n\t// Hostname defaults to esp3232-[MAC]\n\tArduinoOTA.setHostname (EnigmaIOTGateway.getNetworkName ());\n\n\t// No authentication by default\n\tArduinoOTA.setPassword (EnigmaIOTGateway.getNetworkKey (true));\n\n\t// Password can be set with it's md5 value as well\n\t// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3\n\t// ArduinoOTA.setPasswordHash(\"21232f297a57a5a743894a0e4a801fc3\");\n\n\tArduinoOTA.onStart ([] () {\n\t\tif (ArduinoOTA.getCommand () == U_FLASH) {\n\t\t\tDEBUG_WARN (\"Start updating sketch\");\n\t\t} else {// U_SPIFFS\n\t\t\tDEBUG_WARN (\"Start updating filesystem\");\n\t\t\t// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()\n\t\t}\n\t\t\t\t\t\t});\n\tArduinoOTA.onEnd ([] () {\n\t\tDEBUG_WARN (\"OTA Finished\");\n\t\t\t\t\t  });\n\tArduinoOTA.onProgress ([] (unsigned int progress, unsigned int total) {\n\t\tstatic bool printed = false;\n\t\tunsigned int percent = progress / (total / 100);\n\t\tdigitalWrite (BLUE_LED, !digitalRead (BLUE_LED));\n\t\t// if (!(percent % 1)) {\n\t\t// \t//Serial.print ('.');\n\t\t// }\n\t\tif (!(percent % 20) && !printed && percent != 0) {\n\t\t\tDEBUG_WARN (\" %d%%\\n\", percent);\n\t\t\tprinted = true;\n\t\t} else if (percent % 20) {\n\t\t\tprinted = false;\n\t\t}\n\t\tif (progress == total) {\n\t\t\tDEBUG_WARN (\"OTA transfer finished\");\n\t\t}\n\t\t\t\t\t\t   });\n\tArduinoOTA.onError ([] (ota_error_t error) {\n\t\tDEBUG_WARN (\"OTA Error[%u]: \", error);\n\t\tif (error == OTA_AUTH_ERROR) { DEBUG_WARN (\"OTA Auth Failed\"); } \t\telse if (error == OTA_BEGIN_ERROR) { DEBUG_WARN (\"OTA Begin Failed\"); } \t\telse if (error == OTA_CONNECT_ERROR) { DEBUG_WARN (\"OTA Connect Failed\"); } \t\telse if (error == OTA_RECEIVE_ERROR) { DEBUG_WARN (\"OTA Receive Failed\"); } \t\telse if (error == OTA_END_ERROR) { DEBUG_WARN (\"OTA End Failed\"); }\n\t\t\t\t\t\t});\n\n\tArduinoOTA.begin ();\n}\n\nvoid wifiManagerExit (boolean status) {\n\tGwOutput.configManagerExit (status);\n}\n\nvoid wifiManagerStarted () {\n\tGwOutput.configManagerStart (&EnigmaIOTGateway);\n}\n\nvoid processRxControlData (char* macStr, uint8_t* data, uint8_t length) {\n\tif (data) {\n\t\tif (data[0] == VERSION_ANS && length >= 4) {\n\t\t\tDEBUG_INFO (\"Version message: %d.%d.%d\", data[1], data[2], data[3]);\n\t\t\tNode* node = EnigmaIOTGateway.getNodes ()->getNodeFromName (macStr);\n\t\t\tif (node) {\n\t\t\t\tnode->setVersion (data[1], data[2], data[3]);\n\t\t\t}\n\t\t}\n\t\tGwOutput.outputControlSend (macStr, data, length);\n\t}\n}\n\nvoid doRestart () {\n\tDEBUG_WARN (\"Restart requested\");\n\tconst size_t capacity = JSON_OBJECT_SIZE (1);\n\tsize_t len;\n\tchar* payload;\n\n\tDynamicJsonDocument doc (capacity);\n\n\tdoc[\"action\"] = \"restart\";\n\n\tlen = measureJson (doc) + 1;\n\tpayload = (char*)malloc (len);\n\tserializeJson (doc, (char*)payload, len);\n\tchar addr[] = \"gateway\";\n\tGwOutput.outputDataSend (addr, payload, len - 1);\n\tfree (payload);\n\n\trestartRequested = true;\n\trestartRequestTime = millis ();\n\n}\n\n#if SUPPORT_HA_DISCOVERY\nvoid processHADiscovery (const char* topic, char* message, size_t len) {\n    DEBUG_INFO (\"About to process HA discovery. Len: %d - %s --> %.*s\", len, topic, len, message);\n    GwOutput.rawMsgSend (topic, message, len, true);\n}\n#endif\n\nvoid processRxData (uint8_t* mac, uint8_t* buffer, uint8_t length, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char* nodeName = NULL) {\n\tuint8_t* addr = mac;\n\tsize_t pld_size = 0;\n\tconst int PAYLOAD_SIZE = 1024; // Max MQTT payload in PubSubClient library normal operation.\n\n\tchar payload[PAYLOAD_SIZE];\n\n\tchar mac_str[ENIGMAIOT_ADDR_LEN * 3];\n\tmac2str (addr, mac_str);\n\n\tif (control) {\n\t\tprocessRxControlData (nodeName ? nodeName : mac_str, buffer, length);\n\t\treturn;\n\t}\n\t//char* netName = EnigmaIOTGateway.getNetworkName ();\n\tif (payload_type == CAYENNELPP) {\n\t\tDEBUG_INFO (\"CayenneLPP message\");\n\t\tconst int capacity = JSON_ARRAY_SIZE (25) + 25 * JSON_OBJECT_SIZE (4);\n\t\tDynamicJsonDocument jsonBuffer (capacity);\n\t\tJsonArray root = jsonBuffer.createNestedArray ();\n\t\tCayenneLPP cayennelpp (MAX_DATA_PAYLOAD_SIZE);\n\n\t\tcayennelpp.decode ((uint8_t*)buffer, length, root);\n\t\tuint8_t error = cayennelpp.getError ();\n\t\tif (error != LPP_ERROR_OK) {\n\t\t\tDEBUG_ERROR (\"Error decoding CayenneLPP data: %d\", error);\n\t\t\treturn;\n\t\t}\n\t\tpld_size = serializeJson (root, payload, PAYLOAD_SIZE);\n\t} else if (payload_type == MSG_PACK) {\n\t\tDEBUG_INFO (\"MsgPack message\");\n\t\tconst int capacity = JSON_ARRAY_SIZE (25) + 25 * JSON_OBJECT_SIZE (4);\n\t\tDynamicJsonDocument jsonBuffer (capacity);\n\t\tDeserializationError error = deserializeMsgPack (jsonBuffer, buffer, length);\n\t\tif (error != DeserializationError::Ok) {\n\t\t\tDEBUG_ERROR (\"Error decoding MSG Pack data: %s\", error.c_str ());\n\t\t\treturn;\n\t\t}\n\t\tpld_size = serializeJson (jsonBuffer, payload, PAYLOAD_SIZE);\n\t} else if (payload_type == RAW) {\n\t\tDEBUG_INFO (\"RAW message\");\n\t\tif (length <= PAYLOAD_SIZE) {\n\t\t\tmemcpy (payload, buffer, length);\n\t\t\tpld_size = length;\n\t\t} else { // This will not happen but may lead to errors in case of using another physical transport\n\t\t\tmemcpy (payload, buffer, PAYLOAD_SIZE);\n\t\t\tpld_size = PAYLOAD_SIZE;\n\t\t}\n\t}\n\n\tGwOutput.outputDataSend (nodeName ? nodeName : mac_str, payload, pld_size);\n\tDEBUG_INFO (\"Published data message from %s, length %d: %s, Encoding 0x%02X\", nodeName ? nodeName : mac_str, pld_size, payload, payload_type);\n\tif (lostMessages > 0) {\n\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"lostMessages\\\":%u}\", lostMessages);\n\t\tGwOutput.outputDataSend (nodeName ? nodeName : mac_str, payload, pld_size, GwOutput_data_type::lostmessages);\n\t\tDEBUG_INFO (\"Published MQTT from %s: %s\", nodeName ? nodeName : mac_str, payload);\n\t}\n#if ENABLE_STATUS_MESSAGES\n    pld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"rssi\\\":%d,\\\"per\\\":%e,\\\"lostmessages\\\":%u,\\\"totalmessages\\\":%u,\\\"packetshour\\\":%.2f}\",\n                         EnigmaIOTGateway.getNodes()->getNodeFromMAC((uint8_t*)mac)->getRSSI(),\n                         EnigmaIOTGateway.getPER ((uint8_t*)mac),\n\t\t\t\t\t\t EnigmaIOTGateway.getErrorPackets ((uint8_t*)mac),\n\t\t\t\t\t\t EnigmaIOTGateway.getTotalPackets ((uint8_t*)mac),\n\t\t\t\t\t\t EnigmaIOTGateway.getPacketsHour ((uint8_t*)mac));\n\tGwOutput.outputDataSend (nodeName ? nodeName : mac_str, payload, pld_size, GwOutput_data_type::status);\n\tDEBUG_INFO (\"Published MQTT from %s: %s\", nodeName ? nodeName : mac_str, payload);\n#endif\n}\n\nvoid onDownlinkData (uint8_t* address, char* nodeName, control_message_type_t msgType, char* data, unsigned int len) {\n\tuint8_t* buffer;\n\tunsigned int bufferLen = len;\n\tgatewayPayloadEncoding_t encoding = ENIGMAIOT;\n\n\tif (nodeName) {\n\t\tDEBUG_INFO (\"DL Message for %s. Type 0x%02X\", nodeName, msgType);\n\t} else {\n\t\tDEBUG_INFO (\"DL Message for \" MACSTR \". Type 0x%02X\", MAC2STR (address), msgType);\n\t}\n\tDEBUG_DBG (\"Data: %.*s Length: %d\", len, data, len);\n\n\tif (msgType == USERDATA_GET || msgType == USERDATA_SET) {\n\t\tconst int capacity = JSON_ARRAY_SIZE (25) + 25 * JSON_OBJECT_SIZE (4);\n\t\tDynamicJsonDocument json (capacity);\n\t\tDeserializationError error = deserializeJson (json, data, len, DeserializationOption::NestingLimit (3));\n\t\tif (error == DeserializationError::Ok) {\n\t\t\tDEBUG_INFO (\"JSON Message. Result %s\", error.c_str ());\n\t\t\tbufferLen = measureMsgPack (json) + 1; // Add place for \\0\n\t\t\tbuffer = (uint8_t*)malloc (bufferLen);\n\t\t\tbufferLen = serializeMsgPack (json, (char*)buffer, bufferLen);\n\t\t\tencoding = MSG_PACK;\n\t\t} else {\n\t\t\tDEBUG_INFO (\"Not JSON Message. Error %s\", error.c_str ());\n\t\t\tbufferLen++; // Add place for \\0\n\t\t\tbuffer = (uint8_t*)malloc (bufferLen);\n\t\t\tsprintf ((char*)buffer, \"%.*s\", len, data);\n\t\t\tencoding = RAW;\n\t\t}\n\t} else {\n\t\tbufferLen = len + 1;\n\t\tbuffer = (uint8_t*)calloc (sizeof (uint8_t), bufferLen);\n\t\tmemcpy (buffer, data, len);\n\t}\n\n\n\tif (!EnigmaIOTGateway.sendDownstream (address, buffer, bufferLen, msgType, encoding, nodeName)) {\n\t\tif (nodeName) {\n\t\t\tDEBUG_WARN (\"Error sending esp_now message to %s\", nodeName);\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Error sending esp_now message to \" MACSTR, MAC2STR (address));\n\t\t}\n\t} else {\n\t\tDEBUG_DBG (\"Esp-now message sent or queued correctly\");\n\t}\n\n\tfree (buffer);\n}\n\nvoid newNodeConnected (uint8_t* mac, uint16_t node_id, char* nodeName = nullptr) {\n\n\t//Serial.printf (\"New node connected: %s\\n\", macstr);\n\n\tif (nodeName) {\n\t\tif (!GwOutput.newNodeSend (nodeName, node_id)) {\n\t\t\tDEBUG_WARN (\"Error sending new node %s\", nodeName);\n\t\t} else {\n\t\t\tDEBUG_DBG (\"New node %s message sent\", nodeName);\n\t\t}\n\t} else {\n\t\tchar macstr[ENIGMAIOT_ADDR_LEN * 3];\n\t\tmac2str (mac, macstr);\n\t\tif (!GwOutput.newNodeSend (macstr, node_id)) {\n\t\t\tDEBUG_WARN (\"Error sending new node %s\", macstr);\n\t\t} else {\n\t\t\tDEBUG_DBG (\"New node %s message sent\", macstr);\n\t\t}\n\t}\n\n}\n\nvoid nodeDisconnected (uint8_t* mac, gwInvalidateReason_t reason) {\n\tchar macstr[ENIGMAIOT_ADDR_LEN * 3];\n\tmac2str (mac, macstr);\n\t//Serial.printf (\"Node %s disconnected. Reason %u\\n\", macstr, reason);\n\tif (!GwOutput.nodeDisconnectedSend (macstr, reason)) {\n\t\tDEBUG_WARN (\"Error sending node disconnected %s reason %d\", macstr, reason);\n\t} else {\n\t\tDEBUG_DBG (\"Node %s disconnected message sent. Reason %d\", macstr, reason);\n\t}\n}\n\n//#ifdef ESP32\n//void EnigmaIOTGateway_handle (void * param) {\n//\tfor (;;) {\n//\t\tEnigmaIOTGateway.handle ();\n//\t\tvTaskDelay (0);\n//\t}\n//}\n//\n//void GwOutput_handle (void* param) {\n//\tfor (;;) {\n//\t\tGwOutput.loop ();\n//\t\tvTaskDelay (0);\n//\t}\n//}\n//\n//TaskHandle_t xEnigmaIOTGateway_handle = NULL;\n//TaskHandle_t gwoutput_handle = NULL;\n//#endif // ESP32\n\nvoid setup () {\n\tSerial.begin (921600); Serial.println (); Serial.println ();\n\n#ifdef ESP32\n// Turn-off the 'brownout detector' to avoid random restarts during wake up,\n// normally due to bad quality regulator on board\n\tWRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);\n#endif\n\n#ifdef ESP8266\n\tets_timer_setfn (&connectionLedTimer, flashConnectionLed, (void*)&connectionLed);\n#elif defined ESP32\n\n#endif\n\tpinMode (LED_BUILTIN, OUTPUT);\n\tdigitalWrite (LED_BUILTIN, LED_ON);\n\n#ifdef MEAS_TEMP\n    ds18b20.begin ();\n    \n    DEBUG_WARN (\"Found %u sensors\", ds18b20.getDeviceCount ());\n    \n    if (ds18b20.getAddress (dsAddress, 0)) {\n\t\tDEBUG_WARN (\"DS18B20 address: %02X %02X %02X %02X %02X %02X %02X %02X\",\n\t\t\t\t\tdsAddress[0], dsAddress[1], dsAddress[2], dsAddress[3],\n\t\t\t\t\tdsAddress[4], dsAddress[5], dsAddress[6], dsAddress[7]);\n\t} else {\n\t\tDEBUG_WARN (\"No DS18B20 found\");\n\t}\n\tds18b20.setWaitForConversion (false);\n\tds18b20.setResolution (DS18B20_PREC);\n#endif // MEAS_TEMP\n\n    startConnectionFlash (100);\n    \n    if (!GwOutput.loadConfig ()) {\n\t\tDEBUG_WARN (\"Error reading config file\");\n\t}\n\n\tEnigmaIOTGateway.setRxLed (BLUE_LED);\n\tEnigmaIOTGateway.setTxLed (RED_LED);\n\tEnigmaIOTGateway.onNewNode (newNodeConnected);\n\tEnigmaIOTGateway.onNodeDisconnected (nodeDisconnected);\n\tEnigmaIOTGateway.onWiFiManagerStarted (wifiManagerStarted);\n\tEnigmaIOTGateway.onWiFiManagerExit (wifiManagerExit);\n    EnigmaIOTGateway.onDataRx (processRxData);\n#if SUPPORT_HA_DISCOVERY\n    EnigmaIOTGateway.onHADiscovery (processHADiscovery);\n#endif\n\tEnigmaIOTGateway.onGatewayRestartRequested (doRestart);\n\n\tEnigmaIOTGateway.begin (&Espnow_hal);\n\n\tWiFi.mode (WIFI_AP_STA);\n\tWiFi.begin ();\n\n\tEnigmaIOTGateway.configWiFiManager ();\n\n\tWiFi.softAP (EnigmaIOTGateway.getNetworkName (), EnigmaIOTGateway.getNetworkKey (true));\n\tstopConnectionFlash ();\n\n\tDEBUG_INFO (\"STA MAC Address: %s\", WiFi.macAddress ().c_str ());\n\tDEBUG_INFO (\"AP MAC Address: %s\", WiFi.softAPmacAddress ().c_str ());\n\tDEBUG_INFO (\"BSSID Address: %s\", WiFi.BSSIDstr ().c_str ());\n\n\tDEBUG_INFO (\"IP address: %s\", WiFi.localIP ().toString ().c_str ());\n\tDEBUG_INFO (\"WiFi Channel: %d\", WiFi.channel ());\n\tDEBUG_INFO (\"WiFi SSID: %s\", WiFi.SSID ().c_str ());\n\tDEBUG_INFO (\"Network Name: %s\", EnigmaIOTGateway.getNetworkName ());\n\n\tGwOutput.setDlCallback (onDownlinkData);\n\tGwOutput.begin ();\n\n\tarduinoOTAConfigure ();\n\n#ifdef ESP32\n\t//xTaskCreate (EnigmaIOTGateway_handle, \"handle\", 10000, NULL, 1, &xEnigmaIOTGateway_handle);\n\t//xTaskCreatePinnedToCore (EnigmaIOTGateway_handle, \"handle\", 4096, NULL, 0, &xEnigmaIOTGateway_handle, 1);\n\t//xTaskCreatePinnedToCore (GwOutput_handle, \"gwoutput\", 10000, NULL, 2, &gwoutput_handle, 1);\n#endif\n}\n\n#ifdef MEAS_TEMP\nvoid sendStatus (float temperature) {\n\tconst size_t capacity = JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (3) + 30;;\n\tsize_t len;\n\tchar* payload;\n\n\tDynamicJsonDocument doc (capacity);\n\n    JsonObject status = doc.createNestedObject (\"status\");\n    if (temperature > -100) {\n        status[\"temp\"] = temperature;\n    }\n    status[\"nodes\"] = EnigmaIOTGateway.getActiveNodesNumber ();\n\tstatus[\"mem\"] = ESP.getFreeHeap ();\n\n\tlen = measureJson (doc) + 1;\n\tpayload = (char*)malloc (len);\n\tserializeJson (doc, (char*)payload, len);\n\tchar addr[] = \"gateway\";\n\tGwOutput.outputDataSend (addr, payload, len - 1);\n\tfree (payload);\n}\n#endif // MEAS_TEMP\n\nvoid loop () {\n\tGwOutput.loop ();\n\tEnigmaIOTGateway.handle ();\n\tArduinoOTA.handle ();\n\n#ifdef MEAS_TEMP\n\tstatic bool tempRequested = false;\n\tstatic time_t lastTempTime = 0;\n\n\tif (ds18b20.validAddress (dsAddress)) {\n        if ((millis () - lastTempTime > statusPeriod && !tempRequested) || !lastTempTime) {\n            if (ds18b20.requestTemperaturesByIndex (0)) {\n                DEBUG_INFO (\"Temperature requested\");\n                lastTempTime = millis ();\n                tempRequested = true;\n            } else {\n                DEBUG_WARN (\"Temperature request error\");\n            }\n\t\t}\n\t\tif (tempRequested) {\n\t\t\tif (ds18b20.isConversionComplete ()) {\n\t\t\t\ttemperature = ds18b20.getTempC (dsAddress);\n\t\t\t\tsendStatus (temperature);\n\t\t\t\tDEBUG_WARN (\"Temperature: %f\", temperature);\n\t\t\t\ttempRequested = false;\n\t\t\t}\n\t\t}\n\t}\n#endif // MEAS_TEMP\n\n\tif (restartRequested) {\n\t\tif (millis () - restartRequestTime > 100) {\n\t\t\tESP.restart ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "examples/EnigmaIOTGatewayMQTT/GwOutput_mqtt.cpp",
    "content": "/**\n  * @file GwOutput_mqtt.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief MQTT Gateway output module\n  *\n  * Module to send and receive EnigmaIOT information from MQTT broker\n  */\n\n#include <Arduino.h>\n#include \"GwOutput_mqtt.h\"\n#include <ArduinoJson.h>\n#include <ESPAsyncWebServer.h>\n#include <helperFunctions.h>\n#include <EnigmaIOTdebug.h>\n#include <PubSubClient.h>\n\n#ifdef ESP32\n#include <WiFi.h>\n#include <AsyncTCP.h>\n#include \"esp_system.h\"\n#include \"esp_event.h\"\n#include \"mqtt_client.h\"\n#include \"esp_tls.h\"\n#elif defined(ESP8266)\n#include <ESP8266WiFi.h>\n#include <ESPAsyncTCP.h>\n#include <Hash.h>\n#include <SPI.h>\n#ifdef SECURE_MQTT\n#include <WiFiClientSecure.h>\n#else\n#include <WiFiClient.h>\n#endif // SECURE_MQTT\n#endif // ESP32\n\n#include <FS.h>\n\n\nGwOutput_MQTT GwOutput;\n\nvoid GwOutput_MQTT::configManagerStart (EnigmaIOTGatewayClass* enigmaIotGw) {\n\tenigmaIotGateway = enigmaIotGw;\n\tmqttServerParam = new AsyncWiFiManagerParameter (\"mqttserver\", \"MQTT Server\", mqttgw_config.mqtt_server, 41, \"required type=\\\"text\\\" maxlength=40\");\n\tchar port[10];\n\titoa (mqttgw_config.mqtt_port, port, 10);\n\tmqttPortParam = new AsyncWiFiManagerParameter (\"mqttport\", \"MQTT Port\", port, 6, \"required type=\\\"number\\\" min=\\\"0\\\" max=\\\"65535\\\" step=\\\"1\\\"\");\n\tmqttUserParam = new AsyncWiFiManagerParameter (\"mqttuser\", \"MQTT User\", mqttgw_config.mqtt_user, 21, \"required type=\\\"text\\\" maxlength=20\");\n\tmqttPassParam = new AsyncWiFiManagerParameter (\"mqttpass\", \"MQTT Password\", \"\", 41, \"type=\\\"password\\\" maxlength=40\");\n\n\tenigmaIotGateway->addWiFiManagerParameter (mqttServerParam);\n\tenigmaIotGateway->addWiFiManagerParameter (mqttPortParam);\n\tenigmaIotGateway->addWiFiManagerParameter (mqttUserParam);\n\tenigmaIotGateway->addWiFiManagerParameter (mqttPassParam);\n\n}\n\nbool GwOutput_MQTT::saveConfig () {\n    if (!FILESYSTEM.begin ()) {\n\t\tDEBUG_WARN (\"Error opening filesystem\");\n\t}\n\tDEBUG_DBG (\"Filesystem opened\");\n\n    File configFile = FILESYSTEM.open (CONFIG_FILE, \"w\");\n\tif (!configFile) {\n\t\tDEBUG_WARN (\"Failed to open config file %s for writing\", CONFIG_FILE);\n\t\treturn false;\n\t} else {\n\t\tDEBUG_DBG (\"%s opened for writting\", CONFIG_FILE);\n\t}\n\n\tconst size_t capacity = JSON_OBJECT_SIZE (4) + 110;\n\tDynamicJsonDocument doc (capacity);\n\n\tdoc[\"mqtt_server\"] = mqttgw_config.mqtt_server;\n\tdoc[\"mqtt_port\"] = mqttgw_config.mqtt_port;\n\tdoc[\"mqtt_user\"] = mqttgw_config.mqtt_user;\n\tdoc[\"mqtt_pass\"] = mqttgw_config.mqtt_pass;\n\n\tif (serializeJson (doc, configFile) == 0) {\n\t\tDEBUG_ERROR (\"Failed to write to file\");\n\t\tconfigFile.close ();\n        //FILESYSTEM.remove (CONFIG_FILE); // Testing only\n\t\treturn false;\n\t}\n\n\tString output;\n\tserializeJsonPretty (doc, output);\n\n\tDEBUG_DBG (\"%s\", output.c_str ());\n\n\tconfigFile.flush ();\n\t//size_t size = configFile.size ();\n\n\tconfigFile.close ();\n\tDEBUG_DBG (\"Gateway configuration saved to flash. %u bytes\", configFile.size ());\n\treturn true;\n}\n\nbool GwOutput_MQTT::loadConfig () {\n    //FILESYSTEM.remove (CONFIG_FILE); // Only for testing\n\tbool json_correct = false;\n\n    if (!FILESYSTEM.begin ()) {\n\t\tDEBUG_WARN (\"Error starting filesystem. Formatting\");\n        FILESYSTEM.format ();\n\t\tWiFi.disconnect ();\n\t}\n\n    if (FILESYSTEM.exists (CONFIG_FILE)) {\n\n\t\tDEBUG_DBG (\"Opening %s file\", CONFIG_FILE);\n        File configFile = FILESYSTEM.open (CONFIG_FILE, \"r\");\n\t\tif (configFile) {\n\t\t\t//size_t size = configFile.size ();\n            DEBUG_DBG (\"%s opened. %u bytes\", CONFIG_FILE, configFile.size ());\n\n\t\t\tconst size_t capacity = JSON_OBJECT_SIZE (4) + 110;\n\t\t\tDynamicJsonDocument doc (capacity);\n\n\t\t\tDeserializationError error = deserializeJson (doc, configFile);\n\n\t\t\tif (error) {\n\t\t\t\tDEBUG_ERROR (\"Failed to parse file\");\n\t\t\t} else {\n\t\t\t\tDEBUG_DBG (\"JSON file parsed\");\n\t\t\t}\n\n\t\t\tif (doc.containsKey (\"mqtt_server\") && doc.containsKey (\"mqtt_port\")\n\t\t\t\t&& doc.containsKey (\"mqtt_user\") && doc.containsKey (\"mqtt_pass\")) {\n\t\t\t\tjson_correct = true;\n\t\t\t}\n\n\t\t\tstrncpy (mqttgw_config.mqtt_server, doc[\"mqtt_server\"] | \"\", sizeof (mqttgw_config.mqtt_server));\n\t\t\tmqttgw_config.mqtt_port = doc[\"mqtt_port\"].as<int> ();\n\t\t\tstrncpy (mqttgw_config.mqtt_user, doc[\"mqtt_user\"] | \"\", sizeof (mqttgw_config.mqtt_user));\n\t\t\tstrncpy (mqttgw_config.mqtt_pass, doc[\"mqtt_pass\"] | \"\", sizeof (mqttgw_config.mqtt_pass));\n\n\t\t\tconfigFile.close ();\n\t\t\tif (json_correct) {\n\t\t\t\tDEBUG_INFO (\"MQTT output module configuration successfuly read\");\n\t\t\t}\n\t\t\tDEBUG_DBG (\"==== MQTT Configuration ====\");\n\t\t\tDEBUG_DBG (\"MQTT server: %s\", mqttgw_config.mqtt_server);\n\t\t\tDEBUG_DBG (\"MQTT port: %d\", mqttgw_config.mqtt_port);\n\t\t\tDEBUG_DBG (\"MQTT user: %s\", mqttgw_config.mqtt_user);\n\t\t\tDEBUG_VERBOSE (\"MQTT password: %s\", mqttgw_config.mqtt_pass);\n\n\t\t\tString output;\n\t\t\tserializeJsonPretty (doc, output);\n\n\t\t\tDEBUG_DBG (\"JSON file %s\", output.c_str ());\n\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Error opening %s\", CONFIG_FILE);\n\t\t}\n\t} else {\n\t\tDEBUG_WARN (\"%s do not exist\", CONFIG_FILE);\n\t}\n\n\treturn json_correct;\n}\n\n\nvoid GwOutput_MQTT::configManagerExit (bool status) {\n\tDEBUG_INFO (\"==== Config Portal MQTTGW result ====\");\n\tDEBUG_INFO (\"MQTT server: %s\", mqttServerParam->getValue ());\n\tDEBUG_INFO (\"MQTT port: %s\", mqttPortParam->getValue ());\n\tDEBUG_INFO (\"MQTT user: %s\", mqttUserParam->getValue ());\n\tDEBUG_INFO (\"MQTT password: %s\", mqttPassParam->getValue ());\n\tDEBUG_INFO (\"Status: %s\", status ? \"true\" : \"false\");\n\n\tif (status && EnigmaIOTGateway.getShouldSave ()) {\n\t\tmemcpy (mqttgw_config.mqtt_server, mqttServerParam->getValue (), mqttServerParam->getValueLength ());\n\t\tmqttgw_config.mqtt_server[mqttServerParam->getValueLength ()] = '\\0';\n\t\tDEBUG_DBG (\"MQTT Server: %s\", mqttgw_config.mqtt_server);\n\t\tmqttgw_config.mqtt_port = atoi (mqttPortParam->getValue ());\n\t\tmemcpy (mqttgw_config.mqtt_user, mqttUserParam->getValue (), mqttUserParam->getValueLength ());\n\t\tconst char* mqtt_pass = mqttPassParam->getValue ();\n\t\tif (mqtt_pass && (mqtt_pass[0] != '\\0')) {// If password is empty, keep the old one\n\t\t\tmemcpy (mqttgw_config.mqtt_pass, mqtt_pass, mqttPassParam->getValueLength ());\n\t\t\tmqttgw_config.mqtt_pass[mqttPassParam->getValueLength ()] = '\\0';\n\t\t} else {\n\t\t\tDEBUG_INFO (\"MQTT password field empty. Keeping the old one\");\n\t\t}\n\t\tDEBUG_DBG (\"MQTT pass: %s\", mqttgw_config.mqtt_pass);\n\t\tif (!saveConfig ()) {\n\t\t\tDEBUG_ERROR (\"Error writting MQTT config to filesystem.\");\n\t\t} else {\n\t\t\tDEBUG_INFO (\"Configuration stored\");\n\t\t}\n\t} else {\n\t\tDEBUG_DBG (\"Configuration does not need to be saved\");\n\t}\n\n\tdelete (mqttServerParam);\n\tdelete (mqttPortParam);\n\tdelete (mqttUserParam);\n\tdelete (mqttPassParam);\n}\n\nbool GwOutput_MQTT::begin () {\n    //this->mqtt_queue = new EnigmaIOTRingBuffer<mqtt_queue_item_t> (MAX_MQTT_QUEUE_SIZE);\n#ifdef SECURE_MQTT\n\trandomSeed (micros ());\n#ifdef ESP32\n\tespClient.setCACert (DSTroot_CA);\n#elif defined(ESP8266)\n\tespClient.setTrustAnchors (&certificate);\n#endif // ESP32\n\tDEBUG_INFO (\"CA store set\");\n#endif // SECURE_MQTT\n\tmqtt_client.setServer (mqttgw_config.mqtt_server, mqttgw_config.mqtt_port);\n\tDEBUG_INFO (\"Set MQTT server %s - port %d\", mqttgw_config.mqtt_server, mqttgw_config.mqtt_port);\n\tmqtt_client.setBufferSize (MQTT_BUFFER_SIZE);\n\tnetName = String (EnigmaIOTGateway.getNetworkName ());\n\n#ifdef ESP32\n\tuint64_t chipid = ESP.getEfuseMac ();\n\tclientId = netName + String ((uint32_t)chipid, HEX);\n#elif defined(ESP8266)\n\tclientId = netName + String (ESP.getChipId (), HEX);\n#endif // ESP32\n    \n    configTime (0, 0, NTP_SERVER_1, NTP_SERVER_2);\n    setenv (\"TZ\", TZINFO, 1);\n    tzset ();\n\n\tgwTopic = netName + GW_STATUS;\n\treconnect ();\n\treturn true;\n}\n\nvoid GwOutput_MQTT::reconnect () {\n\t// Loop until we're reconnected\n\twhile (!mqtt_client.connected ()) {\n\t\t// TODO: startConnectionFlash (500);\n\t\tDEBUG_INFO (\"Attempting MQTT connection...\");\n\t\tfor (int i = 1; i < 5; i++) {\n\t\t\tDEBUG_WARN (\"Connecting to WiFi %s\", WiFi.SSID ().c_str ());\n\t\t\tdelay (1000);\n\t\t\tif (WiFi.isConnected ()) {\n\t\t\t\tDEBUG_WARN (\"WiFi is connected\");\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tWiFi.begin ();\n\t\t\t}\n\t\t}\n\t\t// Create a random client ID\n\t\t// Attempt to connect\n//#ifdef SECURE_MQTT\n\t\tsetClock ();\n//#endif\n\t\tDEBUG_DBG (\"Clock set.\");\n\t\tDEBUG_DBG (\"Connect to MQTT server: user %s, pass %s, topic %s\",\n\t\t\t\t   mqttgw_config.mqtt_user, mqttgw_config.mqtt_pass, gwTopic.c_str ());\n\t\t//client.setServer (mqttgw_config.mqtt_server, mqttgw_config.mqtt_port);\n\t\tif (mqtt_client.connect (clientId.c_str (), mqttgw_config.mqtt_user, mqttgw_config.mqtt_pass, gwTopic.c_str (), 0, true, \"0\", true)) {\n\t\t\tDEBUG_WARN (\"MQTT connected\");\n\t\t\t// Once connected, publish an announcement...\n\t\t\tpublishMQTT (gwTopic.c_str (), \"1\", 1, true);\n\t\t\t// ... and resubscribe\n\t\t\tString dlTopic = netName + String (\"/+/set/#\");\n\t\t\tmqtt_client.subscribe (dlTopic.c_str ());\n\t\t\tdlTopic = netName + String (\"/+/get/#\");\n\t\t\tmqtt_client.subscribe (dlTopic.c_str ());\n\t\t\tmqtt_client.setCallback (onDlData);\n\t\t\t// TODO: stopConnectionFlash ();\n\t\t} else {\n\t\t\tmqtt_client.disconnect ();\n\t\t\tDEBUG_ERROR (\"failed, rc=%d try again in 5 seconds\", mqtt_client.state ());\n#ifdef SECURE_MQTT\n\t\t\tchar error[100];\n#ifdef ESP8266\n\t\t\tint errorCode = espClient.getLastSSLError (error, 100);\n#elif defined ESP32\n\t\t\tint errorCode = espClient.lastError (error, 100);\n#endif\n\t\t\tDEBUG_ERROR (\"Connect error %d: %s\", errorCode, error);\n#endif\n\t\t\t// Wait 5 seconds before retrying\n#ifdef ESP32\n\t\t\tconst TickType_t xDelay = 5000 / portTICK_PERIOD_MS;\n\t\t\tvTaskDelay (xDelay);\n#else\n\t\t\tdelay (5000);\n#endif\n\t\t}\n\t}\n}\n\nchar* getTopicAddress (char* topic, unsigned int& len) {\n\tif (!topic)\n        return nullptr;\n\n\tchar* start = strchr (topic, '/') + 1;\n\tchar* end;\n\n\tif (start) {\n\t\tend = strchr (start, '/');\n\t} else {\n        return nullptr;\n\t}\n\t//DEBUG_INFO (\"Start %p : %d\", start, start - topic);\n\t//DEBUG_INFO (\"End %p : %d\", end, end - topic);\n\tif (end) {\n\t\tlen = end - start;\n\t} else {\n\t\tlen = strlen (topic) - (start - topic);\n\t}\n\n\treturn start;\n}\n\ncontrol_message_type_t checkMsgType (String data) {\n\tDEBUG_DBG (\"Type topic: %s\", data.c_str ());\n\tif (data == GET_VERSION) {\n\t\treturn control_message_type::VERSION;\n\t} else if (data == GET_SLEEP) {\n\t\treturn control_message_type::SLEEP_GET;\n\t} else if (data == SET_SLEEP) {\n\t\treturn control_message_type::SLEEP_SET;\n\t} else if (data == SET_OTA) {\n\t\treturn control_message_type::OTA;\n\t} else if (data == SET_IDENTIFY) {\n\t\tDEBUG_WARN (\"IDENTIFY MESSAGE %s\", data.c_str ());\n\t\treturn control_message_type::IDENTIFY;\n\t} else if (data == SET_RESET_CONFIG) {\n\t\tDEBUG_WARN (\"RESET CONFIG MESSAGE %s\", data.c_str ());\n\t\treturn control_message_type::RESET;\n\t} else if (data == GET_RSSI) {\n\t\tDEBUG_INFO (\"GET RSSI MESSAGE %s\", data.c_str ());\n\t\treturn control_message_type::RSSI_GET;\n\t} else if (data == SET_USER_DATA) {\n\t\tDEBUG_INFO (\"USER DATA %s\", data.c_str ());\n\t\treturn control_message_type::USERDATA_SET;\n\t} else if (data == GET_USER_DATA) {\n\t\tDEBUG_INFO (\"USER DATA %s\", data.c_str ());\n\t\treturn control_message_type::USERDATA_GET;\n\t} else if (data == GET_NAME) {\n\t\tDEBUG_INFO (\"GET NODE NAME AND ADDRESS\");\n\t\treturn control_message_type::NAME_GET;\n\t} else if (data == SET_NAME) {\n\t\tDEBUG_INFO (\"SET NODE NAME %s\", data.c_str ());\n\t\treturn control_message_type::NAME_SET;\n\t} else if (data == SET_RESTART_MCU) {\n\t\tDEBUG_INFO (\"RESET MCU\");\n\t\treturn control_message_type::RESTART_NODE;\n\t} else\n\t\treturn control_message_type::INVALID;\n}\n\ncontrol_message_type_t getTopicType (char* topic, char*& userCommand) {\n\tif (!topic)\n\t\treturn control_message_type::INVALID;\n\n\tString command;\n\n\t//Discard address\n\tchar* start = strchr (topic, '/') + 1;\n\tif (start)\n\t\tstart = strchr (start, '/') + 1;\n\telse\n\t\treturn control_message_type::INVALID;\n\t//DEBUG_INFO (\"Second Start %p\", start);\n\tif ((int)start > 0x01) { // TODO: Why this condition ????\n\t\tcommand = String (start);\n\t\tuserCommand = start;\n\t} else {\n\t\treturn control_message_type::INVALID;\n\t}\n\t//DEBUG_INFO (\"Start %p : %d\", start, start - topic);\n\t//DEBUG_INFO (\"Command %s\", command.c_str());\n\n\tcontrol_message_type_t msgType = checkMsgType (command);\n\n\treturn msgType;\n}\n\n\nvoid GwOutput_MQTT::onDlData (char* topic, uint8_t* data, unsigned int len) {\n\tuint8_t addr[ENIGMAIOT_ADDR_LEN];\n\tchar* addressStr;\n\tcontrol_message_type_t msgType;\n\tchar* userCommand;\n    char* nodeName = nullptr;\n\n\n\tDEBUG_DBG (\"Topic %s\", topic);\n\n\tunsigned int addressLen;\n\n\taddressStr = getTopicAddress (topic, addressLen);\n\n\tif (addressStr) {\n\t\t//DEBUG_INFO (\"Len: %u\", addressLen);\n\t\tDEBUG_DBG (\"Address %.*s\", addressLen, addressStr);\n\t\tif (!str2mac (addressStr, addr)) {\n\t\t\tDEBUG_INFO (\"Not a mac address. Treating it as a node name\");\n\t\t\tif (addressLen) {\n\t\t\t\tnodeName = (char*)calloc (addressLen + 1, sizeof (char));\n\t\t\t\tmemcpy (nodeName, addressStr, addressLen);\n\t\t\t} else {\n\t\t\t\tDEBUG_WARN (\"Invalid address\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tDEBUG_DBG (\"Hex Address = %s\", printHexBuffer (addr, 6));\n\t\t}\n\t} else\n\t\treturn;\n\n\tmsgType = getTopicType (topic, userCommand);\n\n\n\tDEBUG_DBG (\"User command: %s\", userCommand);\n\tDEBUG_DBG (\"MsgType 0x%02X\", msgType);\n\tDEBUG_DBG (\"Data: %.*s\\n\", len, data);\n\n\tif (msgType != control_message_type_t::INVALID) {\n\t\tGwOutput.downlinkCb (addr, nodeName, msgType, (char*)data, len);\n\t} else {\n\t\tDEBUG_WARN (\"Invalid message\");\n\t}\n\n\tif (nodeName) {\n\t\tfree (nodeName);\n\t\tnodeName = NULL;\n\t}\n}\n\nvoid GwOutput_MQTT::loop () {\n\n\tmqtt_client.loop ();\n\tif (!mqtt_client.connected ()) {\n\t\treconnect ();\n\t} else {\n        mqtt_queue_item_t* message;\n        static time_t statusLastUpdated;\n\n\t\tif (!mqtt_queue.empty ()) {\n\t\t\tmessage = getMQTTqueue ();\n\t\t\tif (publishMQTT (message->topic, message->payload, message->payload_len, message->retain)) {\n\t\t\t\tDEBUG_DBG (\"MQTT published. %s %.*s\", message->topic, message->payload_len, message->payload);\n\t\t\t\tpopMQTTqueue ();\n\t\t\t}\n\t\t}\n\t\tif (millis () - statusLastUpdated > STATUS_SEND_PERIOD) {\n\t\t\tstatusLastUpdated = millis ();\n\t\t\tpublishMQTT (gwTopic.c_str (), \"1\", 1, true);\n\t\t}\n\t}\n}\n\nbool GwOutput_MQTT::publishMQTT (const char* topic, const char* payload, size_t len, bool retain) {\n\tDEBUG_INFO (\"Publish MQTT. %s : %.*s\", topic, len, payload);\n\tif (mqtt_client.connected ()) {\n\t\treturn mqtt_client.publish (topic, (uint8_t*)payload, len, retain);\n\t} else {\n\t\tDEBUG_WARN (\"MQTT client not connected\");\n\t\treturn false;\n\t}\n}\n\n//#ifdef SECURE_MQTT\nvoid GwOutput_MQTT::setClock () {\n#if DEBUG_LEVEL >= INFO\n\tDEBUG_INFO (\"\\nWaiting for NTP time sync: \");\n\ttime_t now = time (nullptr);\n\twhile (now < 8 * 3600 * 2) {\n\t\tdelay (500);\n\t\tSerial.print (\".\");\n\t\tnow = time (nullptr);\n\t}\n\t//Serial.println (\"\");\n\tstruct tm timeinfo;\n\tgmtime_r (&now, &timeinfo);\n\tDEBUG_INFO (\"Current time: %s\", asctime (&timeinfo));\n#endif\n}\n//#endif\n\nbool GwOutput_MQTT::addMQTTqueue (const char* topic, char* payload, size_t len, bool retain) {\n    mqtt_queue_item_t message;\n\n\tif (mqtt_queue.size () >= MAX_MQTT_QUEUE_SIZE) {\n\t\tmqtt_queue.pop ();\n\t}\n\n\t//message.topic = (char*)malloc (strlen (topic) + 1);\n\tstrncpy (message.topic, topic, MAX_MQTT_TOPIC_LEN);\n    message.payload_len = len < MAX_MQTT_PLD_LEN ? len : MAX_MQTT_PLD_LEN;\n\t//message->payload = (char*)malloc (len);\n    memcpy (message.payload, payload, message.payload_len);\n\tmessage.retain = retain;\n\n\tmqtt_queue.push (&message);\n\tDEBUG_DBG (\"%d MQTT messages queued Len:%d %s %.*s\", mqtt_queue.size (),\n\t\t\t   len,\n\t\t\t   message.topic,\n\t\t\t   message.payload_len, message.payload);\n\n\treturn true;\n}\n\nmqtt_queue_item_t* GwOutput_MQTT::getMQTTqueue () {\n\tif (mqtt_queue.size ()) {\n\t\tDEBUG_DBG (\"MQTT message got from queue\");\n\t\treturn mqtt_queue.front ();\n\t}\n    return nullptr;\n}\n\nvoid GwOutput_MQTT::popMQTTqueue () {\n\tif (mqtt_queue.size ()) {\n        mqtt_queue_item_t* message;\n\n\t\tmessage = mqtt_queue.front ();\n\t\tif (message) {\n\t\t\tif (message->topic) {\n\t\t\t\t//delete(message->topic);\n                message->topic[0] = 0;\n\t\t\t}\n\t\t\tif (message->payload) {\n\t\t\t\t//delete(message->payload);\n                message->payload[0] = 0;\n\t\t\t}\n            message->payload_len = 0;\n\t\t\t//delete message;\n\t\t}\n\t\tmqtt_queue.pop ();\n\t\tDEBUG_DBG (\"MQTT message pop. Size %d\", mqtt_queue.size ());\n\t}\n}\n\n#if SUPPORT_HA_DISCOVERY\nbool GwOutput_MQTT::rawMsgSend (const char* topic, char* payload, size_t len, bool retain) {\n    bool result;\n    \n    if ((result = addMQTTqueue (topic, payload, len, retain))) {\n        DEBUG_INFO (\"MQTT queued %s. Length %d\", topic, len);\n    } else {\n        DEBUG_WARN (\"Error queuing MQTT %s\", topic);\n    }\n    return result;\n}\n#endif\n\n\nbool GwOutput_MQTT::outputDataSend (char* address, char* data, size_t length, GwOutput_data_type_t type) {\n\tconst int TOPIC_SIZE = 64;\n\tchar topic[TOPIC_SIZE];\n\tbool result;\n\tswitch (type) {\n\tcase GwOutput_data_type::data:\n\t\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/%s\", netName.c_str (), address, NODE_DATA);\n\t\tbreak;\n\tcase GwOutput_data_type::lostmessages:\n\t\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/%s\", netName.c_str (), address, LOST_MESSAGES);\n\t\tbreak;\n\tcase GwOutput_data_type::status:\n\t\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/%s\", netName.c_str (), address, NODE_STATUS);\n\t\tbreak;\n\t}\n\tif ((result = addMQTTqueue (topic, data, length))) {\n\t\tDEBUG_INFO (\"MQTT queued %s. Length %d\", topic, length);\n\t} else {\n\t\tDEBUG_WARN (\"Error queuing MQTT %s\", topic);\n\t}\n\treturn result;\n}\n\nbool GwOutput_MQTT::outputControlSend (char* address, uint8_t* data, size_t length) {\n\tconst int TOPIC_SIZE = 64;\n\tconst int PAYLOAD_SIZE = 512;\n\tchar topic[TOPIC_SIZE];\n\tchar payload[PAYLOAD_SIZE];\n\tsize_t pld_size = 0;\n\tbool result = false;\n\n\tswitch (data[0]) {\n\tcase control_message_type::VERSION_ANS:\n\t\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/%s\", netName.c_str (), address, GET_VERSION_ANS);\n\t\tif (length >= 4) {\n\t\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"version\\\":\\\"%d.%d.%d\\\"}\", data[1], data[2], data[3]);\n\t\t}\n\t\tif (addMQTTqueue (topic, payload, pld_size)) {\n\t\t\tDEBUG_INFO (\"Published MQTT %s %s\", topic, payload);\n\t\t\tresult = true;\n\t\t}\n\t\tbreak;\n\tcase control_message_type::SLEEP_ANS:\n\t\tuint32_t sleepTime;\n\t\tmemcpy (&sleepTime, data + 1, sizeof (sleepTime));\n\t\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/%s\", netName.c_str (), address, GET_SLEEP_ANS);\n\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"sleeptime\\\":%u}\", sleepTime);\n\t\tif (addMQTTqueue (topic, payload, pld_size)) {\n\t\t\tDEBUG_INFO (\"Published MQTT %s %s\", topic, payload);\n\t\t\tresult = true;\n\t\t}\n\t\tbreak;\n\tcase control_message_type::RESET_ANS:\n\t\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/%s\", netName.c_str (), address, SET_RESET_ANS);\n\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"result\\\":\\\"OK\\\"}\");\n\t\tif (addMQTTqueue (topic, payload, pld_size)) {\n\t\t\tDEBUG_INFO (\"Published MQTT %s %s\", topic, payload);\n\t\t\tresult = true;\n\t\t}\n\t\tbreak;\n    case control_message_type::RSSI_ANS:\n        snprintf (topic, TOPIC_SIZE, \"%s/%s/%s\", netName.c_str (), address, GET_RSSI_ANS);\n\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"rssi\\\":%d,\\\"channel\\\":%u}\", (int8_t)data[1], data[2]);\n\t\tEnigmaIOTGateway.getNodes ()->getNodeFromName (address)->setRSSI (data[1]);\n\t\tif (addMQTTqueue (topic, payload, pld_size)) {\n\t\t\tDEBUG_INFO (\"Published MQTT %s %s\", topic, payload);\n\t\t\tresult = true;\n\t\t}\n\t\tbreak;\n\tcase control_message_type::NAME_ANS:\n\t\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/%s\", netName.c_str (), address, GET_NAME_ANS);\n\t\tchar addrStr[ENIGMAIOT_ADDR_LEN * 3];\n\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"name\\\":\\\"%.*s\\\",\\\"address\\\":\\\"%s\\\"}\", length - ENIGMAIOT_ADDR_LEN - 1, (char*)(data + 1 + ENIGMAIOT_ADDR_LEN), mac2str (data + 1, addrStr));\n\t\tif (addMQTTqueue (topic, payload, pld_size)) {\n\t\t\tDEBUG_INFO (\"Published MQTT %s %s\", topic, payload);\n\t\t\tresult = true;\n\t\t}\n\t\tbreak;\n\tcase control_message_type::RESTART_CONFIRM:\n\t\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/%s\", netName.c_str (), address, RESTART_NOTIF);\n\t\tif (length > 1) {\n\t\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"reason\\\":%d}\", (int8_t)data[1]);\n\t\t}\n\t\tif (addMQTTqueue (topic, payload, pld_size)) {\n\t\t\tDEBUG_INFO (\"Published MQTT %s %s\", topic, payload);\n\t\t\tresult = true;\n\t\t}\n\t\tbreak;\n\tcase control_message_type::OTA_ANS:\n\t\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/%s\", netName.c_str (), address, SET_OTA_ANS);\n\t\tswitch (data[1]) {\n\t\tcase ota_status::OTA_STARTED:\n\t\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"result\\\":\\\"OTA Started\\\",\\\"status\\\":%u}\", data[1]);\n\t\t\tbreak;\n\t\tcase ota_status::OTA_START_ERROR:\n\t\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"result\\\":\\\"OTA Start error\\\",\\\"status\\\":%u}\", data[1]);\n\t\t\tbreak;\n\t\tcase ota_status::OTA_OUT_OF_SEQUENCE:\n\t\t\tuint16_t lastGoodIdx;\n\t\t\tmemcpy ((uint8_t*)&lastGoodIdx, data + 2, sizeof (uint16_t));\n\t\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"last_chunk\\\":%d,\\\"result\\\":\\\"OTA out of sequence error\\\",\\\"status\\\":%u}\", lastGoodIdx, data[1]);\n\t\t\tbreak;\n\t\tcase ota_status::OTA_CHECK_OK:\n\t\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"result\\\":\\\"OTA check OK\\\",\\\"status\\\":%u}\", data[1]);\n\t\t\tbreak;\n\t\tcase ota_status::OTA_CHECK_FAIL:\n\t\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"result\\\":\\\"OTA check failed\\\",\\\"status\\\":%u}\", data[1]);\n\t\t\tbreak;\n\t\tcase ota_status::OTA_TIMEOUT:\n\t\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"result\\\":\\\"OTA timeout\\\",\\\"status\\\":%u}\", data[1]);\n\t\t\tbreak;\n\t\tcase ota_status::OTA_FINISHED:\n\t\t\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"result\\\":\\\"OTA finished OK\\\",\\\"status\\\":%u}\", data[1]);\n\t\t\tbreak;\n\t\t}\n\t\tif (addMQTTqueue (topic, payload, pld_size)) {\n\t\t\tDEBUG_INFO (\"Published MQTT %s %s\", topic, payload);\n\t\t\tresult = true;\n\t\t}\n\t\tbreak;\n\tdefault:\n\t\tDEBUG_WARN (\"Unknown control message. Code: 0x%02X\", data[0]);\n\t}\n\n\treturn result;\n}\n\nbool GwOutput_MQTT::newNodeSend (char* address, uint16_t node_id) {\n\tconst int TOPIC_SIZE = 64;\n\n\tchar topic[TOPIC_SIZE];\n\n\tuint8_t* nodeAddress = enigmaIotGateway->getNodes ()->getNodeFromID (node_id)->getMacAddress ();\n\tchar addrStr[ENIGMAIOT_ADDR_LEN * 3];\n\n\tchar payload[ENIGMAIOT_ADDR_LEN * 3 + 14];\n\n\tsnprintf (payload, ENIGMAIOT_ADDR_LEN * 3 + 14, \"{\\\"address\\\":\\\"%s\\\"}\", mac2str (nodeAddress, addrStr));\n\n\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/hello\", netName.c_str (), address);\n\tbool result = addMQTTqueue (topic, payload, ENIGMAIOT_ADDR_LEN * 3 + 13);\n\tDEBUG_INFO (\"Published MQTT %s\", topic);\n\treturn result;\n}\n\nbool GwOutput_MQTT::nodeDisconnectedSend (char* address, gwInvalidateReason_t reason) {\n\tconst int TOPIC_SIZE = 64;\n\tconst int PAYLOAD_SIZE = 64;\n\n\tchar topic[TOPIC_SIZE];\n\tchar payload[PAYLOAD_SIZE];\n\tsize_t pld_size;\n\n\tsnprintf (topic, TOPIC_SIZE, \"%s/%s/bye\", netName.c_str (), address);\n\tpld_size = snprintf (payload, PAYLOAD_SIZE, \"{\\\"reason\\\":%d}\", reason);\n\tbool result = addMQTTqueue (topic, payload, pld_size);\n\tDEBUG_INFO (\"Published MQTT %s result = %s\", topic, result ? \"OK\" : \"Fail\");\n\treturn result;\n}"
  },
  {
    "path": "examples/EnigmaIOTGatewayMQTT/GwOutput_mqtt.h",
    "content": "/**\n  * @file GwOutput_mqtt.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief MQTT Gateway output module\n  *\n  * Module to send and receive EnigmaIOT information from MQTT broker\n  */\n\n#ifndef _GWOUTPUT_MQTT_h\n#define _GWOUTPUT_MQTT_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n#include <GwOutput_generic.h>\n#include <ESPAsyncWiFiManager.h>\n#include <EnigmaIOTGateway.h>\n#include <PubSubClient.h>\n#include <queue>\n#include \"dstrootca.h\"\n#ifdef SECURE_MQTT\n#include <WiFiClientSecure.h>\n#else\n#include <WiFiClient.h>\n#endif // SECURE_MQTT\n\n#define MQTT_BUFFER_SIZE 2048\n\n// DOWNLINK MESSAGES\n#define GET_VERSION      \"get/version\"\n#define GET_VERSION_ANS  \"result/version\"\n#define GET_SLEEP        \"get/sleeptime\"\n#define GET_SLEEP_ANS    \"result/sleeptime\"\n#define SET_SLEEP        \"set/sleeptime\"\n#define SET_OTA          \"set/ota\"\n#define SET_OTA_ANS      \"result/ota\"\n#define SET_IDENTIFY     \"set/identify\"\n#define SET_RESET_CONFIG \"set/reset\"\n#define SET_RESET_ANS    \"result/reset\"\n#define GET_RSSI         \"get/rssi\"\n#define GET_RSSI_ANS     \"result/rssi\"\n#define GET_NAME         \"get/name\"\n#define SET_NAME         \"set/name\"\n#define GET_NAME_ANS     \"result/name\"\n#define SET_USER_DATA    \"set/data\"\n#define GET_USER_DATA    \"get/data\"\n#define RESTART_NOTIF    \"restart\"\n#define NODE_DATA        \"data\"\n#define LOST_MESSAGES    \"debug/lostmessages\"\n#define NODE_STATUS      \"status\"\n#define GW_STATUS        \"/gateway/status\"\n#define SET_RESTART_MCU\t \"set/restart\"\n\nconst time_t STATUS_SEND_PERIOD = 300000;\n\nconstexpr auto CONFIG_FILE = \"/mqtt.json\"; ///< @brief MQTT outout configuration file name\n\ntypedef struct {\n\tchar mqtt_server[41]; /**< MQTT broker address*/\n#ifdef SECURE_MQTT\n\tint mqtt_port = 8883; /**< MQTT broker TCP port*/\n#else\n\tint mqtt_port = 1883; /**< MQTT broker TCP port*/\n#endif //SECURE_MQTT\n\tchar mqtt_user[21]; /**< MQTT broker user name*/\n\tchar mqtt_pass[41]; /**< MQTT broker user password*/\n} mqttgw_config_t;\n\nconstexpr auto MAX_MQTT_TOPIC_LEN = 100;\nconstexpr auto MAX_MQTT_PLD_LEN = 2048;\n\ntypedef struct {\n\tchar topic[MAX_MQTT_TOPIC_LEN]; /**< Message topic*/\n\tchar payload[MAX_MQTT_PLD_LEN]; /**< Message payload*/\n\tsize_t payload_len; /**< Payload length*/\n\tbool retain; /**< MQTT retain flag*/\n} mqtt_queue_item_t;\n\n\nclass GwOutput_MQTT : public GatewayOutput_generic {\nprotected:\n\tAsyncWiFiManagerParameter* mqttServerParam = NULL; ///< @brief Configuration field for MQTT server address\n    AsyncWiFiManagerParameter* mqttPortParam = NULL; ///< @brief Configuration field for MQTT server port\n    AsyncWiFiManagerParameter* mqttUserParam = NULL; ///< @brief Configuration field for MQTT server user name\n    AsyncWiFiManagerParameter* mqttPassParam = NULL; ///< @brief Configuration field for MQTT server password\n\n\t//std::queue<mqtt_queue_item_t*> mqtt_queue; ///< @brief Output MQTT messages queue. It acts as a FIFO queue\n    EnigmaIOTRingBuffer<mqtt_queue_item_t> mqtt_queue;\n\n\tmqttgw_config_t mqttgw_config; ///< @brief MQTT server configuration data\n\tbool shouldSaveConfig = false; ///< @brief Flag to indicate if configuration should be saved\n\n#ifdef SECURE_MQTT\n\tWiFiClientSecure espClient; ///< @brief TLS client\n#ifdef ESP8266\n\tBearSSL::X509List certificate; ///< @brief CA certificate for TLS\n#endif // ESP8266\n#else\n\tWiFiClient espClient; ///< @brief TCP client\n#endif // SECURE_MQTT\n\tPubSubClient mqtt_client; ///< @brief MQTT client\n    \n   /**\n\t * @brief Saves output module configuration\n\t * @return Returns `true` if save was successful. `false` otherwise\n\t */\n\tbool saveConfig ();\n//#ifdef SECURE_MQTT\n\t/**\n\t  * @brief Synchronizes time over NTP to check certifitate expiration time\n\t  */\n\tvoid setClock ();\n//#endif // SECURE_MQTT\n\t/**\n\t  * @brief This is called anytime MQTT client is disconnected.\n\t  *\n\t  * It tries to connect to MQTT broker. After reconnection is done it resubscribes\n\t  * to network topics.\n\t  * It waits for connection and times out after 5 seconds\n\t  */\n\tvoid reconnect ();\n\n   /**\n\t * @brief Add MQTT message to queue\n\t * @param topic MQTT message topic\n\t * @param payload MQTT message payload\n\t * @param len MQTT payload length\n\t * @param retain Message retain flag\n\t */\n\tbool addMQTTqueue (const char* topic, char* payload, size_t len, bool retain = false);\n\n   /**\n\t * @brief Gets next item in the queue\n\t * @return Next MQTT message to be sent\n\t */\n\tmqtt_queue_item_t* getMQTTqueue ();\n\n   /**\n\t * @brief Deletes next item in the queue\n\t */\n\tvoid popMQTTqueue ();\n\n\t/**\n\t * @brief Publishes data over MQTT\n\t * @param topic Topic that indicates message type\n\t * @param payload Message payload data\n\t * @param len Payload length\n\t * @param retain `true` if message should be retained\n\t */\n\tbool publishMQTT (const char* topic, const char* payload, size_t len, bool retain = false);\n\n   /**\n\t * @brief Function that processes downlink data from network to node\n\t * @param topic Topic that indicates message type\n\t * @param data Message payload\n\t * @param len Payload length\n\t */\n\tstatic void onDlData (char* topic, uint8_t* data, unsigned int len);\n\npublic:\n   /**\n\t * @brief Constructor to initialize MQTT client\n\t */\n\tGwOutput_MQTT () :\n        mqtt_queue (MAX_MQTT_QUEUE_SIZE),\n#if defined ESP8266 && defined SECURE_MQTT\n\t\tcertificate (DSTroot_CA),\n#endif // ESP8266 && SECURE_MQTT\n\t\tmqtt_client (espClient) {}\n\n\t/**\n\t  * @brief Called when wifi manager starts config portal\n\t  * @param enigmaIotGw Pointer to EnigmaIOT gateway instance\n\t  */\n\tvoid configManagerStart (EnigmaIOTGatewayClass* enigmaIotGw);\n\n\t/**\n\t  * @brief Called when wifi manager exits config portal\n\t  * @param status `true` if configuration was successful\n\t  */\n\tvoid configManagerExit (bool status);\n\n\t/**\n\t  * @brief Starts output module\n\t  * @return Returns `true` if successful. `false` otherwise\n\t  */\n\tbool begin ();\n\n\t/**\n\t  * @brief Loads output module configuration\n\t  * @return Returns `true` if load was successful. `false` otherwise\n\t  */\n\tbool loadConfig ();\n\n\t/**\n\t  * @brief Send control data from nodes\n\t  * @param address Node Address\n\t  * @param data Message data buffer\n\t  * @param length Data buffer length\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tbool outputControlSend (char* address, uint8_t* data, size_t length);\n\n\t /**\n\t  * @brief Send new node notification\n\t  * @param address Node Address\n\t  * @param node_id Node Id\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tbool newNodeSend (char* address, uint16_t node_id);\n\n\t /**\n\t  * @brief Send node disconnection notification\n\t  * @param address Node Address\n\t  * @param reason Disconnection reason code\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tbool nodeDisconnectedSend (char* address, gwInvalidateReason_t reason);\n\n\t /**\n\t  * @brief Send data from nodes\n\t  * @param address Node Address\n\t  * @param data Message data buffer\n\t  * @param length Data buffer length\n\t  * @param type Type of message\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n    bool outputDataSend (char* address, char* data, size_t length, GwOutput_data_type_t type = data);\n\n#if SUPPORT_HA_DISCOVERY\n    /**\n      * @brief Send MQTT generic message\n      * @param topic MQTT topic\n      * @param payload Message data buffer\n      * @param len Data buffer length\n      * @param retain MQTT retain parameter\n      * @return Returns `true` if sending was successful. `false` otherwise\n      */\n    bool rawMsgSend (const char* topic, char* payload, size_t len, bool retain);\n#endif\n    \n\t /**\n\t  * @brief Should be called regularly for module management\n\t  */\n\tvoid loop ();\n};\n\nextern GwOutput_MQTT GwOutput;\n\n#endif // _GWOUTPUT_MQTT_h\n\n"
  },
  {
    "path": "examples/EnigmaIOTGatewayMQTT/dstrootca.h",
    "content": "#pragma once\n#ifndef DSTROOTCA_H\n#define DSTROOTCA_H\n\n#if defined ESP32 && !defined NOSSL\n#define SECURE_MQTT\n\n\n#ifdef SECURE_MQTT\n// Add here your server's Root CA certificate. It is not needed to keep it secret\nstatic const char DSTroot_CA[] PROGMEM = R\"EOF(\n-----BEGIN CERTIFICATE-----\nMIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/\nMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\nDkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow\nPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD\nEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\nAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O\nrz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq\nOLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b\nxiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw\n7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD\naeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV\nHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG\nSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69\nikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr\nAvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz\nR8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5\nJDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo\nOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ\n-----END CERTIFICATE-----\n)EOF\";\n#endif // SECURE_MQTT\n#endif // ESP32\n\n#endif\n"
  },
  {
    "path": "examples/EnigmaIOTGatewayMQTT/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time ;, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[env:esp32-MQTTGateway-SSL]\nextends = esp32_common\n\n[env:esp32-MQTTGateway-NoSSL]\nextends = esp32_common\nbuild_flags = ${esp32_common.build_flags} -D NOSSL\n\n[env:esp8266-MQTTGateway]\nextends = esp8266_common\n"
  },
  {
    "path": "examples/EnigmaIOTGatewayMQTT/readme.md",
    "content": "# EnigmaIOT Gateway MQTT\n\nThis example implements a complete EnigmaIOT gateway that sends data and allow interacting using MQTT protocol. It uses TLS connection to broker, so you can use to connect a broker in a remote place on Internet.\n\nYou may use in your projects as it is, without any modification.\n\nIt uses [`GwOutput_generic.h`](https://github.com/gmag11/EnigmaIOT/blob/master/src/GwOutput_generic.h) to implement MQTT communication as a module.\n\n[`dstrootca.h`](https://github.com/gmag11/EnigmaIOT/blob/master/examples/EnigmaIOTGatewayMQTT/dstrootca.h) includes **DST Root CA X3** certificate, valid until 2021-09-30 14:01­:15 UTC. It is the root CA for Let's Encrypt certificates, so if you use a different one or expiry date has passed make sure that you update the file with the right certificate.\n\nIf you have a MQTT broker without TLS activated you have to disable [`#include \"dstrootca.h\"`](https://github.com/gmag11/EnigmaIOT/blob/master/examples/EnigmaIOTGatewayMQTT/GwOutput_mqtt.h#L21) on [`GwOutput_mqtt.h`](https://github.com/gmag11/EnigmaIOT/blob/master/examples/EnigmaIOTGatewayMQTT/GwOutput_mqtt.h)  \n\n## Data Format\n\nGateway does not interpret neither store any node data. It is completely transparent for payload.\n\n### Output data\n\nData from EnigmaIOT nodes is sent through MQTT using this topic format\n\n```\n<Network_Name>/<Node_address or Node_name>/data\n```\n\nPayload will have JSON format if node data is encoded as CayenneLPP or MsgPack. In any other case payload will be sent without any transformation.\n\n### Input Data\n\nNodes may accept user commands to ask for information or adjust settings. There are only two topics that may be used\n\n`<Network_Name>/<Node_address or Node_name>/get/data` to ask node for information\n\n`<Network_Name>/<Node_address or Node_name>/set/data` to configure settings\n\nIf payload is given as JSON, EnigmaIOT Gateway MQTT encodes it as MsgPack. So node will get the same JSON object.\n\nIf payload is not a JSON object it will be sent transparently.\n\n## Configuration\n\nGateway is configured during first boot using a web portal. If not configured or it is not able to connect to WiFi router, Gateway starts an AP. Use your smartphone to connect to EnigmaIOTGateway network and access to http://192.168.4.1.\n\nYou need to provide your WiFi name and password, a name and password for your EnigmaIOT network. It asks for a WiFi channel. You do not need to configure this as it will use your WiFi network channel.\n\nIn addition you need to enter MQTT broker address and port and username and password.\n\n"
  },
  {
    "path": "examples/enigmaiot_led_flasher/.gitignore",
    "content": ".pio\n.vscode\n"
  },
  {
    "path": "examples/enigmaiot_led_flasher/enigmaiot_led_flasher.ino",
    "content": "/**\n  * @file enigmaiot_led_flasher.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Node based on EnigmaIoT over ESP-NOW using non sleeping mode. Demonstrate clock synchronisation function\n  *\n  * Sensor reading code is mocked on this example. You can implement any other code you need for your specific need\n  */\n\n#include <Arduino.h>\n#include <EnigmaIOTNode.h>\n#include <espnow_hal.h>\n#include <CayenneLPP.h>\n\n#ifdef ESP8266\n#include <ESP8266WiFi.h>\n#include <ESP8266HTTPClient.h>\n#include <ESP8266httpUpdate.h>\n#include <ESPAsyncTCP.h> // Comment to compile for ESP32\n#include <Hash.h>\n#elif defined ESP32\n#include <WiFi.h>\n#include <AsyncTCP.h> // Comment to compile for ESP8266\n#include <SPIFFS.h>\n#include <Update.h>\n#include <driver/adc.h>\n#include \"esp_wifi.h\"\n#include \"soc/soc.h\"           // Disable brownout problems\n#include \"soc/rtc_cntl_reg.h\"  // Disable brownout problems\n#include \"soc/adc_channel.h\"\n#endif\n#include <ArduinoJson.h>\n#include <Curve25519.h>\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n#include <DNSServer.h>\n#include <FS.h>\n\n#define LED_ON LOW\n#define LED_OFF !LED_ON\n\n#ifndef LED_BUILTIN\n#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO2 or GPIO5\n#endif // !LED_BUILTIN\n\n#define BLUE_LED LED_BUILTIN\nconstexpr auto RESET_PIN = -1;\n\n#ifdef ESP8266\nADC_MODE (ADC_VCC);\n#endif\n\nvoid connectEventHandler () {\n\tSerial.println (\"Connected\");\n}\n\nvoid disconnectEventHandler (nodeInvalidateReason_t reason) {\n\tSerial.printf (\"Unregistered. Reason: %d\\n\", reason);\n}\n\nvoid processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\tchar macstr[ENIGMAIOT_ADDR_LEN * 3];\n\tString commandStr;\n\tuint8_t tempBuffer[MAX_MESSAGE_LENGTH];\n\n\tmac2str (mac, macstr);\n\tSerial.println ();\n\tSerial.printf (\"Data from %s --> %s\\n\", macstr, printHexBuffer (buffer, length));\n\tif (command == nodeMessageType_t::DOWNSTREAM_DATA_GET)\n\t\tcommandStr = \"GET\";\n\telse if (command == nodeMessageType_t::DOWNSTREAM_DATA_SET)\n\t\tcommandStr = \"SET\";\n\telse\n\t\treturn;\n\n\tSerial.printf (\"Command %s\\n\", commandStr.c_str ());\n\tSerial.printf (\"Data: %s\\n\", printHexBuffer (buffer, length));\n\tSerial.printf (\"Encoding: 0x%02X\\n\", payloadEncoding);\n\n\tCayenneLPP lpp (MAX_DATA_PAYLOAD_SIZE);\n\tDynamicJsonDocument doc (1000);\n\tJsonArray root;\n\tmemcpy (tempBuffer, buffer, length);\n\n\tswitch (payloadEncoding) {\n\tcase CAYENNELPP:\n\t\troot = doc.createNestedArray ();\n\t\tlpp.decode (tempBuffer, length, root);\n\t\tserializeJsonPretty (doc, Serial);\n\t\tbreak;\n\tcase MSG_PACK:\n\t\tdeserializeMsgPack (doc, tempBuffer, length);\n\t\tserializeJsonPretty (doc, Serial);\n\t\tbreak;\n\tdefault:\n\t\tDEBUG_WARN (\"Non supported encoding; %d\", payloadEncoding);\n\t}\n}\n\nvoid setup () {\n\n\tSerial.begin (115200); Serial.println (); Serial.println ();\n\n#ifdef ESP32\n\t// Turn-off the 'brownout detector' to avoid random restarts during wake up,\n\t// normally due to bad quality regulator on board\n\tWRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);\n#endif\n\n\t//EnigmaIOTNode.setLed (BLUE_LED);\n\tpinMode (BLUE_LED, OUTPUT);\n\tdigitalWrite (BLUE_LED, LED_OFF); // Turn off LED\n\tEnigmaIOTNode.onConnected (connectEventHandler);\n\tEnigmaIOTNode.onDisconnected (disconnectEventHandler);\n\tEnigmaIOTNode.onDataRx (processRxData);\n\tEnigmaIOTNode.enableClockSync ();\n\tEnigmaIOTNode.enableBroadcast ();\n\n\tEnigmaIOTNode.begin (&Espnow_hal, NULL, NULL, true, false);\n\n\tuint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress))\n#elif defined ESP32\n\tif ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))\n#endif\n\t{\n\t\tEnigmaIOTNode.setNodeAddress (macAddress);\n\t\t//char macStr[ENIGMAIOT_ADDR_LEN * 3];\n\t\tDEBUG_DBG (\"Node address set to %s\", mac2str (macAddress));\n\t} else {\n\t\tDEBUG_WARN (\"Node address error\");\n\t}\n\n}\n\nvoid loop () {\n\n\tEnigmaIOTNode.handle ();\n\n\tstatic const time_t PERIOD = 3000;\n\tstatic const time_t FLASH_DURATION = 50;\n\tstatic time_t clock;\n\n\tclock = EnigmaIOTNode.clock () % (PERIOD);\n\n\tif (EnigmaIOTNode.hasClockSync () && EnigmaIOTNode.isRegistered ()) {\n\t\tif (clock >= 0 && clock < FLASH_DURATION) {\n\t\t\tdigitalWrite (BLUE_LED, LED_ON); // Turn on LED\n\t\t} else {\n\t\t\tdigitalWrite (BLUE_LED, LED_OFF); // Turn on LED\n\t\t}\n\t}\n\n\tCayenneLPP msg (MAX_DATA_PAYLOAD_SIZE);\n\n\tstatic time_t lastSensorData;\n\tstatic const time_t SENSOR_PERIOD = 10000;\n\tif (millis () - lastSensorData > SENSOR_PERIOD) {\n\t\tlastSensorData = millis ();\n\n\t\t// Read sensor data\n#ifdef ESP8266\n\t\tmsg.addAnalogInput (0, (float)(ESP.getVcc ()) / 1000);\n\t\tSerial.printf (\"Vcc: %f\\n\", (float)(ESP.getVcc ()) / 1000);\n#elif defined ESP32\n\t\tmsg.addAnalogInput (0, (float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));\n\t\tSerial.printf (\"Vcc: %f\\n\", (float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));\n#endif\n\t\tmsg.addTemperature (1, 20.34);\n\t\t// Read sensor data\n\n\t\tSerial.printf (\"Trying to send: %s\\n\", printHexBuffer (msg.getBuffer (), msg.getSize ()));\n\n\t\tif (!EnigmaIOTNode.sendData (msg.getBuffer (), msg.getSize ())) {\n\t\t\tSerial.println (\"---- Error sending data\");\n\t\t} else {\n\t\t\tSerial.println (\"---- Data sent\");\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "examples/enigmaiot_led_flasher/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n[env:esp8266-NodeLedFlasher]\nextends = esp8266_node_common\n\n\n[env:esp32-NodeLedFlasher]\nextends = esp32_common\n"
  },
  {
    "path": "examples/enigmaiot_led_flasher/readme.md",
    "content": "# EnigmaIOT LED Flasher example\n\nThis example implements a node that illustrate time synchronization on nodes that do not sleep.\n\nThis feature is enabled by adding this line during Arduino `setup ()`\n\n```c++\nEnigmaIOTNode.enableClockSync ();\n```\n\nAs EnigmaIOT Node example it sends mocked data.\n\nTime synchronization is demonstrated by making board led flash synchronously on all nodes connected to same EnigmaIOT gateway using this code.\n\nUser code may make use of  `EnigmaIOTNode.clock ()` to get common clock. It is used in the same way as normal `micros()` call.\n\nThere are additional methods used to interrogate time synchronization status:\n\n- `EnigmaIOTNode.hasClockSync()`  let you know if node has got a valid sync from gateway.\n- `EnigmaIOTNode.unixtime()` gives the clock un real world time (if Gateway has got NTP sync)\n\n"
  },
  {
    "path": "examples/enigmaiot_node/.gitignore",
    "content": ".pio\n.vscode"
  },
  {
    "path": "examples/enigmaiot_node/enigmaiot_node.ino",
    "content": "/**\n  * @file enigmaiot_node.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Node based on EnigmaIoT over ESP-NOW\n  *\n  * Sensor reading code is mocked on this example. You can implement any other code you need for your specific need\n  */\n\n#include <Arduino.h>\n#include <EnigmaIOTNode.h>\n#include <espnow_hal.h>\n#include <CayenneLPP.h>\n\n#ifdef ESP8266\n#include <ESP8266WiFi.h>\n#elif defined ESP32\n#include <WiFi.h>\n#include <Update.h>\n#include <driver/adc.h>\n#include \"esp_wifi.h\"\n#include \"soc/soc.h\"           // Disable brownout problems\n#include \"soc/rtc_cntl_reg.h\"  // Disable brownout problems\n#include \"soc/adc_channel.h\"\n#endif\n#include <ArduinoJson.h>\n\n#ifndef LED_BUILTIN\n#define LED_BUILTIN 2 // ESP32 boards normally have a LED in GPIO2 or GPIO5\n#endif // !LED_BUILTIN\n\n#define BLUE_LED LED_BUILTIN\nconstexpr auto RESET_PIN = -1;\n\n#ifdef ESP8266\nADC_MODE (ADC_VCC);\n#endif\n\nvoid connectEventHandler () {\n\tSerial.println (\"Registered\");\n}\n\nvoid disconnectEventHandler (nodeInvalidateReason_t reason) {\n\tSerial.printf (\"Unregistered. Reason: %d\\n\", reason);\n}\n\nvoid processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\tchar macstr[ENIGMAIOT_ADDR_LEN * 3];\n\tString commandStr;\n\tuint8_t tempBuffer[MAX_MESSAGE_LENGTH];\n\n\tmac2str (mac, macstr);\n\tSerial.println ();\n\tSerial.printf (\"Data from %s\\n\", macstr);\n\tif (command == nodeMessageType_t::DOWNSTREAM_DATA_GET)\n\t\tcommandStr = \"GET\";\n\telse if (command == nodeMessageType_t::DOWNSTREAM_DATA_SET)\n\t\tcommandStr = \"SET\";\n\telse\n\t\treturn;\n\n\tSerial.printf (\"Command %s\\n\", commandStr.c_str ());\n\tSerial.printf (\"Data: %s\\n\", printHexBuffer (buffer, length));\n\tSerial.printf (\"Encoding: 0x%02X\\n\", payloadEncoding);\n\n\tCayenneLPP lpp (MAX_DATA_PAYLOAD_SIZE);\n\tDynamicJsonDocument doc (1000);\n\tJsonArray root;\n\tmemcpy (tempBuffer, buffer, length);\n\n\tswitch (payloadEncoding) {\n\tcase CAYENNELPP:\n\t\troot = doc.createNestedArray ();\n\t\tlpp.decode (tempBuffer, length, root);\n\t\tserializeJsonPretty (doc, Serial);\n\t\tbreak;\n\tcase MSG_PACK:\n\t\tdeserializeMsgPack (doc, tempBuffer, length);\n\t\tserializeJsonPretty (doc, Serial);\n\t\tbreak;\n\tdefault:\n\t\tDEBUG_WARN (\"Payload encoding %d is not (yet) supported\", payloadEncoding);\n\t}\n}\n\nvoid setup () {\n\n\tSerial.begin (115200); Serial.println (); Serial.println ();\n\ttime_t start = millis ();\n\n#ifdef ESP32\n\t// Turn-off the 'brownout detector' to avoid random restarts during wake up,\n\t// normally due to bad quality regulator on board\n\tWRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);\n#endif\n\n\n\tEnigmaIOTNode.setLed (BLUE_LED);\n\tEnigmaIOTNode.setResetPin (RESET_PIN);\n\tEnigmaIOTNode.onConnected (connectEventHandler);\n\tEnigmaIOTNode.onDisconnected (disconnectEventHandler);\n\tEnigmaIOTNode.onDataRx (processRxData);\n\n\tEnigmaIOTNode.begin (&Espnow_hal);\n\n\n\tuint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress))\n#elif defined ESP32\n\tif ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))\n#endif\n\t{\n\t\tEnigmaIOTNode.setNodeAddress (macAddress);\n\t\t//char macStr[ENIGMAIOT_ADDR_LEN * 3];\n\t\tDEBUG_DBG (\"Node address set to %s\", mac2str (macAddress));\n\t} else {\n\t\tDEBUG_WARN (\"Node address error\");\n\t}\n\n\t// Put here your code to read sensor and compose buffer\n\tCayenneLPP msg (MAX_DATA_PAYLOAD_SIZE);\n\n#ifdef ESP8266\n\tmsg.addAnalogInput (0, (float)(ESP.getVcc ()) / 1000);\n#elif defined ESP32\n\tmsg.addAnalogInput (0, (float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));\n#endif\n\tmsg.addTemperature (1, 20.34);\n\tmsg.addDigitalInput (2, 123);\n\tmsg.addBarometricPressure (3, 1007.25);\n\tmsg.addCurrent (4, 2.43);\n\n#ifdef ESP8266\n\tSerial.printf (\"Vcc: %f\\n\", (float)(ESP.getVcc ()) / 1000);\n#elif defined ESP32\n\tSerial.printf (\"Vcc: %f\\n\", (float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));\n#endif\n\t// End of user code\n\n\tSerial.printf (\"Trying to send: %s\\n\", printHexBuffer (msg.getBuffer (), msg.getSize ()));\n\n\t// Send buffer data\n\tif (!EnigmaIOTNode.sendData (msg.getBuffer (), msg.getSize ())) {\n\t\tSerial.println (\"---- Error sending data\");\n\t} else {\n\t\tSerial.println (\"---- Data sent\");\n\t}\n\tSerial.printf (\"Total time: %lu ms\\n\", millis () - start);\n\n\t// Go to sleep\n\tEnigmaIOTNode.sleep ();\n}\n\nvoid loop () {\n\n\tEnigmaIOTNode.handle ();\n\n}\n"
  },
  {
    "path": "examples/enigmaiot_node/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n[env:esp8266-Node]\nextends = esp8266_node_common\n\n\n[env:esp32-Node]\nextends = esp32_common\n"
  },
  {
    "path": "examples/enigmaiot_node/readme.md",
    "content": "# EnigmaIOT Node example\n\nThis is a basic and straightforward example of an EnigmaIOT node. It only sends a message with mocked values, in addition to input voltage value on ESP8266 and ESP32, and sleeps during 10 seconds.\n\nIf you use an ESP8266 you have to connect GPIO16 and RST pins or it will never wake from sleep. You can reset your ESP8266 board manually to force a wake.\n\nIt uses CayenneLPP as payload encoding. CayenneLPP is a pretty efficient encoding format. Other examples uses MessagePack that is less efficient but much more versatile. So I recommend using the latter unless you have many values to send that do not fin in the maximum 214 bytes of a single EnigmaIOT message.\n\nIn order to adapt it to your needs you only have to modify this code to readout sensor values.\n\n```c++\n// User code\n\nCayenneLPP msg (MAX_DATA_PAYLOAD_SIZE);\n\nmsg.addAnalogInput (0, (float)(ESP.getVcc ()) / 1000);\nmsg.addTemperature (1, 20.34);\nmsg.addDigitalInput (2, 123);\nmsg.addBarometricPressure (3, 1007.25);\nmsg.addCurrent (4, 2.43);\n\n// End of user code\n\n// Send buffer data\nEnigmaIOTNode.sendData (msg.getBuffer (), msg.getSize ());\n```\n\nWhen receiving this message, MQTT Gateway produces this output:\n\n```json\n<network_name>/<node_name>/data \n\n[{\"channel\":0, \"type\":2,   \"name\":\"analog_input\",  \"value\":3.28},\n {\"channel\":1, \"type\":103, \"name\":\"temperature\",   \"value\":20.3},\n {\"channel\":2, \"type\":0,   \"name\":\"digital_input\", \"value\":123},\n {\"channel\":3, \"type\":115, \"name\":\"pressure\",      \"value\":1007.2},\n {\"channel\":4, \"type\":117, \"name\":\"current\",       \"value\":2.43}]\n```\n\n"
  },
  {
    "path": "examples/enigmaiot_node_msgpack/.gitignore",
    "content": ".pio\n.vscode"
  },
  {
    "path": "examples/enigmaiot_node_msgpack/enigmaiot_node_msgpack.ino",
    "content": "/**\n  * @file enigmaiot_node.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Node based on EnigmaIoT over ESP-NOW that uses MessagePack as payload encoding\n  *\n  * Sensor reading code is mocked on this example. You can implement any other code you need for your specific need\n  */\n\n#include <Arduino.h>\n#include <EnigmaIOTNode.h>\n#include <espnow_hal.h>\n#include <CayenneLPP.h>\n\n#ifdef ESP8266\n#include <ESP8266WiFi.h>\n#include <ESP8266HTTPClient.h>\n#include <ESP8266httpUpdate.h>\n#include <ESPAsyncTCP.h> // Comment to compile for ESP32\n#include <Hash.h>\n#elif defined ESP32\n#include <WiFi.h>\n#include <AsyncTCP.h> // Comment to compile for ESP8266\n#include <SPIFFS.h>\n#include <Update.h>\n#include <driver/adc.h>\n#include \"esp_wifi.h\"\n#include \"soc/soc.h\"           // Disable brownout problems\n#include \"soc/rtc_cntl_reg.h\"  // Disable brownout problems\n#include \"soc/adc_channel.h\"\n#endif\n#include <ArduinoJson.h>\n#include <Curve25519.h>\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n#include <DNSServer.h>\n#include <FS.h>\n\n#ifndef LED_BUILTIN\n#ifdef ESP8266\n#define LED_BUILTIN 2 // ESP8266 boards normally have a LED in GPIO2\n#else\n#define LED_BUILTIN 5 // ESP32 boards normally have a LED in GPIO2 or GPIO5\n#endif\n#endif // !LED_BUILTIN\n\n#define BLUE_LED LED_BUILTIN\nconstexpr auto RESET_PIN = -1;\n\n#ifdef ESP8266\nADC_MODE (ADC_VCC);\n#endif\n\nvoid connectEventHandler () {\n\tSerial.println (\"Registered\");\n}\n\nvoid disconnectEventHandler (nodeInvalidateReason_t reason) {\n\tSerial.printf (\"Unregistered. Reason: %d\\n\", reason);\n}\n\nvoid processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t encoding) {\n\tchar macstr[ENIGMAIOT_ADDR_LEN * 3];\n\tString commandStr;\n\tuint8_t tempBuffer[MAX_MESSAGE_LENGTH];\n\n\tmac2str (mac, macstr);\n\tSerial.println ();\n\tSerial.printf (\"Data from %s\\n\", macstr);\n\tif (command == nodeMessageType_t::DOWNSTREAM_DATA_GET)\n\t\tcommandStr = \"GET\";\n\telse if (command == nodeMessageType_t::DOWNSTREAM_DATA_SET)\n\t\tcommandStr = \"SET\";\n\telse\n\t\treturn;\n\n\tSerial.printf (\"Command %s\\n\", commandStr.c_str ());\n\tSerial.printf (\"Data: %s\\n\", printHexBuffer (buffer, length));\n\tSerial.printf (\"Encoding: 0x%02X\\n\", encoding);\n\n\tCayenneLPP lpp (MAX_DATA_PAYLOAD_SIZE);\n\tDynamicJsonDocument doc (1000);\n\tJsonArray root;\n\tmemcpy (tempBuffer, buffer, length);\n\n\tswitch (encoding) {\n\tcase CAYENNELPP:\n\t\troot = doc.createNestedArray ();\n\t\tlpp.decode (tempBuffer, length, root);\n\t\tserializeJsonPretty (doc, Serial);\n\t\tbreak;\n\tcase MSG_PACK:\n\t\tdeserializeMsgPack (doc, tempBuffer, length);\n\t\tserializeJsonPretty (doc, Serial);\n\t\tbreak;\n\tdefault:\n\t\tDEBUG_WARN (\"Non supported encoding; %d\", encoding);\n\t}\n}\n\nvoid setup () {\n\n\tSerial.begin (921600); Serial.println (); Serial.println ();\n\ttime_t start = millis ();\n\n#ifdef ESP32\n\t// Turn-off the 'brownout detector' to avoid random restarts during wake up,\n\t// normally due to bad quality regulator on board\n\tWRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);\n#endif\n\n\tEnigmaIOTNode.setLed (BLUE_LED);\n\tEnigmaIOTNode.setResetPin (RESET_PIN);\n\tEnigmaIOTNode.onConnected (connectEventHandler);\n\tEnigmaIOTNode.onDisconnected (disconnectEventHandler);\n\tEnigmaIOTNode.onDataRx (processRxData);\n\n\tEnigmaIOTNode.begin (&Espnow_hal);\n\n\tuint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress))\n#elif defined ESP32\n\tif ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))\n#endif\n\t{\n\t\tEnigmaIOTNode.setNodeAddress (macAddress);\n\t\tchar macStr[ENIGMAIOT_ADDR_LEN * 3];\n\t\tDEBUG_DBG (\"Node address set to %s\", mac2str (macAddress, macStr));\n\t} else {\n\t\tDEBUG_WARN (\"Node address error\");\n\t}\n\n\t// Put here your code to read sensor and compose buffer\n\tconst size_t capacity = JSON_OBJECT_SIZE (5);\n\tDynamicJsonDocument json (capacity);\n\n#ifdef ESP8266\n\tjson[\"V\"] = (float)(ESP.getVcc ()) / 1000;\n#elif defined ESP32\n\tjson[\"V\"] = (float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096);\n#endif\n\tjson[\"tem\"] = 203;\n\tjson[\"din\"] = 123;\n\tjson[\"pres\"] = 1007;\n\tjson[\"curr\"] = 2.43;\n\n\tint len = measureMsgPack (json) + 1;\n\tuint8_t* buffer = (uint8_t*)malloc (len);\n\tlen = serializeMsgPack (json, (char*)buffer, len);\n\n#ifdef ESP8266\n\tSerial.printf (\"Vcc: %f\\n\", (float)(ESP.getVcc ()) / 1000);\n#elif defined ESP32\n\tSerial.printf (\"Vcc: %f\\n\", (float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));\n#endif\n\tSerial.printf (\"Message Len %d\\n\", len);\n\t// End of user code\n\n\tSerial.printf (\"Trying to send: %s\\n\", printHexBuffer (buffer, len));\n\n\t// Send buffer data\n\tif (!EnigmaIOTNode.sendData (buffer, len, MSG_PACK)) {\n\t\tSerial.println (\"---- Error sending data\");\n\t} else {\n\t\tSerial.println (\"---- Data sent\");\n\t}\n\tSerial.printf (\"Total time: %lu ms\\n\", millis () - start);\n\n\tfree (buffer);\n\n\t// Go to sleep\n\tEnigmaIOTNode.sleep ();\n}\n\nvoid loop () {\n\n\tEnigmaIOTNode.handle ();\n\n}\n"
  },
  {
    "path": "examples/enigmaiot_node_msgpack/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n[env:esp8266-NodeMsgPack]\nextends = esp8266_node_common\n\n[env:esp32-NodeMsgPack]\nextends = esp32_common\n"
  },
  {
    "path": "examples/enigmaiot_node_msgpack/readme.md",
    "content": "# EnigmaIOT MsgPack example\n\nThis is the equivalent of EnigmaIOT node example but shows how to use JSON and MsgPack to encode data before transmission. It sends a message with mocked values, in addition to input voltage value on ESP8266 and ESP32, and sleeps during 10 seconds.\n\nIf you use an ESP8266 you have to connect GPIO16 and RST pins or it will never wake from sleep. You can reset your ESP8266 board manually to force a wake.\n\nIn order to adapt it to your needs you only have to modify this code to readout sensor values.\n\n```c++\n// Put here your code to read sensor and compose buffer\nconst size_t capacity = JSON_OBJECT_SIZE (5); // Adapt capacity to your needs. See https://arduinojson.org/v6/assistant/ for guidance\nDynamicJsonDocument json (capacity);\n\njson[\"V\"] = (float)(ESP.getVcc ()) / 1000;\njson[\"tem\"] = 203;\njson[\"din\"] = 123;\njson[\"pres\"] = 1007;\njson[\"curr\"] = 2.43;\n\nint len = MAX_DATA_PAYLOAD_SIZE;\nuint8_t buffer[MAX_DATA_PAYLOAD_SIZE];\nlen = serializeMsgPack (json, (char*)buffer, len);\n// End of user code\n\n// Send buffer data\nEnigmaIOTNode.sendData (buffer, len, MSG_PACK);\n```\n\nWhen receiving this message, MQTT Gateway produces this output:\n\n```json\n<network_name>/<node_name>/data \n\n{ \"V\":3.003, \"tem\":203, \"din\":123, \"pres\":1007, \"curr\":2.43 }\n```\n\nThis nodes allows receiving downlink messages sending MQTT messages to gateway as\n\n```json\n<network_name>/<node_name>/set/data <user data>\n```\n\nIf user data is given in JSON format, EnigmaIOT gateway will convert it to MsgPack format automatically.\n\nNode will dump its content on serial port."
  },
  {
    "path": "examples/enigmaiot_node_nonsleepy/.gitignore",
    "content": ".pio\n.vscode\n"
  },
  {
    "path": "examples/enigmaiot_node_nonsleepy/enigmaiot_node_nonsleepy.ino",
    "content": "/**\n  * @file enigmaiot_node_nonsleepy.ino\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Node based on EnigmaIoT over ESP-NOW, in non sleeping mode\n  *\n  * Sensor reading code is mocked on this example. You can implement any other code you need for your specific need\n  */\n\n#if !defined ESP8266 && !defined ESP32\n#error Node only supports ESP8266 or ESP32 platform\n#endif\n\n#include <Arduino.h>\n#include <EnigmaIOTNode.h>\n#include <espnow_hal.h>\n#include <CayenneLPP.h>\n\n#ifdef ESP8266\n#include <ESP8266WiFi.h>\n#include <ESP8266HTTPClient.h>\n#include <ESP8266httpUpdate.h>\n#include <ESPAsyncTCP.h> // Comment to compile for ESP32\n#include <Hash.h>\n#elif defined ESP32\n#include <WiFi.h>\n#include <AsyncTCP.h> // Comment to compile for ESP8266\n#include <Update.h>\n#include <driver/adc.h>\n#include \"esp_wifi.h\"\n#include \"soc/soc.h\"           // Disable brownout problems\n#include \"soc/rtc_cntl_reg.h\"  // Disable brownout problems\n#include \"soc/adc_channel.h\"\n#endif\n#include <ArduinoJson.h>\n#include <Curve25519.h>\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n#include <DNSServer.h>\n#include <FS.h>\n\n#ifndef LED_BUILTIN\n#ifdef ESP8266\n#define LED_BUILTIN 2 // ESP8266 boards normally have a LED in GPIO2\n#else\n#define LED_BUILTIN 5 // ESP32 boards normally have a LED in GPIO2 or GPIO5\n#endif\n#endif // !LED_BUILTIN\n\n#define BLUE_LED LED_BUILTIN\nconstexpr auto RESET_PIN = -1;\n\n#ifdef ESP8266\nADC_MODE (ADC_VCC);\n#endif\n\nvoid connectEventHandler () {\n\tSerial.println (\"Connected\");\n}\n\nvoid disconnectEventHandler (nodeInvalidateReason_t reason) {\n\tSerial.printf (\"Unregistered. Reason: %d\\n\", reason);\n}\n\nvoid processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) {\n\tchar macstr[ENIGMAIOT_ADDR_LEN * 3];\n\tString commandStr;\n\tuint8_t tempBuffer[MAX_MESSAGE_LENGTH];\n\tbool broadcast = false;\n\tuint8_t _command = command;\n\n\tif (_command & 0x80)\n\t\tbroadcast = true;\n\n\t_command = (_command & 0x7F);\n\n\tmac2str (mac, macstr);\n\tSerial.println ();\n\tSerial.printf (\"Data from %s --> %s\\n\", macstr, printHexBuffer (buffer, length));\n\tif (_command == nodeMessageType_t::DOWNSTREAM_DATA_GET)\n\t\tcommandStr = \"GET\";\n\telse if (_command == nodeMessageType_t::DOWNSTREAM_DATA_SET)\n\t\tcommandStr = \"SET\";\n\telse\n\t\treturn;\n\n\tSerial.printf (\"%s Command %s\\n\", broadcast ? \"Broadcast\" : \"Unicast\", commandStr.c_str ());\n\tSerial.printf (\"Data: %s\\n\", printHexBuffer (buffer, length));\n\tSerial.printf (\"Encoding: 0x%02X\\n\", payloadEncoding);\n\n\tCayenneLPP lpp (MAX_DATA_PAYLOAD_SIZE);\n\tDynamicJsonDocument doc (1000);\n\tJsonArray root;\n\tmemcpy (tempBuffer, buffer, length);\n\n\tswitch (payloadEncoding) {\n\tcase CAYENNELPP:\n\t\troot = doc.createNestedArray ();\n\t\tlpp.decode (tempBuffer, length, root);\n\t\tserializeJsonPretty (doc, Serial);\n\t\tbreak;\n\tcase MSG_PACK:\n\t\tdeserializeMsgPack (doc, tempBuffer, length);\n\t\tserializeJsonPretty (doc, Serial);\n\t\tSerial.println ();\n\t\tbreak;\n\tdefault:\n\t\tDEBUG_WARN (\"Payload encoding %d is not (yet) supported\", payloadEncoding);\n\t}\n}\n\nvoid setup () {\n\n\tSerial.begin (921600); Serial.println (); Serial.println ();\n\n#ifdef ESP32\n\t// Turn-off the 'brownout detector' to avoid random restarts during wake up,\n\t// normally due to bad quality regulator on board\n\tWRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0);\n#endif\n\n\tEnigmaIOTNode.setLed (BLUE_LED);\n\t//pinMode (BLUE_LED, OUTPUT);\n\t//digitalWrite (BLUE_LED, HIGH); // Turn on LED\n\tEnigmaIOTNode.setResetPin (RESET_PIN);\n\tEnigmaIOTNode.onConnected (connectEventHandler);\n\tEnigmaIOTNode.onDisconnected (disconnectEventHandler);\n\tEnigmaIOTNode.onDataRx (processRxData);\n\tEnigmaIOTNode.enableClockSync ();\n\tEnigmaIOTNode.enableBroadcast ();\n\n\tEnigmaIOTNode.begin (&Espnow_hal, NULL, NULL, true, false);\n\n\tuint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress))\n#elif defined ESP32\n\tif ((esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK))\n#endif\n\t{\n\t\tEnigmaIOTNode.setNodeAddress (macAddress);\n\t\tDEBUG_WARN (\"Node address set to %s\", mac2str (macAddress));\n\t} else {\n\t\tDEBUG_WARN (\"Node address error\");\n\t}\n}\n\nvoid showTime () {\n\t//const int time_freq = 10000;\n\n\n\tif (EnigmaIOTNode.hasClockSync ()) {\n        //static time_t displayTime;\n        tm timeinfo;\n\n\t\t//displayTime = millis ();\n\t\t//time_t local_time_ms = EnigmaIOTNode.clock ();\n\t\t//local_time_ms /= 1000;\n\t\ttime_t local_time = EnigmaIOTNode.unixtime ();\n\t\tlocaltime_r (&local_time, &timeinfo);\n\t\t//Serial.printf (\"Timestamp ms: %lld\\n\", local_time_ms);\n\t\t//Serial.printf (\"Timestamp sec: %ld\\n\", local_time);\n\t\tSerial.printf (\"%02d/%02d/%04d %02d:%02d:%02d\\n\",\n\t\t\t\t\t   timeinfo.tm_mday,\n\t\t\t\t\t   timeinfo.tm_mon + 1,\n\t\t\t\t\t   timeinfo.tm_year + 1900,\n\t\t\t\t\t   timeinfo.tm_hour,\n\t\t\t\t\t   timeinfo.tm_min,\n\t\t\t\t\t   timeinfo.tm_sec);\n\t} else {\n\t\tSerial.printf (\"Time not sync'ed\\n\");\n\t}\n\n}\n\nvoid loop () {\n\n\tEnigmaIOTNode.handle ();\n\n\tCayenneLPP msg (20);\n\n\tstatic time_t lastSensorData;\n\tstatic const time_t SENSOR_PERIOD = 10000;\n\tif (millis () - lastSensorData > SENSOR_PERIOD) {\n\t\tlastSensorData = millis ();\n\t\tshowTime ();\n\t\t// Read sensor data\n#ifdef ESP8266\n\t\tmsg.addAnalogInput (0, (float)(ESP.getVcc ()) / 1000);\n\t\tSerial.printf (\"Vcc: %f\\n\", (float)(ESP.getVcc ()) / 1000);\n#elif defined ESP32\n\t\tmsg.addAnalogInput (0, (float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));\n\t\tSerial.printf (\"Vcc: %f V\\n\", (float)(analogRead (ADC1_CHANNEL_0_GPIO_NUM) * 3.6 / 4096));\n#endif\n\t\tmsg.addTemperature (1, 20.34);\n\t\t// Read sensor data\n\n\t\tSerial.printf (\"Trying to send: %s\\n\", printHexBuffer (msg.getBuffer (), msg.getSize ()));\n\n\t\tif (!EnigmaIOTNode.sendData (msg.getBuffer (), msg.getSize ())) {\n\t\t\tSerial.println (\"---- Error sending data\");\n\t\t} else {\n\t\t\tSerial.println (\"---- Data sent\");\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "examples/enigmaiot_node_nonsleepy/platformio.ini",
    "content": "[platformio]\nsrc_dir = .\ninclude_dir = .\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags = -std=c++11 ${debug.default_level} -D LED_BUILTIN=5 ${debug.default_esp32_level}\n;debug_tool = esp-prog\nmonitor_filters = time ;, esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\n;debug_init_break = tbreak setup\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    ESP Async WebServer\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    PubSubClient\n    ESPAsyncWiFiManager\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    CayenneLPP\n    DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    https://github.com/gmag11/EnigmaIOT.git\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n[env:esp8266-NodeNonSleepy]\nextends = esp8266_node_common\n\n\n[env:esp32-NodeNonSleepy]\nextends = esp32_common\n"
  },
  {
    "path": "examples/enigmaiot_node_nonsleepy/readme.md",
    "content": "# EnigmaIOT Node example\n\nThis is the equivalent to EnigmaIOT node but this example does not put microcontroller in deep sleep state. It only sends a message with mocked values every 10 seconds.\n\nAs it is a non sleepy node it has clock synchronization available. This shows how to manage unixtime information. It dumps local time just before sending data.\n\nIn order to adapt it to your needs you only have to modify this code to readout sensor values.\n\n```c++\nvoid showTime () {\n\tconst char* TZINFO = \"CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00\"; // Local TZ in Spain. Check https://remotemonitoringsystems.ca/time-zone-abbreviations.php\n\t\n\ttm timeinfo;\n\tstatic time_t displayTime;\n\t\n\tif (EnigmaIOTNode.hasClockSync()) {\n\t\tsetenv (\"TZ\", TZINFO, 1);\n\t\tdisplayTime = millis ();\n\t\ttime_t local_time_ms = EnigmaIOTNode.clock ();\n\t\ttime_t local_time = EnigmaIOTNode.unixtime ();\n\t\tlocaltime_r (&local_time, &timeinfo);\n\t\tSerial.printf (\"%02d/%02d/%04d %02d:%02d:%02d\\n\",\n\t\t\t\t\t   timeinfo.tm_mday,\n\t\t\t\t\t   timeinfo.tm_mon + 1,\n\t\t\t\t\t   timeinfo.tm_year + 1900,\n\t\t\t\t\t   timeinfo.tm_hour,\n\t\t\t\t\t   timeinfo.tm_min,\n\t\t\t\t\t   timeinfo.tm_sec);\n\t} else {\n\t\tSerial.printf (\"Time not sync'ed\\n\");\n\t}\n}\n\nloop () {\n    EnigmaIOTNode.handle (); // Needed to keep EnigmaIOT connection updated\n    \n\tCayenneLPP msg (20);\n\n\tstatic time_t lastSensorData;\n    static const time_t SENSOR_PERIOD = 10000;\n    if (millis () - lastSensorData > SENSOR_PERIOD) {\n        lastSensorData = millis ();\n        showTime ();\n        // Read sensor data\n        msg.addAnalogInput (0, (float)(ESP.getVcc ()) / 1000);\n        msg.addTemperature (1, 20.34);\n\n        EnigmaIOTNode.sendData (msg.getBuffer (), msg.getSize ());\n    }\n}\n```\n\nThis is the output in serial port\n\n```\n31/07/2020 13:31:14\nVcc: 2.994000\nTrying to send: 00 02 01 2B 01 67 00 CB \n---- Data sent\n31/07/2020 13:31:24\nVcc: 2.994000\nTrying to send: 00 02 01 2B 01 67 00 CB \n---- Data sent\n31/07/2020 13:31:34\nVcc: 2.994000\nTrying to send: 00 02 01 2B 01 67 00 CB \n---- Data sent\n```\n\n"
  },
  {
    "path": "library.properties",
    "content": "name=EnigmaIoT\nversion=0.9.8\nauthor=German Martin\nmaintainer=German Martin\nsentence=Secure sensor platform\nparagraph=Framework to build sensor networks using secure protocol\ncategory=Communication\nurl=https://github.com/gmag11/EnigmaIoT\narchitectures=*\n"
  },
  {
    "path": "platformio.ini",
    "content": ";PlatformIO Project Configuration File\n;\n;   Build options: build flags, source filter\n;   Upload options: custom upload port, speed and extra flags\n;   Library options: dependencies, extra library storages\n;   Advanced options: extra scripting\n;\n; Please visit documentation for the other options and examples\n; https://docs.platformio.org/page/projectconf.html\n\n[platformio]\nsrc_dir = ./examples/\nlib_dir = .\n\n\n[debug]\nesp32_none = -DCORE_DEBUG_LEVEL=0\nnone = -DDEBUG_LEVEL=NONE\nesp32_error = -DCORE_DEBUG_LEVEL=1\nerror = -DDEBUG_LEVEL=ERROR\nesp32_warn = -DCORE_DEBUG_LEVEL=2\nwarn = -DDEBUG_LEVEL=WARN\nesp32_info = -DCORE_DEBUG_LEVEL=3\ninfo = -DDEBUG_LEVEL=INFO\nesp32_debug = -DCORE_DEBUG_LEVEL=4\ndebug = -DDEBUG_LEVEL=DBG\nesp32_verbose = -DCORE_DEBUG_LEVEL=5\nverbose = -DDEBUG_LEVEL=VERBOSE\n\ndefault_level = ${debug.warn}\ndefault_esp32_level = ${debug.esp32_warn}\n\n\n[env]\nupload_speed = 921600\nmonitor_speed = 921600\n;upload_port = COM17\n\n\n[esp32_common]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nboard_build.flash_mode = dout\nboard_build.partitions = min_spiffs.csv\nbuild_flags =\n    -std=c++11\n    ${debug.default_level} \n    -D LED_BUILTIN=5\n    ${debug.default_esp32_level}\n;debug_tool = esp-prog\n;build_type = debug\n;debug_build_flags = -O0 -g -ggdb\nupload_protocol = esp-prog\n;debug_speed = 2000\n;debug_init_break = tbreak setup\nmonitor_filters = time , esp32_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nlib_deps =\n    bblanchon/ArduinoJson\n    knolleary/PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    me-no-dev/ESP Async WebServer\n    sabas1080/CayenneLPP\n    xoseperez/DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    ;https://github.com/gmag11/EnigmaIOT.git\n    milesburton/DallasTemperature\n\n\n[esp8266_common]\nplatform = espressif8266\nboard = esp12e\nframework = arduino\nupload_resetmethod = nodemcu\nboard_build.ldscript = eagle.flash.4m1m.ld\nmonitor_filters = time, esp8266_exception_decoder\nmonitor_rts = 0\nmonitor_dtr = 0\nbuild_flags = \n    -std=c++11 \n    -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 \n    -D LED_BUILTIN=2 \n    ${debug.default_level}\nlib_deps =\n    bblanchon/ArduinoJson\n    knolleary/PubSubClient\n    https://github.com/gmag11/ESPAsyncWiFiManager.git\n    me-no-dev/ESP Async WebServer\n    sabas1080/CayenneLPP\n    xoseperez/DebounceEvent\n    https://github.com/gmag11/CryptoArduino.git\n    ;https://github.com/gmag11/EnigmaIOT.git\n\n\n[esp8266_node_common]\nextends = esp8266_common\nboard_build.ldscript = eagle.flash.2m64.ld\nboard = esp12e\n\n\n[env:esp32-MQTTGateway-SSL]\nextends = esp32_common\nbuild_src_filter = -<*> +<EnigmaIOTGatewayMQTT/>\n\n\n[env:esp32-MQTTGateway-NoSSL]\nextends = esp32_common\nbuild_src_filter = -<*> +<EnigmaIOTGatewayMQTT/>\nbuild_flags = ${esp32_common.build_flags} -D NOSSL\n\n\n[env:esp8266-MQTTGateway]\nextends = esp8266_common\nbuild_src_filter = -<*> +<EnigmaIOTGatewayMQTT/>\n\n\n[env:esp32-DummyGateway]\nextends = esp32_common\nbuild_src_filter = -<*> +<EnigmaIOTGatewayDummy/>\n\n\n[env:esp8266-DummyGateway]\nextends = esp8266_common\nbuild_src_filter = -<*> +<EnigmaIOTGatewayDummy/>\n\n\n[env:esp8266-Node]\nextends = esp8266_node_common\nbuild_src_filter = -<*> +<enigmaiot_node/>\n\n\n[env:esp32-Node]\nextends = esp32_common\nbuild_src_filter = -<*> +<enigmaiot_node/>\n\n\n[env:esp8266-NodeLedFlasher]\nextends = esp8266_node_common\nbuild_src_filter = -<*> +<enigmaiot_led_flasher/>\n\n\n[env:esp32-NodeLedFlasher]\nextends = esp32_common\nbuild_src_filter = -<*> +<enigmaiot_led_flasher/>\n\n\n[env:esp8266-NodeMsgPack]\nextends = esp8266_node_common\nbuild_src_filter = -<*> +<enigmaiot_node_msgpack/>\n\n\n[env:esp32-NodeMsgPack]\nextends = esp32_common\nbuild_src_filter = -<*> +<enigmaiot_node_msgpack/>\n\n\n[env:esp8266-NodeNonSleepy]\nextends = esp8266_node_common\nbuild_src_filter = -<*> +<enigmaiot_node_nonsleepy/>\n\n\n[env:esp32-NodeNonSleepy]\nextends = esp32_common\nbuild_src_filter = -<*> +<enigmaiot_node_nonsleepy/>\n        \n\n[env:esp8266-ButtonController]\nextends = esp8266_node_common\nlib_deps = \n    ${esp8266_common.lib_deps}\n    FailSafeMode\nbuild_src_filter = -<*> +<EnigmaIOT-Button-Controller/>\n\n\n[env:esp32-ButtonController]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\nbuild_src_filter = -<*> +<EnigmaIOT-Button-Controller/>\n\n\n[env:esp8266-DashButtonController]\nextends = esp8266_node_common\nbuild_flags = \n    ${esp32_common.build_flags}\n    -DFS_USE_FLASH=1\n    -DFS_USE_LITTLEFS=1\nlib_deps = \n    ${esp8266_common.lib_deps}\n    FailSafeMode\nbuild_src_filter = -<*> +<EnigmaIOT-DashButton-Controller/>\n\n\n[env:esp32-DashButtonController]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\nbuild_src_filter = -<*> +<EnigmaIOT-DashButton-Controller/>\n\n\n[env:esp8266-JsonControllerTemplate]\nextends = esp8266_node_common\nlib_deps = \n    ${esp8266_common.lib_deps}\n    FailSafeMode\nbuild_src_filter = -<*> +<EnigmaIOT-Json-Controller-Template/>\nbuild_flags = ${esp8266_common.build_flags} -DFS_USE_FLASH=1 -DFS_USE_LITTLEFS=1\n\n\n[env:esp32-JsonControllerTemplate]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\nbuild_src_filter = -<*> +<EnigmaIOT-Json-Controller-Template/>\n\n\n[env:esp8266-LedController]\nextends = esp8266_node_common\nlib_deps = \n    ${esp8266_common.lib_deps}\n    FailSafeMode\nbuild_src_filter = -<*> +<EnigmaIOT-Led-Controller/>\n\n\n[env:esp32-LedController]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\nbuild_src_filter = -<*> +<EnigmaIOT-Led-Controller/>\n\n\n[env:esp8266-SensorController]\nextends = esp8266_node_common\nbuild_src_filter = -<*> +<EnigmaIOT-Sensor-Controller/>\nlib_deps = \n    ${esp8266_node_common.lib_deps}\n    FailSafeMode\n    paulstoffregen/OneWire\n    milesburton/DallasTemperature\n\n[env:esp32-SensorController]\nextends = esp32_common\nbuild_src_filter = -<*> +<EnigmaIOT-Sensor-Controller/>\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\n    paulstoffregen/OneWire\n    milesburton/DallasTemperature\n\n\n[env:esp8266-SmartSwitchController]\nextends = esp8266_node_common\nlib_deps = \n    ${esp8266_common.lib_deps}\n    FailSafeMode\nbuild_src_filter = -<*> +<EnigmaIOT-SmartSwitch-Controller/>\n\n\n[env:esp32-SmartSwitchController]\nextends = esp32_common\nlib_deps = \n    ${esp32_common.lib_deps}\n    FailSafeMode\nbuild_src_filter = -<*> +<EnigmaIOT-SmartSwitch-Controller/>\n\n"
  },
  {
    "path": "readme.md",
    "content": "# EnigmaIoT\n\n<img src=\"https://github.com/gmag11/EnigmaIOT/raw/master/logo/logo%20text%20under.svg?sanitize=true\" alt=\"EnigmaIoT Logo\" width=\"50%\"/>\n\n[![ESP8266](https://github.com/gmag11/EnigmaIOT/workflows/ESP8266/badge.svg)](https://github.com/gmag11/EnigmaIOT/actions?query=workflow%3AESP8266)\n\n[![ESP32](https://github.com/gmag11/EnigmaIOT/workflows/ESP32/badge.svg)](https://github.com/gmag11/EnigmaIOT/actions?query=workflow%3AESP32)\n\n## Introduction\n\n**EnigmaIoT** is an open source solution for wireless multi sensor systems. It has two main components, multiple **nodes** and one **gateway**.\n\nA number of nodes with one or more sensors each one communicate in a **secure** way to a central gateway in a star network using EnigmaIoT protocol.\n\nThis protocol has been designed with security on mind. All node data is encrypted with a random key that changes periodically. Key is unique for each node and dynamically negotiated, so user do not have to enter any key. Indeed, all encryption and key agreement is transparent to user.\n\nI designed this because I was searching for a way to have a relatively high number of nodes at home. I thought about using WiFi but it would overload my home router. So I looked for an alternative. I evaluated  LoRa or cheap nRF24 modules but I wanted the simplest solution in terms of hardware.\n\nESP8266 and ESP32 microcontrollers implement a protocol known as ESP-NOW. It is a point to point protocol, based on vendor specific [WiFi management action frames](https://mrncciew.com/2014/09/29/cwap-802-11-mgmt-frame-types/), that works in a connectionless fashion and every packet is a few milliseconds long. Because of this, it eases to have a battery powered node so that it enables designing totally wireless sensors.\n\nBut use of encryption on ESP-NOW limits the number of nodes to only 6 nodes. So I thought that I could implement encryption on payload but I found many problems I should solve to grade this as \"secure enough\".\n\nFind library documentation on https://gmag11.github.io/EnigmaIOT\n\n## Quick start\n\nIt you are courious to quickly test how does EnigmaIOT performs you can follow this [howto guide](docs/howto.md). This will guide you on how to:\n\n- Setup your gateway\n- Build simplest EnigmaIOT node\n- Configure your first node\n- Develop custom nodes with advanced features\n\n## Project requirements\n\nDuring this project conception I decided that it should fulfil this list of requirements.\n\n- Use the simplest hardware, based on ESP8266 and/or ESP32.\n- Secure by design. Make use of a secure channel for data transmission.\n- Automatic dynamic key agreement.\n- Do not require connection to the Internet.\n- Do not overload my home WiFi infrastructure. Only Gateway will be connected to LAN.\n- Able to use deep sleep to run on batteries.\n- Enough wireless range for a house.\n- Support for a high number of nodes.\n\n## Features\n\n- [x] Encrypted communication using [**ChaCha20/Poly1305**](https://tools.ietf.org/html/rfc7539)\n- [x] Dynamic key, shared between one node and gateway. Keys are independent for each node\n- [x] Shared keys are expired after a certain (configurable) time.\n- [x] Number of nodes is only limited by memory on gateway (60 bytes per node)\n- [x] Key is never on air so it is cannot be captured\n- [x] Key expiration and renewal is managed transparently\n- [x] Avoid repeatability attack having a new random initialization vector on every message. This is mandatory for ChaCha20/Poly1305 in order to keep cipher secure\n- [x] Automatic and transparent node attachment\n- [x] Avoid rogue node, rogue gateway and man-in-the-middle attack\n\nNotice that network key used to implement this feature is stored on flash. ESP8266 do not allow flash encryption so network key may be recovered reading flash.\n\n- [x] Pluggable physical layer communication. Right now only ESP-NOW protocol is developed but you can easily add more communication alternatives\n\n- [x] When using ESP-NOW only ESP8266 or ESP32 is needed. No more electronics apart from sensor\n\n- [x] Data message counter to detect lost or repeated messages\n\n- [x] Designed as two libraries (one for gateway, one for node) for easier use\n\n- [x] Crypto algorithm could be changed with low effort\n\n- [x] Node and Gateway do store shared keys only on RAM. They are lost on power cycle. This protects system against flash reading attack. All nodes attach automatically with a new shared key after gateway is switched on\n\n- [x] Downlink available. If deep sleep is used on sensor nodes, it is queued and sent just after node send a data message\n\n- [x] Optional sleep mode management. In this case key and context has to be stored temporally. Normally RTC memory is the recommended place, and it is the one currently implemented. \n**Note**: There is the alternative to store context on flash memory so that node can be completely switched off between massages without requiring a new registering. Notice that on every received or sent message node updates this context  so consider that a high number of writes in flash may degrade it in the medium term. If messages counters are disabled in configuration the number of writes is decreased drastically but this reduces security level as it makes possible to repeat messages.\n\n- [x] Initial configuration over WiFi portal on each device\n\n- [x] Node configuration while in service using control downlink commands\n\n- [ ] OTA over WiFi. Question: Is it really useful? Place an issue explaining an use case.\n\n- [x] OTA over MQTT/ESP-NOW. Check [OTA script guide](docs/node-ota-update.md).\n\n- [x] Node identification by using a flashing LED. This is useful when you have a bunch of nodes together :D\n\n- [x] Broadcast messages that go to all nodes. This is implemented by sending messages to broadcast address (ff:ff:ff:ff:ff:ff in esp-now). Only nodes that are always listening are able to receive these messages, they are not queued. In order to send a broadcast message using EnigmaIOTGatewayMQTT you may use `<network name>/broadcast/...` as topi beginning. Any control or data message will arrive all nodes that have broadcast enabled. Control messages are processed normally except OTA and SET NAME, which are ignored. Data messages are passed to user code for processing.\n\n  A shared encryption key is used to encrypt broadcast messages. It is generated automatically by Gateway on every restart. \n\n  If a node registers with broadcast flag active, gateway sends broadcast key using this message just after successful registration. Broadcast key is automatically generated on gateway on boot, so it will be different after every restart. Nodes will be synchronized as soon they register again.\n\n  A node may not send broadcast messages, only gateway can.\n\n- [x] Both gateway or nodes may run on ESP32 or ESP8266\n\n- [x] Simple REST API to get information and send commands to gateway and nodes. Check [api.md](docs/api.md)\n\n- [x] Node library includes methods to configure [Home Assistant](https://www.home-assistant.io) automatic integration using [MQTT discovery](https://www.home-assistant.io/docs/mqtt/discovery/)\n\n## Technical background\n\nIf you want to know the internals about EnigmaIOT check [Technical Background Guide](docs/technical-background.md).\n\n"
  },
  {
    "path": "src/Comms_hal.h",
    "content": "/**\n  * @file Comms_hal.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Generic communication system abstraction layer\n  *\n  * This is the interface that communication definition should implement to be used as layer 1 on EnigmaIoT\n  */\n#ifndef _COMMS_HAL_h\n#define _COMMS_HAL_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n#include \"EnigmaIoTconfig.h\"\n\n  /**\n\t* @brief Peer role on communication\n\t*/\nenum peerType_t {\n\tCOMM_NODE = 0, /**< Peer acts as a node */\n\tCOMM_GATEWAY = 1 /**< Peer acts as a gateway */\n};\n\ntypedef struct {\n    uint8_t dstAddress[ENIGMAIOT_ADDR_LEN]; /**< Message topic*/\n    uint8_t payload[MAX_MESSAGE_LENGTH]; /**< Message payload*/\n    size_t payload_len; /**< Payload length*/\n} comms_queue_item_t;\n\n/**\n      * @brief Received data callback definition\n      * @param address Address of the sender\n      * @param data Received data\n      * @param len Received data length\n      * @param rssi Received signal strength\n*/\ntypedef void (*comms_hal_rcvd_data)(uint8_t* address, uint8_t* data, uint8_t len, signed int rssi);\n\n/**\n      * @brief Sent data status callback definition\n      * @param address Destination address\n      * @param status Status of the sent data. 0 if success, 1 if error\n*/\ntypedef void (*comms_hal_sent_data)(uint8_t* address, uint8_t status);\n\n/**\n  * @brief Interface for communication subsystem abstraction layer definition\n  */\nclass Comms_halClass {\npublic:\n\tstatic const size_t COMMS_HAL_MAX_MESSAGE_LENGTH = 0; ///< @brief Maximum message length\n\tstatic const uint8_t COMMS_HAL_ADDR_LEN = 1; ///< @brief Address length\n\nprotected:\n\tuint8_t gateway[COMMS_HAL_ADDR_LEN]; ///< @brief Gateway address\n\tuint8_t channel; ///< @brief Comms channel to be used\n\n\tcomms_hal_rcvd_data dataRcvd = 0; ///< @brief Pointer to a function to be called on every received message\n\tcomms_hal_sent_data sentResult = 0; ///< @brief Pointer to a function to be called to notify last sending status\n\tpeerType_t _ownPeerType; ///< @brief Stores peer type, node or gateway\n\n\t/**\n\t  * @brief Communication subsistem initialization\n\t  * @param peerType Role that peer plays into the system, node or gateway.\n\t  */\n\tvirtual void initComms (peerType_t peerType) = 0;\n\n\npublic:\n    Comms_halClass () {}\n    \n\t/**\n\t  * @brief Setup communication environment and establish the connection from node to gateway\n\t  * @param gateway Address of gateway. It may be `NULL` in case this is used in the own gateway\n\t  * @param channel Establishes a channel for the communication. Its use depends on actual communications subsystem\n\t  * @param peerType Role that peer plays into the system, node or gateway.\n\t  */\n\tvirtual void begin (uint8_t* gateway, uint8_t channel, peerType_t peerType = COMM_NODE) = 0;\n\n\t/**\n\t  * @brief Terminates communication and closes all connectrions\n\t  */\n\tvirtual void stop () = 0;\n\n\t/**\n\t  * @brief Sends data to the other peer\n\t  * @param da Destination address to send the message to\n\t  * @param data Data buffer that contain the message to be sent\n\t  * @param len Data length in number of bytes\n\t  * @return Returns sending status. 0 for success, any other value to indicate an error.\n\t  */\n\tvirtual int32_t send (uint8_t* da, uint8_t* data, int len) = 0;\n\n\t/**\n\t  * @brief Attach a callback function to be run on every received message\n\t  * @param dataRcvd Pointer to the callback function\n\t  */\n\tvirtual void onDataRcvd (comms_hal_rcvd_data dataRcvd) = 0;\n\n\t/**\n\t  * @brief Attach a callback function to be run after sending a message to receive its status\n\t  * @param dataRcvd Pointer to the callback function\n\t  */\n\tvirtual void onDataSent (comms_hal_sent_data dataRcvd) = 0;\n\n\t/**\n\t  * @brief Get address length that a specific communication subsystem uses\n\t  * @return Returns number of bytes that is used to represent an address\n\t  */\n\tvirtual uint8_t getAddressLength () = 0;\n\n    /**\n      * @brief Sends next message in the queue\n      */\n    virtual void handle () = 0;\n\n    /**\n      * @brief Enables or disables transmission of queued messages. Used to disable communication during wifi scan\n      * @param enable `true` to enable transmission, `false` to disable it\n      */\n    virtual void enableTransmit (bool enable) = 0;\n};\n\n#endif\n\n"
  },
  {
    "path": "src/EnigmaIOTGateway.cpp",
    "content": "/**\n  * @file EnigmaIOTGateway.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Library to build a gateway for EnigmaIoT system\n  */\n\n#include \"EnigmaIOTGateway.h\"\n#include <FS.h>\n#include \"libb64/cdecode.h\"\n#include <ArduinoJson.h>\n#ifdef ESP8266\n#include <Updater.h>\n#elif defined ESP32\n#include <Update.h>\n#include <esp_wifi.h>\n#endif\n\n#include \"cryptModule.h\"\n#include \"helperFunctions.h\"\n#include <cstddef>\n#include <cstdint>\n#include <regex>\n\n#if SUPPORT_HA_DISCOVERY\n#include \"haEntity.h\"\n#include \"haBinarySensor.h\"\n#include \"haCover.h\"\n#include \"haSensor.h\"\n#include \"haSwitch.h\"\n#include \"haTrigger.h\"\n#endif // SUPPORT_HA_DISCOVERY\n\nconst char CONFIG_FILE[] = \"/config.json\";\n\nbool shouldSave = false;\nbool OTAongoing = false;\ntime_t lastOTAmsg = 0;\n\n\nvoid EnigmaIOTGatewayClass::doSave (void) {\n\tDEBUG_INFO (\"Configuration saving activated\");\n\tshouldSave = true;\n}\n\nvoid EnigmaIOTGatewayClass::doResetConfig (void) {\n    DEBUG_INFO (\"Configuration reset started\");\n    if (FILESYSTEM.remove (CONFIG_FILE)){\n        DEBUG_WARN (\"Configuration file removed\");\n    }\n    ESP.restart ();\n}\n\nbool EnigmaIOTGatewayClass::getShouldSave () {\n\treturn (shouldSave);\n}\n\nvoid EnigmaIOTGatewayClass::setTxLed (uint8_t led, time_t onTime) {\n\tthis->txled = led;\n\ttxLedOnTime = onTime;\n\tpinMode (txled, OUTPUT);\n\tdigitalWrite (txled, LED_OFF);\n}\n\nvoid EnigmaIOTGatewayClass::setRxLed (uint8_t led, time_t onTime) {\n\tthis->rxled = led;\n\trxLedOnTime = onTime;\n\tpinMode (rxled, OUTPUT);\n\tdigitalWrite (rxled, LED_OFF);\n}\n\nconst void* memstr (const void* str, size_t str_size,\n\t\t\t\t\tconst char* target, size_t target_size) {\n\tconst uint8_t* pointer = (const uint8_t*)str;\n\tfor (size_t i = 0; i != str_size - target_size; ++i) {\n\t\tif (!memcmp (pointer + i, target, target_size)) {\n\t\t\treturn pointer + i;\n\t\t}\n\t}\n\n\treturn NULL;\n}\n\nbool buildGetVersion (uint8_t* data, size_t& dataLen, const uint8_t* inputData, size_t inputLen) {\n\tDEBUG_DBG (\"Build 'Get Version' message from: %s\", printHexBuffer (inputData, inputLen));\n\tif (dataLen < 1) {\n\t\treturn false;\n\t}\n\tdata[0] = (uint8_t)control_message_type::VERSION;\n\tdataLen = 1;\n\treturn true;\n}\n\nbool buildGetSleep (uint8_t* data, size_t& dataLen, const uint8_t* inputData, size_t inputLen) {\n\tDEBUG_VERBOSE (\"Build 'Get Sleep' message from: %s\", printHexBuffer (inputData, inputLen));\n\tif (dataLen < 1) {\n\t\treturn false;\n\t}\n\tdata[0] = (uint8_t)control_message_type::SLEEP_GET;\n\tdataLen = 1;\n\treturn true;\n}\n\nbool buildSetIdentify (uint8_t* data, size_t& dataLen, const uint8_t* inputData, size_t inputLen) {\n\tDEBUG_VERBOSE (\"Build 'Set Identify' message from: %s\", printHexBuffer (inputData, inputLen));\n\tif (dataLen < 1) {\n\t\treturn false;\n\t}\n\tdata[0] = (uint8_t)control_message_type::IDENTIFY;\n\tdataLen = 1;\n\treturn true;\n}\n\n// bool buildGetRSSI (uint8_t* data, size_t& dataLen, const uint8_t* inputData, size_t inputLen) {\n// \tDEBUG_VERBOSE (\"Build 'Get RSSI' message from: %s\", printHexBuffer (inputData, inputLen));\n// \tif (dataLen < 1) {\n// \t\treturn false;\n// \t}\n// \tdata[0] = (uint8_t)control_message_type::RSSI_GET;\n// \tdataLen = 1;\n// \treturn true;\n// }\n\nbool buildGetName (uint8_t* data, size_t& dataLen, const uint8_t* inputData, size_t inputLen) {\n\tDEBUG_VERBOSE (\"Build 'Get Node Name and Address' message from: %s\", printHexBuffer (inputData, inputLen));\n\tif (dataLen < 1) {\n\t\treturn false;\n\t}\n\tdata[0] = (uint8_t)control_message_type::NAME_GET;\n\tdataLen = 1;\n\treturn true;\n}\n\nbool buildSetName (uint8_t* data, size_t& dataLen, const uint8_t* inputData, size_t inputLen) {\n\tDEBUG_VERBOSE (\"Build 'Set Node Name' message from: %s\", printHexBuffer (inputData, inputLen));\n\tif (dataLen < NODE_NAME_LENGTH + 1) {\n\t\tDEBUG_ERROR (\"Not enough space to build message\");\n\t\treturn false;\n\t}\n\tif (inputLen < 2 || inputLen > NODE_NAME_LENGTH) {\n\t\tDEBUG_ERROR (\"Name too short\");\n\t\treturn false;\n\t}\n\tdata[0] = (uint8_t)control_message_type::NAME_SET;\n\tmemcpy (data + 1, inputData, inputLen);\n\tdataLen = 1 + inputLen;\n\treturn true;\n}\n\nbool buildSetResetConfig (uint8_t* data, size_t& dataLen, const uint8_t* inputData, size_t inputLen) {\n\tDEBUG_VERBOSE (\"Build 'Reset Config' message from: %s\", printHexBuffer (inputData, inputLen));\n\tif (dataLen < 1) {\n\t\treturn false;\n\t}\n\tdata[0] = (uint8_t)control_message_type::RESET;\n\tdataLen = 1;\n\treturn true;\n}\n\nbool buildRestartNode (uint8_t* data, size_t& dataLen, const uint8_t* inputData, size_t inputLen) {\n\tDEBUG_VERBOSE (\"Build 'Restart Node' message from: %s\", printHexBuffer (inputData, inputLen));\n\tif (dataLen < 1) {\n\t\treturn false;\n\t}\n\tdata[0] = (uint8_t)control_message_type::RESTART_NODE;\n\tdataLen = 1;\n\treturn true;\n}\n\nbool buildSendBrcastKey (uint8_t* data, size_t& dataLen, const uint8_t* key, size_t keyLen) {\n\tDEBUG_VERBOSE (\"Build 'Send Broadcast Key' message from: %s\", printHexBuffer (key, keyLen));\n\tif (key && keyLen == KEY_LENGTH) {\n\t\tdata[0] = (uint8_t)control_message_type::BRCAST_KEY;\n\t\tmemcpy (data + 1, key, keyLen);\n\t\tdataLen = keyLen + 1;\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n}\n\nint getNextNumber (char*& data, size_t& len/*, char* &position*/) {\n\tchar strNum[10];\n\tint number;\n\tchar* tempData = data;\n\tsize_t tempLen = len;\n\n\tfor (int i = 0; i < 10; i++) {\n\t\t//DEBUG_DBG (\"Processing char: %c\", tempData[i]);\n\t\tif (tempData[i] != ',') {\n\t\t\tif (tempData[i] >= '0' && tempData[i] <= '9') {\n\t\t\t\tstrNum[i] = tempData[i];\n\t\t\t} else {\n\t\t\t\tDEBUG_ERROR (\"OTA message format error. Message number not found\");\n\t\t\t\tnumber = -1;\n\t\t\t}\n\t\t\tif (i == 9) {\n\t\t\t\tDEBUG_ERROR (\"OTA message format error, separator not found\");\n\t\t\t\tnumber = -2;\n\t\t\t}\n\t\t} else {\n\t\t\tif (i == 0) {\n\t\t\t\tDEBUG_ERROR (\"OTA message format error, cannot find a number\");\n\t\t\t\tnumber = -3;\n\t\t\t}\n\t\t\tstrNum[i] = '\\0';\n\t\t\t//DEBUG_DBG (\"Increment pointer by %d\", i);\n\t\t\ttempData += i;\n\t\t\ttempLen -= i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (tempData[0] == ',' && tempLen > 0) {\n\t\ttempData++;\n\t\ttempLen--;\n\t} else {\n\t\tDEBUG_WARN (\"OTA message format warning. separator not found\");\n\t}\n\tnumber = atoi (strNum);\n\tdata = tempData;\n\tlen = tempLen;\n\tDEBUG_DBG (\"Extracted number %d\", number);\n\tDEBUG_DBG (\"Resulting data %s\", data);\n\t//DEBUG_WARN (\"Resulting length %d\", len);\n\treturn number;\n}\n\nbool isHexChar (char c) {\n\t//DEBUG_DBG (\"Is Hex Char %c\", c);\n\treturn (\n\t\t(c >= '0' && c <= '9')\n\t\t|| (c >= 'a' && c <= 'f')\n\t\t//|| c >= 'A' && c <= 'F'\n\t\t);\n}\n\nbool buildOtaMsg (uint8_t* data, size_t& dataLen, const uint8_t* inputData, size_t inputLen) {\n\tchar* payload;\n\tsize_t payloadLen;\n\tint number;\n\tuint8_t* tempData = data;\n\n\tDEBUG_VERBOSE (\"Build 'OTA' message from: %s\", inputData);\n\n\tpayload = (char*)inputData;\n\tpayloadLen = inputLen;\n\n\t// Get message number\n\tnumber = getNextNumber (payload, payloadLen);\n\tif (number < 0) {\n\t\treturn false;\n\t}\n\tuint16_t msgIdx = number;\n\n\ttempData[0] = (uint8_t)control_message_type::OTA;\n\ttempData++;\n\tmemcpy (tempData, &msgIdx, sizeof (uint16_t));\n\tsize_t decodedLen = sizeof (uint8_t) + sizeof (uint16_t);\n\ttempData += sizeof (uint16_t);\n\n\tDEBUG_INFO (\"OTA message number %u\", msgIdx);\n\t//DEBUG_INFO (\"Payload len = %u\", payloadLen);\n\t//DEBUG_INFO (\"Payload data: %s\", payload);\n\n\tif (msgIdx > 0) {\n\t\tdecodedLen += base64_decode_chars (payload, payloadLen, (char*)(data + 1 + sizeof (uint16_t)));\n\t\tlastOTAmsg = millis ();\n\t} else {\n\t\tOTAongoing = true;\n\t\tlastOTAmsg = millis ();\n\n\t\tif (inputLen < 39) {\n\t\t\tDEBUG_ERROR (\"OTA message format error. Message #0 too short to be a MD5 string\");\n\t\t\treturn false;\n\t\t}\n\n\t\t// Get firmware size\n\t\tnumber = getNextNumber (payload, payloadLen);\n\t\tif (number < 0) {\n\t\t\treturn false;\n\t\t}\n\t\tuint32_t fileSize = number;\n\n\t\tmemcpy (tempData, &fileSize, sizeof (uint32_t));\n\t\ttempData += sizeof (uint32_t);\n\t\tdecodedLen += sizeof (uint32_t);\n\n\n\t\t// Get number of chunks\n\t\tnumber = getNextNumber (payload, payloadLen);\n\t\tif (number < 0) {\n\t\t\treturn false;\n\t\t}\n\t\tuint16_t msgNum = number;\n\n\t\tmemcpy (tempData, &msgNum, sizeof (uint16_t));\n\t\ttempData += sizeof (uint16_t);\n\t\tdecodedLen += sizeof (uint16_t);\n\n\t\tDEBUG_WARN (\"Number of OTA chunks %u\", msgNum);\n\t\tDEBUG_WARN (\"OTA length = %u bytes\", fileSize);\n\t\t//DEBUG_INFO (\"Payload data: %s\", payload);\n\n\t\tif (payloadLen < 32) {\n\t\t\tDEBUG_ERROR (\"OTA message format error. MD5 is too short: %d\", payloadLen);\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (size_t i = 0; i < 32; i++) {\n\t\t\tif (!isHexChar (payload[i])) {\n\t\t\t\tDEBUG_ERROR (\"OTA message format error. MD5 string has no valid format\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t*tempData = (uint8_t)payload[i];\n\t\t\ttempData++;\n\t\t\tdecodedLen++;\n\t\t}\n\n\t\tDEBUG_VERBOSE (\"Payload data: %s\", printHexBuffer (data, decodedLen));\n\t}\n\n\tif ((decodedLen) > MAX_MESSAGE_LENGTH) {\n\t\tDEBUG_ERROR (\"OTA message too long. %u bytes.\", decodedLen);\n\t\treturn false;\n\t}\n\tdataLen = decodedLen;\n\tDEBUG_VERBOSE (\"Payload has %u bytes of data: %s\", dataLen, printHexBuffer (data, dataLen));\n\treturn true;\n}\n\nbool buildSetSleep (uint8_t* data, size_t& dataLen, const uint8_t* inputData, size_t inputLen) {\n\tDEBUG_VERBOSE (\"Build 'Set Sleep' message from: %s\", printHexBuffer (inputData, inputLen));\n\tif (dataLen < 5) {\n\t\tDEBUG_ERROR (\"Not enough space to build message\");\n\t\treturn false;\n\t}\n\n\tif (inputLen <= 1) {\n\t\tDEBUG_ERROR (\"Set sleep time value is empty\");\n\t\treturn false;\n\t}\n\n\tfor (unsigned int i = 0; i < (inputLen - 1); i++) { // Check if all digits are number\n\t\tif (inputData[i] < 30 || inputData[i] > '9') {\n\t\t\tDEBUG_ERROR (\"Set sleep time value is not a number on position %d: %d\", i, inputData[i]);\n\t\t\treturn false;\n\t\t}\n\t}\n\tif (inputData[inputLen - 1] != 0) { // Array should end with \\0\n\t\tDEBUG_ERROR (\"Set sleep time value does not end with \\\\0\");\n\t\treturn false;\n\t}\n\n\tuint32_t sleepTime = atoi ((char*)inputData);\n\n\tdata[0] = (uint8_t)control_message_type::SLEEP_SET;\n\tmemcpy (data + 1, &sleepTime, sizeof (uint32_t));\n\tdataLen = 5;\n\treturn true;\n}\n\nvoid EnigmaIOTGatewayClass::sendNodeRSSI (Node* node) {\n    if (node && node->getStatus () == REGISTERED) {\n        char* nodeName = node->getNodeName ();\n        uint8_t* macaddr = node->getMacAddress ();\n        DEBUG_VERBOSE (\"Get RSSI for node %s. Last RSSI: %d dBm. Channel: %u\", nodeName ? nodeName : \"NO NAME\", node->getRSSI (), WiFi.channel());\n        uint8_t payload[3];\n        payload[0] = control_message_type::RSSI_ANS;\n        payload[1] = (int8_t)node->getRSSI ();\n        payload[2] = WiFi.channel ();\n        uint8_t len = 3;\n        if (notifyData) {\n            notifyData (macaddr, payload, len, 0, true, ENIGMAIOT, nodeName);\n        }\n    }\n}\n\nbool EnigmaIOTGatewayClass::sendDownstream (uint8_t* mac, const uint8_t* data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t encoding, char* nodeName) {\n\tNode* node;\n\tif (nodeName) {\n\t\tnode = nodelist.getNodeFromName (nodeName);\n\t\tif (node) {\n            DEBUG_DBG (\"Message to node %s with address %s\", nodeName, mac2str (node->getMacAddress ()));\n\t\t}\n\t} else {\n\t\tnode = nodelist.getNodeFromMAC (mac);\n\t}\n\n\tuint8_t downstreamData[MAX_MESSAGE_LENGTH];\n\n\tif (len == 0 && (controlData == USERDATA_GET || controlData == USERDATA_SET))\n\t\treturn false;\n\n\tDEBUG_VERBOSE (\"Downstream: %s\", printHexBuffer (data, len));\n\tDEBUG_DBG (\"Downstream message type 0x%02X\", controlData);\n\n\tsize_t dataLen = MAX_MESSAGE_LENGTH;\n\n\tswitch (controlData) {\n\tcase control_message_type::VERSION:\n\t\tif (!buildGetVersion (downstreamData, dataLen, data, len)) {\n\t\t\tDEBUG_ERROR (\"Error building get Version message\");\n\t\t\treturn false;\n\t\t}\n\t\tDEBUG_VERBOSE (\"Get Version. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n\t\tbreak;\n\tcase control_message_type::SLEEP_GET:\n\t\tif (!buildGetSleep (downstreamData, dataLen, data, len)) {\n\t\t\tDEBUG_ERROR (\"Error building get Sleep message\");\n\t\t\treturn false;\n\t\t}\n\t\tDEBUG_VERBOSE (\"Get Sleep. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n\t\tbreak;\n\tcase control_message_type::SLEEP_SET:\n\t\tif (!buildSetSleep (downstreamData, dataLen, data, len)) {\n\t\t\tDEBUG_ERROR (\"Error building set Sleep message\");\n\t\t\treturn false;\n\t\t}\n\t\tDEBUG_VERBOSE (\"Set Sleep. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n\t\tbreak;\n\tcase control_message_type::OTA:\n\t\tif (!buildOtaMsg (downstreamData, dataLen, data, len)) {\n\t\t\tDEBUG_ERROR (\"Error building OTA message\");\n\t\t\treturn false;\n\t\t}\n\t\tDEBUG_VERBOSE (\"OTA message. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n\t\tbreak;\n\tcase control_message_type::IDENTIFY:\n\t\tif (!buildSetIdentify (downstreamData, dataLen, data, len)) {\n\t\t\tDEBUG_ERROR (\"Error building Identify message\");\n\t\t\treturn false;\n\t\t}\n\t\tDEBUG_VERBOSE (\"Identify message. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n\t\tbreak;\n\tcase control_message_type::RESET:\n\t\tif (!buildSetResetConfig (downstreamData, dataLen, data, len)) {\n\t\t\tDEBUG_ERROR (\"Error building Reset message\");\n\t\t\treturn false;\n\t\t}\n\t\tDEBUG_VERBOSE (\"Reset Config message. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n\t\tbreak;\n    case control_message_type::RSSI_GET:\n        sendNodeRSSI (node);\n        return true; // No more things to do\n        // if (node->getStatus () == REGISTERED) {\n        //     char* nodeName = node->getNodeName ();\n        //     DEBUG_WARN (\"Get RSSI for node %s. Last RSSI: %d\", nodeName, node->getRSSI ());\n        //     uint8_t* macaddr = node->getMacAddress ();\n        //     uint8_t payload[3]; // TODO: Fill in RSSI packet\n        //     payload[0] = control_message_type::RSSI_ANS;\n        //     payload[1] = (int8_t)node->getRSSI ();\n        //     payload[2] = gwConfig.channel;\n        //     uint8_t len = 3;\n        //     if (notifyData) {\n        //         notifyData (macaddr, payload, len, 0, true, ENIGMAIOT, nodeName ? nodeName : NULL);\n        //     }\n        // }\n        // if (!buildGetRSSI (downstreamData, dataLen, data, len)) {\n        // \tDEBUG_ERROR (\"Error building get RSSI message\");\n\t\t// \treturn false;\n\t\t// }\n        // DEBUG_VERBOSE (\"Get RSSI message. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n        break;\n\tcase control_message_type::NAME_GET:\n\t\tif (!buildGetName (downstreamData, dataLen, data, len)) {\n\t\t\tDEBUG_ERROR (\"Error building get name message\");\n\t\t\treturn false;\n\t\t}\n\t\tDEBUG_VERBOSE (\"Get name message. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n\t\tbreak;\n\tcase control_message_type::NAME_SET:\n\t\tif (!buildSetName (downstreamData, dataLen, data, len)) {\n\t\t\tDEBUG_ERROR (\"Error building set name message\");\n\t\t\treturn false;\n\t\t}\n\t\tDEBUG_VERBOSE (\"Set name message. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n\t\tbreak;\n\tcase control_message_type::RESTART_NODE:\n\t\tif (!buildRestartNode (downstreamData, dataLen, data, len)) {\n\t\t\tDEBUG_ERROR (\"Error building restart node message\");\n\t\t\treturn false;\n\t\t}\n\t\tDEBUG_VERBOSE (\"Restart node message. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n\t\tbreak;\n\tcase control_message_type::BRCAST_KEY:\n\t\tif (!buildSendBrcastKey (downstreamData, dataLen, nodelist.getBroadcastNode ()->getEncriptionKey (), KEY_LENGTH)) {\n\t\t\tDEBUG_ERROR (\"Error building broadcast key message\");\n\t\t\treturn false;\n\t\t}\n\t\tDEBUG_VERBOSE (\"Broadcast key message. Len: %d Data %s\", dataLen, printHexBuffer (downstreamData, dataLen));\n\t\tbreak;\n\tcase control_message_type::USERDATA_GET:\n\t\tDEBUG_INFO (\"Data message GET\");\n\t\tbreak;\n\tcase control_message_type::USERDATA_SET:\n\t\tDEBUG_INFO (\"Data message SET\");\n\t\tbreak;\n\tdefault:\n\t\treturn false;\n\t}\n\n\n\tDEBUG_INFO (\"Send downstream\");\n\n\tif (node) {\n\t\tif (controlData != control_message_type::USERDATA_GET && controlData != control_message_type::USERDATA_SET)\n\t\t\treturn downstreamDataMessage (node, downstreamData, dataLen, controlData);\n\t\telse if (controlData == control_message_type::OTA) {\n\t\t\tif (node->getSleepy ()) {\n\t\t\t\tDEBUG_ERROR (\"Node must be in non sleepy mode to receive OTA messages\");\n\t\t\t\treturn false;\n\t\t\t} else\n\t\t\t\treturn downstreamDataMessage (node, data, len, controlData);\n\t\t} else\n\t\t\treturn downstreamDataMessage (node, data, len, controlData, encoding);\n\t} else {\n\t\t//char addr[ENIGMAIOT_ADDR_LEN * 3];\n\t\tDEBUG_ERROR (\"Downlink destination %s not found\", nodeName ? nodeName : mac2str (mac));\n\t\treturn false;\n\t}\n}\n\nbool EnigmaIOTGatewayClass::configWiFiManager () {\n\tserver = new AsyncWebServer (80);\n\tdns = new DNSServer ();\n\twifiManager = new AsyncWiFiManager (server, dns);\n\n\tchar networkKey[33] = \"\";\n\t//char networkName[NETWORK_NAME_LENGTH] = \"\";\n\tchar channel[4];\n\t//String (gwConfig.channel).toCharArray (channel, 4);\n\tsnprintf (channel, 4, \"%u\", gwConfig.channel);\n\n\t//AsyncWiFiManager wifiManager (&server, &dns);\n\tAsyncWiFiManagerParameter netNameParam (\"netname\", \"Network Name\", gwConfig.networkName, (int)NETWORK_NAME_LENGTH - 1, \"required type=\\\"text\\\" pattern=\\\"^[^/\\\\\\\\]+$\\\" maxlength=20\");\n\tAsyncWiFiManagerParameter netKeyParam (\"netkey\", \"NetworkKey\", networkKey, 33, \"required type=\\\"password\\\" minlength=\\\"8\\\" maxlength=\\\"32\\\"\");\n\tAsyncWiFiManagerParameter channelParam (\"channel\", \"WiFi Channel\", channel, 4, \"required type=\\\"number\\\" min=\\\"0\\\" max=\\\"13\\\" step=\\\"1\\\"\");\n\n\twifiManager->setCustomHeadElement (\"<style>input:invalid {border: 2px dashed red;input:valid{border: 2px solid black;}</style>\");\n\twifiManager->addParameter (&netKeyParam);\n\twifiManager->addParameter (&channelParam);\n\twifiManager->addParameter (&netNameParam);\n\twifiManager->addParameter (new AsyncWiFiManagerParameter (\"<br>\"));\n\n\tif (notifyWiFiManagerStarted) {\n\t\tnotifyWiFiManagerStarted ();\n\t}\n\n\twifiManager->setDebugOutput (true);\n#if CONNECT_TO_WIFI_AP != 1\n\twifiManager->setBreakAfterConfig (true);\n#endif // CONNECT_TO_WIFI_AP\n\twifiManager->setTryConnectDuringConfigPortal (false);\n\twifiManager->setSaveConfigCallback (doSave);\n\twifiManager->setConfigPortalTimeout (150);\n\n#if CONNECT_TO_WIFI_AP == 1\n\tboolean result = wifiManager->autoConnect (\"EnigmaIoTGateway\", NULL, 3, 2000);\n#else\n\tboolean result = wifiManager->startConfigPortal (\"EnigmaIoTGateway\", NULL);\n\tresult = true; // Force true if this should not connect to a WiFi\n#endif // CONNECT_TO_WIFI_AP\n\n\tDEBUG_INFO (\"==== Config Portal result ====\");\n\tDEBUG_INFO (\"Network Name: %s\", netNameParam.getValue ());\n\tDEBUG_INFO (\"Network Key: %s\", netKeyParam.getValue ());\n\tDEBUG_INFO (\"Channel: %s\", channelParam.getValue ());\n\tDEBUG_INFO (\"Status: %s\", result ? \"true\" : \"false\");\n\tDEBUG_INFO (\"Save config: %s\", shouldSave ? \"yes\" : \"no\");\n\tif (result) {\n\t\tif (shouldSave) {\n\t\t\tbool regexResult;\n#ifdef ESP32\n\t\t\tstd::regex networkNameRegex (\"^[^/\\\\\\\\]+$\");\n\t\t\tregexResult = std::regex_match (netNameParam.getValue (), networkNameRegex);\n#else\n\t\t\tregexResult = true;\n#endif\n\t\t\tif (regexResult) {\n\t\t\t\tstrncpy (this->gwConfig.networkName, netNameParam.getValue (), NETWORK_NAME_LENGTH - 1);\n\t\t\t\tDEBUG_DBG (\"Network name: %s\", gwConfig.networkName);\n\t\t\t} else {\n\t\t\t\tDEBUG_WARN (\"Network name parameter error\");\n\t\t\t\tresult = false;\n\t\t\t}\n\n#ifdef ESP32\n\t\t\tstd::regex netKeyRegex (\"^.{8,32}$\");\n\t\t\tregexResult = std::regex_match (netKeyParam.getValue (), netKeyRegex);\n#endif\n\t\t\tif (regexResult) {\n\t\t\t\tuint8_t keySize = netKeyParam.getValueLength ();\n\t\t\t\tif (keySize > KEY_LENGTH)\n\t\t\t\t\tkeySize = KEY_LENGTH;\n\t\t\t\tconst char* netKey = netKeyParam.getValue ();\n\t\t\t\tif (netKey && (netKey[0] != '\\0')) {// If password is empty, keep the old one\n\t\t\t\t\tmemset (this->gwConfig.networkKey, 0, KEY_LENGTH);\n\t\t\t\t\tmemcpy (this->gwConfig.networkKey, netKey, keySize);\n\t\t\t\t\tmemcpy (this->plainNetKey, netKey, keySize);\n\t\t\t\t\tCryptModule::getSHA256 (this->gwConfig.networkKey, KEY_LENGTH);\n\t\t\t\t\tDEBUG_DBG (\"Raw network Key: %s\", printHexBuffer (this->gwConfig.networkKey, KEY_LENGTH));\n\t\t\t\t} else {\n\t\t\t\t\tDEBUG_INFO (\"Network key password field empty. Keeping the old one\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tDEBUG_WARN (\"Network key parameter error\");\n\t\t\t\tresult = false;\n\t\t\t}\n\n#ifdef ESP32\n\t\t\tstd::regex channelRegex (\"^([0-9]|[0-1][0-3])$\");\n\t\t\tregexResult = std::regex_match (channelParam.getValue (), channelRegex);\n#endif\n\t\t\tif (regexResult) {\n\t\t\t\tthis->gwConfig.channel = atoi (channelParam.getValue ());\n\t\t\t\tDEBUG_DBG (\"WiFi ESP-NOW channel: %d\", this->gwConfig.channel);\n\t\t\t} else {\n\t\t\t\tDEBUG_WARN (\"Network name parameter error\");\n\t\t\t\tresult = false;\n\t\t\t}\n\t\t} else {\n\t\t\tDEBUG_DBG (\"Configuration does not need to be saved\");\n\t\t}\n\t} else {\n\t\tDEBUG_ERROR (\"WiFi connection unsuccessful. Restarting\");\n\t\tESP.restart ();\n\t}\n\n\tif (notifyWiFiManagerExit) {\n\t\tnotifyWiFiManagerExit (result);\n\t}\n\n\tdelete (server);\n\tdelete (dns);\n\tdelete (wifiManager);\n\n\treturn result;\n}\n\nbool EnigmaIOTGatewayClass::loadFlashData () {\n    //FILESYSTEM.remove (CONFIG_FILE); // Only for testing\n\tbool json_correct = false;\n\n\tif (FILESYSTEM.exists (CONFIG_FILE)) {\n\n\t\tDEBUG_DBG (\"Opening %s file\", CONFIG_FILE);\n        File configFile = FILESYSTEM.open (CONFIG_FILE, \"r\");\n\t\tif (configFile) {\n\t\t\t//size_t size = configFile.size ();\n            DEBUG_DBG (\"%s opened. %u bytes\", CONFIG_FILE, configFile.size ());\n\n\t\t\tconst size_t capacity = JSON_OBJECT_SIZE (4) + 160;\n\t\t\tDynamicJsonDocument doc (capacity);\n\n\t\t\tDeserializationError error = deserializeJson (doc, configFile);\n\t\t\tif (error) {\n\t\t\t\tDEBUG_ERROR (\"Failed to parse file\");\n\t\t\t} else {\n\t\t\t\tDEBUG_DBG (\"JSON file parsed\");\n\t\t\t}\n\n            configFile.close ();\n\n            if (doc.containsKey (\"type\")) {\n                if (!strcmp (\"gw\", doc[\"type\"])) {\n\n                    if (doc.containsKey (\"channel\") && doc.containsKey (\"networkKey\")\n                        && doc.containsKey (\"networkName\")) {\n                        json_correct = true;\n                    }\n                } else {\n                    FILESYSTEM.remove (CONFIG_FILE);\n                    DEBUG_ERROR (\"Wrong configuration. Removing file %s\", CONFIG_FILE);\n                    return false;\n                }\n            }\n\n\t\t\tgwConfig.channel = doc[\"channel\"].as<int> ();\n\t\t\tstrncpy ((char*)gwConfig.networkKey, doc[\"networkKey\"] | \"\", sizeof (gwConfig.networkKey));\n\t\t\tstrncpy (gwConfig.networkName, doc[\"networkName\"] | \"\", sizeof (gwConfig.networkName));\n\n\t\t\tif (json_correct) {\n\t\t\t\tDEBUG_VERBOSE (\"Gateway configuration successfuly read\");\n\t\t\t}\n\t\t\tDEBUG_DBG (\"==== EnigmaIOT Gateway Configuration ====\");\n\t\t\tDEBUG_DBG (\"Network name: %s\", gwConfig.networkName);\n\t\t\tDEBUG_DBG (\"WiFi channel: %u\", gwConfig.channel);\n\t\t\tDEBUG_VERBOSE (\"Network key: %s\", gwConfig.networkKey);\n\t\t\tstrncpy (plainNetKey, (char*)gwConfig.networkKey, KEY_LENGTH);\n\t\t\tCryptModule::getSHA256 (gwConfig.networkKey, KEY_LENGTH);\n\t\t\tDEBUG_VERBOSE (\"Raw Network key: %s\", printHexBuffer (gwConfig.networkKey, KEY_LENGTH));\n\n#if DEBUG_LEVEL >= DBG\n\t\t\tchar* output;\n\t\t\tsize_t json_len = measureJsonPretty (doc) + 1;\n\t\t\toutput = (char*)malloc (json_len);\n\t\t\tserializeJsonPretty (doc, output, json_len);\n\n\t\t\tDEBUG_DBG (\"JSON file %s\", output);\n\t\t\tfree (output);\n#endif\n\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Error opening %s\", CONFIG_FILE);\n\t\t}\n\t} else {\n\t\tDEBUG_WARN (\"%s do not exist\", CONFIG_FILE);\n        //FILESYSTEM.format (); // Testing only\n\t\t//WiFi.begin (\"0\", \"0\"); // Delete WiFi credentials\n\t\t//DEBUG_WARN (\"Dummy STA config loaded\");\n\t\t//return false;\n\t}\n\n\tif (!json_correct) {\n\t\tWiFi.begin (\"0\", \"0\"); // Delete WiFi credentials\n\t\tDEBUG_WARN (\"Dummy STA config loaded\");\n\t}\n\treturn json_correct;\n}\n\nbool EnigmaIOTGatewayClass::saveFlashData () {\n    File configFile = FILESYSTEM.open (CONFIG_FILE, \"w\");\n\tif (!configFile) {\n\t\tDEBUG_WARN (\"failed to open config file %s for writing\", CONFIG_FILE);\n\t\treturn false;\n\t}\n\n\tconst size_t capacity = JSON_OBJECT_SIZE (4) + 160;\n\tDynamicJsonDocument doc (capacity);\n\n    doc[\"type\"] = \"gw\";\n\tdoc[\"channel\"] = gwConfig.channel;\n\tdoc[\"networkKey\"] = plainNetKey;\n\tdoc[\"networkName\"] = gwConfig.networkName;\n\n\tif (serializeJson (doc, configFile) == 0) {\n\t\tDEBUG_ERROR (\"Failed to write to file\");\n\t\tconfigFile.close ();\n        //FILESYSTEM.remove (CONFIG_FILE); // Testing only\n\t\treturn false;\n\t}\n\n#if DEBUG_LEVEL >= DBG\n\tchar* output;\n\tsize_t json_len = measureJsonPretty (doc) + 1;\n\toutput = (char*)malloc (json_len);\n\tserializeJsonPretty (doc, output, json_len);\n\n\tDEBUG_DBG (\"\\n%s\", output);\n\n\tfree (output);\n#endif\n\n\tconfigFile.flush ();\n\t//size_t size = configFile.size ();\n\n\tconfigFile.close ();\n\n\t//memset (networkKey, 0, KEY_LENGTH);\n\n    DEBUG_DBG (\"Gateway configuration saved to flash. %u bytes\", configFile.size ());\n\treturn true;\n}\n\nvoid EnigmaIOTGatewayClass::begin (Comms_halClass* comm, uint8_t* networkKey, bool useDataCounter) {\n\tthis->input_queue = new EnigmaIOTRingBuffer<msg_queue_item_t> (MAX_INPUT_QUEUE_SIZE);\n\tthis->comm = comm;\n\tthis->useCounter = useDataCounter;\n\n\tuint8_t broadcastKey[KEY_LENGTH];\n\tnodelist.initBroadcastNode ();\n\tCryptModule::random (broadcastKey, KEY_LENGTH); // Generate random broadcast key\n\tDEBUG_DBG (\"Broadcast key: %s\", printHexBuffer (broadcastKey, KEY_LENGTH));\n\tnodelist.getBroadcastNode ()->setEncryptionKey (broadcastKey);\n\n\tif (networkKey) {\n\t\tmemcpy (this->gwConfig.networkKey, networkKey, KEY_LENGTH);\n\t\tstrncpy (plainNetKey, (char*)networkKey, KEY_LENGTH);\n\t\tCryptModule::getSHA256 (this->gwConfig.networkKey, KEY_LENGTH);\n\t} else {\n        if (!FILESYSTEM.begin ()) {\n\t\t\tDEBUG_ERROR (\"Error mounting flash\");\n            FILESYSTEM.format ();\n\t\t\tDEBUG_ERROR (\"Formatted\");\n\t\t\tESP.restart ();\n\t\t\treturn;\n\t\t}\n\t\tif (!loadFlashData ()) { // Load from flash\n\t\t\tif (configWiFiManager ()) {\n\t\t\t\tif (shouldSave) {\n\t\t\t\t\tDEBUG_DBG (\"Got configuration. Storing\");\n\t\t\t\t\tif (saveFlashData ()) {\n\t\t\t\t\t\tDEBUG_DBG (\"Network Key stored on flash\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tDEBUG_ERROR (\"Error saving data on flash\");\n\t\t\t\t\t}\n\t\t\t\t\tESP.restart ();\n\t\t\t\t} else {\n\t\t\t\t\tDEBUG_INFO (\"Configuration has not to be saved\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tDEBUG_ERROR (\"Configuration error. Restarting\");\n\t\t\t\tESP.restart ();\n\t\t\t}\n\t\t} else {\n\t\t\tDEBUG_INFO (\"Configuration loaded from flash\");\n\t\t}\n\n\t\tinitWiFi (gwConfig.channel, gwConfig.networkName, plainNetKey, COMM_GATEWAY);\n\t\tcomm->begin (NULL, gwConfig.channel, COMM_GATEWAY);\n\t\tcomm->onDataRcvd (rx_cb);\n\t\tcomm->onDataSent (tx_cb);\n\n#if ENABLE_REST_API\n        DEBUG_INFO (\"GW API started\");\n\t\tGwAPI.begin ();\n#endif\n\t}\n}\n\nbool EnigmaIOTGatewayClass::addInputMsgQueue (const uint8_t* addr, const uint8_t* msg, size_t len, signed int rssi) {\n\tmsg_queue_item_t message;\n\n\tmessage.len = len;\n\tmemcpy (message.data, msg, len);\n    memcpy (message.addr, addr, ENIGMAIOT_ADDR_LEN);\n    message.rssi = rssi;\n\n#ifdef ESP32\n\tportENTER_CRITICAL (&myMutex);\n#else\n\tnoInterrupts ();\n#endif\n\tinput_queue->push (&message);\n\t//char macstr[ENIGMAIOT_ADDR_LEN * 3];\n\tDEBUG_DBG (\"Message 0x%02X added from %s. Size: %d. RSSI: %d\", message.data[0], mac2str (message.addr), input_queue->size (), message.rssi);\n#ifdef ESP32\n\tportEXIT_CRITICAL (&myMutex);\n#else\n\tinterrupts ();\n#endif\n\treturn true;\n}\n\nmsg_queue_item_t* EnigmaIOTGatewayClass::getInputMsgQueue (msg_queue_item_t* buffer) {\n\n\tmsg_queue_item_t* message;\n#ifdef esp32\n\tportENTER_CRITICAL (&myMutex);\n#else\n\tnoInterrupts ();\n#endif\n\tmessage = input_queue->front ();\n\tif (message) {\n\t\tDEBUG_DBG (\"EnigmaIOT message got from queue. Size: %d\", input_queue->size ());\n\t\tmemcpy (buffer->data, message->data, message->len);\n\t\tmemcpy (buffer->addr, message->addr, ENIGMAIOT_ADDR_LEN);\n        buffer->len = message->len;\n        buffer->rssi = message->rssi;\n        popInputMsgQueue ();\n\t}\n#ifdef esp32\n\tportEXIT_CRITICAL (&myMutex);\n#else\n\tinterrupts ();\n#endif\n\tif (message) {\n\t\treturn buffer;\n\t} else {\n\t\treturn NULL;\n\t}\n}\n\nvoid EnigmaIOTGatewayClass::popInputMsgQueue () {\n\tif (input_queue->pop ()) {\n\t\tDEBUG_DBG (\"EnigmaIOT message pop. Size %d\", input_queue->size ());\n\t}\n}\n\nvoid EnigmaIOTGatewayClass::rx_cb (uint8_t* mac_addr, uint8_t* data, uint8_t len, signed int rssi) {\n    DEBUG_VERBOSE (\"------------------------> RX RSSI: %d dBm\", rssi);\n\tEnigmaIOTGateway.addInputMsgQueue (mac_addr, data, len, rssi);\n}\n\nvoid EnigmaIOTGatewayClass::tx_cb (uint8_t* mac_addr, uint8_t status) {\n\tEnigmaIOTGateway.getStatus (mac_addr, status);\n}\n\nvoid EnigmaIOTGatewayClass::getStatus (uint8_t* mac_addr, uint8_t status) {\n\t//char buffer[ENIGMAIOT_ADDR_LEN * 3];\n#ifdef ESP8266\n\tDEBUG_VERBOSE (\"SENDStatus %s. Peer %s\", status == 0 ? \"OK\" : \"ERROR\", mac2str (mac_addr));\n#elif defined ESP32\n\tDEBUG_VERBOSE (\"SENDStatus %d. Peer %s\", status, mac2str (mac_addr));\n#endif\n}\n\nvoid EnigmaIOTGatewayClass::handle () {\n\t//#ifdef ESP8266\n\tstatic unsigned long rxOntime;\n\tstatic unsigned long txOntime;\n\n\tif (flashRx) {\n\t\tDEBUG_DBG (\"EnigmaIOTGatewayClass::flashrx\");\n\n\t\tif (rxled == txled) {\n\t\t\tflashTx = true;\n\t\t} else {\n\t\t\trxOntime = millis ();\n\t\t\tdigitalWrite (rxled, LED_ON);\n\t\t}\n\t\tflashRx = false;\n\t}\n\n\tif (rxled != txled) {\n\t\tif (/*!digitalRead (rxled) &&*/ millis () - rxOntime > rxLedOnTime) {\n\t\t\tdigitalWrite (rxled, LED_OFF);\n\t\t}\n\t}\n\n\tif (flashTx) {\n\t\ttxOntime = millis ();\n\t\tdigitalWrite (txled, LED_ON);\n\t\tflashTx = false;\n\t}\n\n\tif (/*!digitalRead (txled) &&*/ millis () - txOntime > txLedOnTime) {\n\t\tdigitalWrite (txled, LED_OFF);\n\t}\n\t//#endif\n\n\t\t// Clean up dead nodes\n\tfor (int i = 0; i < NUM_NODES; i++) {\n\t\tNode* node = nodelist.getNodeFromID (i);\n\t\tif (MAX_NODE_INACTIVITY > 0) {\n\t\t\tif (node->isRegistered () && millis () - node->getLastMessageTime () > MAX_NODE_INACTIVITY) {\n\t\t\t\t// TODO. Trigger node expired event\n\t\t\t\tnode->reset ();\n\t\t\t}\n\t\t}\n\t}\n\n\tif (OTAongoing) {\n\t\ttime_t currentTime = millis ();\n\t\tif ((currentTime - lastOTAmsg) > OTA_GW_TIMEOUT) {\n\t\t\tOTAongoing = false;\n\t\t\tDEBUG_WARN (\"OTA ongoing = false\");\n\t\t\tDEBUG_WARN (\"millis() = %u, lastOTAmsg = %u, diff = %d\", currentTime, lastOTAmsg, currentTime - lastOTAmsg);\n\t\t}\n\t}\n\n\t// Check input EnigmaIOT message queue\n\n\tif (!input_queue->empty ()) {\n\t\tmsg_queue_item_t* message;\n\n\t\tmessage = getInputMsgQueue (&tempBuffer);\n\n\t\tif (message) {\n\t\t\tDEBUG_DBG (\"EnigmaIOT input message from queue. MsgType: 0x%02X\", message->data[0]);\n\t\t\tmanageMessage (message->addr, message->data, message->len, message->rssi);\n\t\t}\n\t}\n}\n\nvoid EnigmaIOTGatewayClass::manageMessage (const uint8_t* mac, uint8_t* buf, uint8_t count, signed int rssi) {\n\tNode* node;\n\n    DEBUG_INFO (\"Reveived message. Origin MAC: %02X:%02X:%02X:%02X:%02X:%02X\", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);\n    DEBUG_VERBOSE (\"Received message RSSI: %d dBm\", rssi);\n    DEBUG_VERBOSE (\"Received data: %s\", printHexBuffer (buf, count));\n\n\tif (count <= 1) {\n\t\tDEBUG_WARN (\"Empty message\");\n\t\treturn;\n\t}\n\n\tnode = nodelist.getNewNode (mac);\n\n    if (!node) {\n        DEBUG_WARN (\"No node found\");\n        return;\n    }\n\n    node->setRSSI (rssi);\n    DEBUG_VERBOSE (\"Node RSSI set to %d\", node->getRSSI ());\n\n    flashRx = true;\n\n\tint espNowError = 0; // TODO: May I remove this??\n\n\tswitch (buf[0]) {\n\tcase CLIENT_HELLO:\n\t\t// TODO: Do no accept new Client Hello if registration is on process on any node?? Possible DoS Attack??\n\t\t// May cause undesired behaviour in case a node registration message is lost\n\t\tDEBUG_INFO (\" <------- CLIENT HELLO\");\n\t\t//if (!OTAongoing) {\n\t\tif (espNowError == 0) {\n\t\t\tif (processClientHello (mac, buf, count, node)) {\n\t\t\t\tif (serverHello (myPublicKey, node)) {\n                    DEBUG_INFO (\"Server Hello sent\");\n                    node->setRSSI (rssi); // Node is reset inside processClientHello\n                    node->setStatus (REGISTERED);\n\t\t\t\t\tnode->setKeyValidFrom (millis ());\n\t\t\t\t\tnode->setLastMessageCounter (0);\n\t\t\t\t\tnode->setLastControlCounter (0);\n\t\t\t\t\tnode->setLastDownlinkMsgCounter (0);\n\t\t\t\t\tnode->setLastMessageTime ();\n\t\t\t\t\tif (notifyNewNode) {\n\t\t\t\t\t\tnotifyNewNode (node->getMacAddress (), node->getNodeId (), NULL);\n                    }\n                    DEBUG_VERBOSE (\"Send RSSI: %d dBm\", node->getRSSI ());\n                    sendNodeRSSI (node);\n#if DEBUG_LEVEL >= INFO\n\t\t\t\t\tnodelist.printToSerial (&DEBUG_ESP_PORT);\n#endif\n\t\t\t\t\tif (node->broadcastIsEnabled ()) {\n\t\t\t\t\t\tif (!sendBroadcastKey (node)) {\n\t\t\t\t\t\t\tDEBUG_WARN (\"Error sending broadcast key to node\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode->setBroadcastKeyRequested (false);\n\t\t\t\t\t\t\tDEBUG_INFO (\"Broadcast key sent to node\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnode->reset ();\n\t\t\t\t\tDEBUG_INFO (\"Error sending Server Hello\");\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// Ignore message in case of error\n\t\t\t\t//invalidateKey (node, WRONG_CLIENT_HELLO);\n\t\t\t\tnode->reset ();\n\t\t\t\tDEBUG_ERROR (\"Error processing client hello\");\n\t\t\t}\n\t\t} else {\n\t\t\tDEBUG_ERROR (\"Error adding peer %d\", espNowError);\n\t\t}\n\t\t//} else {\n\t\t//\tDEBUG_WARN (\"OTA ongoing. Registration ignored\");\n\t\t//}\n\t\tbreak;\n\tcase CONTROL_DATA:\n\t\tDEBUG_INFO (\" <------- CONTROL MESSAGE\");\n\t\tif (node->getStatus () == REGISTERED) {\n\t\t\tif (processControlMessage (mac, buf, count, node)) {\n\t\t\t\tDEBUG_INFO (\"Control message OK\");\n\t\t\t\tif (MAX_KEY_VALIDITY > 0) {\n\t\t\t\t\tif (millis () - node->getKeyValidFrom () > MAX_KEY_VALIDITY) {\n\t\t\t\t\t\tinvalidateKey (node, KEY_EXPIRED);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (DISCONNECT_ON_DATA_ERROR) {\n\t\t\t\t\tinvalidateKey (node, WRONG_DATA);\n\t\t\t\t}\n\t\t\t\tDEBUG_WARN (\"Control message not OK\");\n\t\t\t}\n\t\t} else {\n\t\t\tinvalidateKey (node, UNREGISTERED_NODE);\n\t\t}\n\t\tbreak;\n\tcase SENSOR_DATA:\n    case UNENCRYPTED_NODE_DATA:\n#if SUPPORT_HA_DISCOVERY\n    case HA_DISCOVERY_MESSAGE:\n#endif // SUPPORT_HA_DISCOVERY\n    {\n        bool encrypted = false;\n        if (buf[0] == SENSOR_DATA) {\n            DEBUG_INFO (\" <------- ENCRYPTED DATA\");\n            encrypted = true;\n        }\n#if SUPPORT_HA_DISCOVERY\n        else if (buf[0] == HA_DISCOVERY_MESSAGE) {\n            DEBUG_INFO (\" <------- HA_DISCOVERY_MESSAGE\");\n\t\t\tencrypted = true;\n        }\n#endif // SUPPORT_HA_DISCOVERY \n        else {\n            DEBUG_INFO (\" <------- UNENCRYPTED DATA\");\n            encrypted = false;\n        }\n        //if (!OTAongoing) {\n        if (node->getStatus () == REGISTERED) {\n            float packetsHour = (float)1 / ((millis () - node->getLastMessageTime ()) / (float)3600000);\n            node->updatePacketsRate (packetsHour);\n            if (processDataMessage (mac, buf, count, node, encrypted)) {\n                node->setLastMessageTime ();\n                DEBUG_INFO (\"Data OK\");\n                DEBUG_VERBOSE (\"Key valid from %lu ms\", millis () - node->getKeyValidFrom ());\n                if (MAX_KEY_VALIDITY > 0) {\n                    if (millis () - node->getKeyValidFrom () > MAX_KEY_VALIDITY) {\n                        invalidateKey (node, KEY_EXPIRED);\n                    }\n                }\n            } else {\n                if (DISCONNECT_ON_DATA_ERROR) {\n                    invalidateKey (node, WRONG_DATA);\n                }\n                DEBUG_WARN (\"Data not OK\");\n            }\n        } else {\n            invalidateKey (node, UNREGISTERED_NODE);\n            node->reset ();\n        }\n        //} else {\n        //\tDEBUG_WARN (\"Data ignored. OTA ongoing\");\n        //}\n        break;\n    }\n\tcase CLOCK_REQUEST:\n\t\tDEBUG_INFO (\" <------- CLOCK REQUEST\");\n\t\tif (node->getStatus () == REGISTERED) {\n\t\t\tif (processClockRequest (mac, buf, count, node)) {\n\t\t\t\tDEBUG_INFO (\"Clock request OK\");\n\t\t\t\tif (MAX_KEY_VALIDITY > 0) {\n\t\t\t\t\tif (millis () - node->getKeyValidFrom () > MAX_KEY_VALIDITY) {\n\t\t\t\t\t\tinvalidateKey (node, KEY_EXPIRED);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinvalidateKey (node, WRONG_DATA);\n\t\t\t\tDEBUG_WARN (\"Clock request not OK\");\n\t\t\t}\n\n\t\t} else {\n\t\t\tinvalidateKey (node, UNREGISTERED_NODE);\n\t\t}\n\t\tbreak;\n\tcase NODE_NAME_SET:\n\t\tDEBUG_INFO (\" <------- NODE NAME REQUEST\");\n\t\tif (node->getStatus () == REGISTERED) {\n\t\t\tif (processNodeNameSet (mac, buf, count, node)) {\n\t\t\t\tDEBUG_INFO (\"Node name for node %d set to %s\", node->getNodeId (), node->getNodeName ());\n\t\t\t\tif (notifyNewNode) {\n\t\t\t\t\tnotifyNewNode (node->getMacAddress (), node->getNodeId (), node->getNodeName ());\n                }\n                sendNodeRSSI (node);\n            } else {\n\t\t\t\tDEBUG_WARN (\"Error setting node name for node %d\", node->getNodeId ());\n\t\t\t}\n\t\t}\n\t\tbreak;\n\tdefault:\n\t\tDEBUG_INFO (\"Received unknown EnigmaIOT message 0x%02X\");\n\t}\n}\n\nbool EnigmaIOTGatewayClass::nodeNameSetRespose (Node* node, int8_t error) {\n\t/*\n\t * ------------------------------------------------------------------\n\t *| msgType (1) | IV (12) | Counter (2) | Result code (1) | tag (16) |\n\t * ------------------------------------------------------------------\n\t */\n\tstruct __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t iv[IV_LENGTH];\n\t\tuint16_t counter;\n\t\tint8_t errorCode;\n\t\tuint8_t tag[TAG_LENGTH];\n\t} nodeNameSetResponse_msg;\n\n\tuint16_t counter;\n\n\tconst unsigned int NNSRMSG_LEN = sizeof (nodeNameSetResponse_msg);\n\n\tnodeNameSetResponse_msg.msgType = NODE_NAME_RESULT;\n\n\tif (useCounter) {\n\t\tcounter = node->getLastDownlinkMsgCounter () + 1;\n\t\tnode->setLastDownlinkMsgCounter (counter);\n\t} else {\n\t\tcounter = (uint16_t)(Crypto.random ());\n\t}\n\tDEBUG_INFO (\"Downlink message #%d\", counter);\n\n\tmemcpy (&(nodeNameSetResponse_msg.counter), &counter, sizeof (uint16_t));\n\n\tDEBUG_DBG (\"Set node name Response. Error code: %d\", error);\n\n\tCryptModule::random (nodeNameSetResponse_msg.iv, IV_LENGTH);\n\n\tDEBUG_VERBOSE (\"IV: %s\", printHexBuffer (nodeNameSetResponse_msg.iv, IV_LENGTH));\n\n\tnodeNameSetResponse_msg.errorCode = error;\n\n\tconst uint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, (uint8_t*)&nodeNameSetResponse_msg, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from node key\n\tmemcpy (aad + addDataLen, node->getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::encryptBuffer ((uint8_t*)&(nodeNameSetResponse_msg.errorCode), sizeof (int8_t), // Encrypt error code only, 1 byte\n\t\t\t\t\t\t\t\t\t nodeNameSetResponse_msg.iv, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node->getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), nodeNameSetResponse_msg.tag, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during encryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Encrypted set node name response message: %s\", printHexBuffer ((uint8_t*)&nodeNameSetResponse_msg, NNSRMSG_LEN));\n\n\tDEBUG_INFO (\" -------> SEND SET NODE NAME RESPONSE\");\n\tuint8_t* addr = node->getMacAddress ();\n\t//char addrStr[ENIGMAIOT_ADDR_LEN * 3];\n\tif (comm->send (addr, (uint8_t*)&nodeNameSetResponse_msg, NNSRMSG_LEN) == 0) {\n\t\tDEBUG_INFO (\"Set Node Name Response message sent to %s\", mac2str (addr));\n\t\treturn true;\n\t} else {\n\t\tnodelist.unregisterNode (node);\n\t\tDEBUG_ERROR (\"Error sending Set Node Name Response message to %s\", mac2str (addr));\n\t\treturn false;\n\t}\n}\n\nbool EnigmaIOTGatewayClass::processNodeNameSet (const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t* buf, size_t count, Node* node) {\n\t/*\n\t* ------------------------------------------------------------------------------------\n\t*| msgType (1) | IV (12) | NodeID (2) | Counter (2) | Node name (up to 32) | tag (16) |\n\t* ------------------------------------------------------------------------------------\n\t*/\n\tint8_t error = 0;\n\n\tchar nodeName[NODE_NAME_LENGTH];\n\tmemset ((void*)nodeName, 0, NODE_NAME_LENGTH);\n\n\tuint8_t iv_idx = 1;\n\tuint8_t nodeId_idx = iv_idx + IV_LENGTH;\n\tuint8_t counter_idx = nodeId_idx + sizeof (int16_t);\n\tuint8_t nodeName_idx = counter_idx + sizeof (int16_t);\n\tuint8_t tag_idx = count - TAG_LENGTH;\n\n\tuint16_t counter;\n\n\tconst uint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, buf, addDataLen); // Copy message upto iv\n\t// Copy 8 last bytes from NetworkKey\n\tmemcpy (aad + addDataLen, node->getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tuint8_t packetLen = count - TAG_LENGTH;\n\n\tif (!CryptModule::decryptBuffer (buf + nodeId_idx, packetLen - 1 - IV_LENGTH, // Decrypt from nodeId\n\t\t\t\t\t\t\t\t\t buf + iv_idx, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node->getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), buf + tag_idx, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during decryption\");\n\t\terror = -4; // Message error\n\t}\n\n\tmemcpy (&counter, &(buf[counter_idx]), sizeof (uint16_t));\n\tDEBUG_INFO (\"Node Id %d. Control message #%d\", node->getNodeId (), counter);\n\tif (useCounter) {\n\t\tif (counter > node->getLastControlCounter ()) {\n\t\t\tDEBUG_INFO (\"Accepted\");\n\t\t\tnode->setLastControlCounter (counter);\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Control message rejected\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (!error) {\n\t\tDEBUG_VERBOSE (\"Decripted node name set message: %s\", printHexBuffer (buf, count - TAG_LENGTH));\n\n\t\tsize_t nodeNameLen = tag_idx - nodeName_idx;\n\n\t\tDEBUG_DBG (\"Node name length: %d bytes\", nodeNameLen);\n\n\t\tif (nodeNameLen >= NODE_NAME_LENGTH) {\n\t\t\tnodeNameLen = NODE_NAME_LENGTH - 1;\n\t\t}\n\n\t\tmemcpy ((void*)nodeName, (void*)(buf + nodeName_idx), nodeNameLen);\n\n\t\terror = nodelist.checkNodeName (nodeName, mac);\n\t}\n\n\t//nodeNameSetRespose (node, error);\n\n\tif (error) {\n\t\treturn false;\n\t} else {\n\t\tnode->setNodeName (nodeName);\n\t\tDEBUG_INFO (\"Node name set to %s\", node->getNodeName ());\n\t\treturn true;\n\t}\n}\n\nbool EnigmaIOTGatewayClass::processControlMessage (const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t* buf, size_t count, Node* node) {\n\t/*\n\t* ----------------------------------------------------------------------------------------\n\t*| msgType (1) | IV (12) | length (2) | NodeId (2) | Counter (2) | Data (....) | Tag (16) |\n\t* ----------------------------------------------------------------------------------------\n\t*/\n\n\tuint8_t iv_idx = 1;\n\tuint8_t length_idx = iv_idx + IV_LENGTH;\n\tuint8_t nodeId_idx = length_idx + sizeof (int16_t);\n\tuint8_t counter_idx = nodeId_idx + sizeof (int16_t);\n\tuint8_t data_idx = counter_idx + sizeof (int16_t);\n\tuint8_t tag_idx = count - TAG_LENGTH;\n\n\tuint16_t counter;\n\n\tconst uint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, buf, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from NetworkKey\n\tmemcpy (aad + addDataLen, node->getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tuint8_t packetLen = count - TAG_LENGTH;\n\n\tif (!CryptModule::decryptBuffer (buf + length_idx, packetLen - 1 - IV_LENGTH, // Decrypt from nodeId\n\t\t\t\t\t\t\t\t\t buf + iv_idx, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node->getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), buf + tag_idx, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during decryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Decripted control message: %s\", printHexBuffer (buf, count - TAG_LENGTH));\n\n\tmemcpy (&counter, &(buf[counter_idx]), sizeof (uint16_t));\n\tDEBUG_INFO (\"Node Id %d. Control message #%d\", node->getNodeId (), counter);\n\tif (useCounter) {\n\t\tif (counter > node->getLastControlCounter ()) {\n\t\t\tDEBUG_INFO (\"Accepted\");\n\t\t\tnode->setLastControlCounter (counter);\n\t\t} else {\n            DEBUG_WARN (\"Control message rejected. Last counter: %u. Current counter\", node->getLastControlCounter (), counter);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check if command informs about a sleepy mode change\n\tconst uint8_t* payload = buf + data_idx;\n\tif (payload[0] == control_message_type::SLEEP_ANS && (tag_idx - data_idx) >= 5) {\n\t\tuint32_t sleepTime;\n\t\tDEBUG_DBG (\"Check if sleepy mode has changed for node\");\n\t\tmemcpy (&sleepTime, payload + 1, sizeof (uint32_t));\n\t\tif (sleepTime > 0) {\n\t\t\tDEBUG_DBG (\"Set node to sleepy mode\");\n\t\t\tnode->setSleepy (true);\n\t\t} else {\n\t\t\tDEBUG_DBG (\"Set node to non sleepy mode\");\n\t\t\tnode->setSleepy (false);\n\t\t}\n\t}\n\n\tDEBUG_DBG (\"Payload length: %d bytes\", tag_idx - data_idx);\n\n\tchar* nodeName = node->getNodeName ();\n\n\tif (notifyData) {\n\t\tnotifyData (const_cast<uint8_t*>(mac), buf + data_idx, tag_idx - data_idx, 0, true, ENIGMAIOT, nodeName ? nodeName : NULL);\n\t}\n\n\treturn true;\n}\n\nbool EnigmaIOTGatewayClass::processUnencryptedDataMessage (const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t* buf, size_t count, Node* node) {\n\t/*\n\t* ------------------------------------------------------------------------\n\t*| msgType (1) | NodeId (2) | Counter (2) | PayloadType (1) | Data (....) |\n\t* ------------------------------------------------------------------------\n\t*/\n\n\tuint8_t nodeId_idx = 1;\n\tuint8_t counter_idx = nodeId_idx + sizeof (int16_t);\n\tuint8_t payloadType_idx = counter_idx + sizeof (int16_t);\n\tuint8_t data_idx = payloadType_idx + sizeof (int8_t);\n\n\tuint16_t counter;\n\tsize_t lostMessages = 0;\n\n\t//uint8_t packetLen = count; // Not used\n\n\tDEBUG_VERBOSE (\"Unencrypted data message: %s\", printHexBuffer (buf, count));\n\n\tnode->packetNumber++;\n\n\tmemcpy (&counter, &buf[counter_idx], sizeof (uint16_t));\n\tif (useCounter) {\n\t\tif (counter > node->getLastMessageCounter ()) {\n\t\t\tlostMessages = counter - node->getLastMessageCounter () - 1;\n\t\t\tnode->packetErrors += lostMessages;\n\t\t\tnode->setLastMessageCounter (counter);\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Data counter error %d : %d\", counter, node->getLastMessageCounter ());\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tchar* nodeName = node->getNodeName ();\n\n\tif (notifyData) {\n\t\tnotifyData (const_cast<uint8_t*>(mac), &(buf[data_idx]), count - data_idx, lostMessages, false, RAW, nodeName ? nodeName : NULL);\n\t}\n\n\tif (node->getSleepy ()) {\n\t\tif (node->qMessagePending) {\n\t\t\tDEBUG_INFO (\" -------> DOWNLINK QUEUED DATA\");\n\t\t\tflashTx = true;\n\t\t\tnode->qMessagePending = false;\n\t\t\treturn comm->send (node->getMacAddress (), node->queuedMessage, node->qMessageLength) == 0;\n\t\t}\n\t}\n\n\treturn true;\n\n}\n\n\nbool EnigmaIOTGatewayClass::processDataMessage (const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t* buf, size_t count, Node* node, bool encrypted) {\n\t/*\n\t* ----------------------------------------------------------------------------------------\n\t*| msgType (1) | IV (12) | length (2) | NodeId (2) | Counter (2) | Data (....) | Tag (16) |\n\t* ----------------------------------------------------------------------------------------\n\t*/\n\n\tif (!encrypted) {\n\t\treturn processUnencryptedDataMessage (mac, buf, count, node);\n\t}\n\n\tuint8_t iv_idx = 1;\n\tuint8_t length_idx = iv_idx + IV_LENGTH;\n\tuint8_t nodeId_idx = length_idx + sizeof (int16_t);\n\tuint8_t counter_idx = nodeId_idx + sizeof (int16_t);\n\tuint8_t encoding_idx = counter_idx + sizeof (int16_t);\n\tuint8_t data_idx = encoding_idx + sizeof (int8_t);\n\tuint8_t tag_idx = count - TAG_LENGTH;\n\n\tuint16_t counter;\n\tsize_t lostMessages = 0;\n\n\tconst uint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, buf, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from NetworkKey\n\tmemcpy (aad + addDataLen, node->getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tuint8_t packetLen = count - TAG_LENGTH;\n\n\tif (!CryptModule::decryptBuffer (buf + length_idx, packetLen - 1 - IV_LENGTH, // Decrypt from nodeId\n\t\t\t\t\t\t\t\t\t buf + iv_idx, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node->getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), buf + tag_idx, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during decryption\");\n\t\treturn false;\n\t}\n\tDEBUG_VERBOSE (\"Decrypted data message: %s\", printHexBuffer (buf, count - TAG_LENGTH));\n\tDEBUG_DBG (\"Data payload encoding: 0x%02X\", buf[encoding_idx]);\n\tnode->packetNumber++;\n\n\tmemcpy (&counter, &(buf[counter_idx]), sizeof (uint16_t));\n\tDEBUG_INFO (\"Node Id %d. Data message #%d\", node->getNodeId (), counter);\n\tif (useCounter) {\n\t\tif (counter > node->getLastMessageCounter ()) {\n\t\t\tDEBUG_INFO (\"Accepted\");\n\t\t\tlostMessages = counter - node->getLastMessageCounter () - 1;\n\t\t\tnode->packetErrors += lostMessages;\n\t\t\tnode->setLastMessageCounter (counter);\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Data message rejected\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tchar* nodeName = node->getNodeName ();\n#if SUPPORT_HA_DISCOVERY\n    if (buf[0] == HA_DISCOVERY_MESSAGE) {\n        sendHADiscoveryJSON (const_cast<uint8_t*>(mac), &(buf[data_idx]), tag_idx - data_idx, gwConfig.networkName, nodeName ? nodeName : NULL);\n    } else\n#endif // SUPPORT_HA_DISCOVERY\n        if (buf[0] == SENSOR_DATA && notifyData) {\n\t\t//DEBUG_WARN (\"Notify data %d\", input_queue->size());\n\t\tnotifyData (const_cast<uint8_t*>(mac), &(buf[data_idx]), tag_idx - data_idx, lostMessages, false, (gatewayPayloadEncoding_t)(buf[encoding_idx]), nodeName ? nodeName : NULL);\n        } else {\n            DEBUG_WARN (\"Wrong message type. Possible memory corruption\");\n    }\n\n\tif (node->getSleepy ()) {\n\t\tif (node->qMessagePending) {\n\t\t\tDEBUG_INFO (\" -------> DOWNLINK QUEUED DATA\");\n\t\t\tflashTx = true;\n\t\t\tnode->qMessagePending = false;\n\t\t\treturn comm->send (node->getMacAddress (), node->queuedMessage, node->qMessageLength) == 0;\n\t\t}\n\t}\n\n\treturn true;\n\n}\n\ndouble EnigmaIOTGatewayClass::getPER (uint8_t* address) {\n\tNode* node = nodelist.getNewNode (address);\n\n\tif (node->packetNumber > 0) {\n\t\tnode->per = (double)node->packetErrors / (double)node->packetNumber;\n\t}\n\n\treturn node->per;\n}\n\nuint32_t EnigmaIOTGatewayClass::getTotalPackets (uint8_t* address) {\n\tNode* node = nodelist.getNewNode (address);\n\n\treturn node->packetNumber + getErrorPackets (address);\n}\n\nuint32_t EnigmaIOTGatewayClass::getErrorPackets (uint8_t* address) {\n\tNode* node = nodelist.getNewNode (address);\n\n\treturn node->packetErrors;\n}\n\ndouble EnigmaIOTGatewayClass::getPacketsHour (uint8_t* address) {\n\tNode* node = nodelist.getNewNode (address);\n\n\treturn node->packetsHour;\n}\n\n\nbool EnigmaIOTGatewayClass::downstreamDataMessage (Node* node, const uint8_t* data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t encoding) {\n\t/*\n\t* ----------------------------------------------------------------------------------------\n\t*| msgType (1) | IV (12) | length (2) | NodeId (2) | Counter (2) | Data (....) | Tag (16) |\n\t* ----------------------------------------------------------------------------------------\n\t*/\n\n\tuint8_t buffer[MAX_MESSAGE_LENGTH];\n\tuint16_t packet_length;\n\tbool broadcast = false;\n\n\tif (!node->isRegistered ()) {\n\t\tDEBUG_VERBOSE (\"Error sending downstream. Node is not registered\");\n\t\treturn false;\n\t}\n\n\tuint16_t nodeId = node->getNodeId ();\n\tuint16_t counter;\n\n\tuint8_t iv_idx = 1;\n\tuint8_t length_idx = iv_idx + IV_LENGTH;\n\tuint8_t nodeId_idx = length_idx + sizeof (int16_t);\n\tuint8_t counter_idx = nodeId_idx + sizeof (int16_t);\n\tuint8_t data_idx;\n\tuint8_t encoding_idx; // Only for user data\n\tif (controlData == USERDATA_GET || controlData == USERDATA_SET) {\n\t\tencoding_idx = counter_idx + sizeof (int16_t);\n\t\tdata_idx = encoding_idx + sizeof (int8_t);\n\t\tbuffer[encoding_idx] = encoding;\n\t\tpacket_length = 1 + IV_LENGTH + sizeof (int16_t) + sizeof (int16_t) + sizeof (int16_t) + 1 + len;\n\t} else {\n\t\tdata_idx = counter_idx + sizeof (int16_t);\n\t\tpacket_length = 1 + IV_LENGTH + sizeof (int16_t) + sizeof (int16_t) + sizeof (int16_t) + len;\n\t}\n\tuint8_t tag_idx = data_idx + len;\n\n\tif (!data) {\n\t\tDEBUG_ERROR (\"Downlink message buffer empty\");\n\t\treturn false;\n\t}\n\tif (len > MAX_MESSAGE_LENGTH - 25) {\n\t\tDEBUG_ERROR (\"Downlink message too long: %d bytes\", len);\n\t\treturn false;\n\t}\n\n\tif (!memcmp (node->getMacAddress (), BROADCAST_ADDRESS, ENIGMAIOT_ADDR_LEN)) {\n\t\tDEBUG_DBG (\"Encoding broadcast message\");\n\t\tbroadcast = true;\n\t}\n\n\tif (controlData == control_message_type::USERDATA_GET) {\n\t\tbuffer[0] = (uint8_t)DOWNSTREAM_DATA_GET;\n\t} else if (controlData == control_message_type::USERDATA_SET) {\n\t\tbuffer[0] = (uint8_t)DOWNSTREAM_DATA_SET;\n\t} else {\n\t\tbuffer[0] = (uint8_t)DOWNSTREAM_CTRL_DATA;\n\t}\n\n\tif (broadcast) {\n\t\tbuffer[0] = buffer[0] | 0x80; // Mark message as broadcast\n\t\tDEBUG_DBG (\"Broadcast message. Type: 0x%X\", buffer[0]);\n\t}\n\n\tCryptModule::random (buffer + iv_idx, IV_LENGTH);\n\n\tDEBUG_VERBOSE (\"IV: %s\", printHexBuffer (buffer + iv_idx, IV_LENGTH));\n\n\tmemcpy (buffer + nodeId_idx, &nodeId, sizeof (uint16_t));\n\n\tif (useCounter) {\n\t\tif (!broadcast) {\n\t\t\tcounter = node->getLastDownlinkMsgCounter () + 1;\n\t\t\tnode->setLastDownlinkMsgCounter (counter);\n\t\t} else {\n\t\t\tcounter = nodelist.getLastBroadcastMsgCounter () + 1;\n\t\t\tnodelist.incLastBroadcastMsgCounter ();\n\t\t}\n\t} else {\n\t\tcounter = (uint16_t)(Crypto.random ());\n\t}\n\tDEBUG_INFO (\"Downlink message #%d\", counter);\n\n\tmemcpy (buffer + counter_idx, &counter, sizeof (uint16_t));\n\n\tmemcpy (buffer + data_idx, data, len);\n\n\tDEBUG_VERBOSE (\"Data: %s\", printHexBuffer (buffer + data_idx, len));\n\n\tmemcpy (buffer + length_idx, &packet_length, sizeof (uint16_t));\n\n\tDEBUG_VERBOSE (\"Downlink message: %s\", printHexBuffer (buffer, packet_length));\n\tDEBUG_VERBOSE (\"Message length: %d bytes\", packet_length);\n\n\t//uint8_t* crypt_buf = buffer + length_idx;\n\n\t//size_t cryptLen = packet_length - length_idx;\n\n\tconst uint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, buffer, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from Node Key\n\tmemcpy (aad + addDataLen, node->getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::encryptBuffer (buffer + length_idx, packet_length - addDataLen, // Encrypt from length\n\t\t\t\t\t\t\t\t\t buffer + iv_idx, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node->getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of node key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), buffer + tag_idx, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during encryption\");\n\t\treturn false;\n\t}\n\n\t//DEBUG_WARN (\"Encryption key: %s\", printHexBuffer (node->getEncriptionKey (), KEY_LENGTH));\n\tDEBUG_VERBOSE (\"Encrypted downlink message: %s\", printHexBuffer (buffer, packet_length + TAG_LENGTH));\n\n\tif (node->getSleepy ()) { // Queue message if node may be sleeping\n\t\tif (controlData != control_message_type::OTA) {\n\t\t\tDEBUG_VERBOSE (\"Node is sleepy. Queing message\");\n\t\t\tmemcpy (node->queuedMessage, buffer, packet_length + TAG_LENGTH);\n\t\t\t//node->queuedMessage = buffer;\n\t\t\tnode->qMessageLength = packet_length + TAG_LENGTH;\n\t\t\tnode->qMessagePending = true;\n\t\t\treturn true;\n\t\t} else {\n\t\t\tDEBUG_ERROR (\"OTA is only possible with non sleepy nodes. Configure it accordingly first\");\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tDEBUG_INFO (\" -------> DOWNLINK DATA\");\n\t\tflashTx = true;\n\t\treturn comm->send (node->getMacAddress (), buffer, packet_length + TAG_LENGTH) == 0;\n\t}\n}\n\nbool  EnigmaIOTGatewayClass::invalidateKey (Node* node, gwInvalidateReason_t reason) {\n\t/*\n\t* --------------------------\n\t*| msgType (1) | reason (1) |\n\t* --------------------------\n\t*/\n\n\t// TODO: Encrypt using network key, adding some random data.This is to avoid DoS attack.\n\t// I have to investigate if this may really work.\n\t// Other options: \n\t//    - mark message using timestamp. May not work with gateways not connected to Internet.\n\t//    - Adding a number calculated from node message (a byte should be sufficient).\n\t//           For instance nth byte + 3. Most probable candidate\n\n\tstruct __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t reason;\n\t} invalidateKey_msg;\n\n#define IKMSG_LEN sizeof(invalidateKey_msg)\n\n\tinvalidateKey_msg.msgType = INVALIDATE_KEY; // Server hello message\n\n\tinvalidateKey_msg.reason = reason;\n\n\tDEBUG_VERBOSE (\"Invalidate Key message: %s\", printHexBuffer ((uint8_t*)&invalidateKey_msg, IKMSG_LEN));\n\tDEBUG_INFO (\" -------> INVALIDATE_KEY\");\n\tif (notifyNodeDisconnection) {\n\t\tuint8_t* mac = node->getMacAddress ();\n\t\tnotifyNodeDisconnection (mac, reason);\n\t}\n\tint32_t error = comm->send (node->getMacAddress (), (uint8_t*)&invalidateKey_msg, IKMSG_LEN) == 0;\n\tnode->reset ();\n\treturn error;\n}\n\nbool EnigmaIOTGatewayClass::processClientHello (const uint8_t mac[ENIGMAIOT_ADDR_LEN], const uint8_t* buf, size_t count, Node* node) {\n\t/*\n\t* ------------------------------------------------------------------------------------------------------------\n\t*| msgType (1) | IV (12) | DH Kmaster (32) | Random (30 bits) | Broadcast (1 bit) | Sleepy (1 bit) | Tag (16) |\n\t* ------------------------------------------------------------------------------------------------------------\n\t*/\n\n\tbool sleepyNode;\n\tbool broadcast;\n\n\tstruct __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t iv[IV_LENGTH];\n\t\tuint8_t publicKey[KEY_LENGTH];\n\t\tuint32_t random;\n\t\tuint8_t tag[TAG_LENGTH];\n\t} clientHello_msg;\n\n#define CHMSG_LEN sizeof(clientHello_msg)\n\n\tif (count < CHMSG_LEN) {\n\t\tDEBUG_WARN (\"Message too short\");\n\t\treturn false;\n\t}\n\n\tmemcpy (&clientHello_msg, buf, count);\n\n\tconst uint8_t addDataLen = CHMSG_LEN - TAG_LENGTH - sizeof (uint32_t) - KEY_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, (uint8_t*)&clientHello_msg, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from NetworkKey\n\tmemcpy (aad + addDataLen, gwConfig.networkKey + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::decryptBuffer (clientHello_msg.publicKey, KEY_LENGTH + sizeof (uint32_t),\n\t\t\t\t\t\t\t\t\t clientHello_msg.iv, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t gwConfig.networkKey, KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), clientHello_msg.tag, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during decryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Decrypted Client Hello message: %s\", printHexBuffer ((uint8_t*)&clientHello_msg, CHMSG_LEN - TAG_LENGTH));\n\n\tnode->reset ();\n\n\tnode->setEncryptionKey (clientHello_msg.publicKey);\n\n\tCrypto.getDH1 ();\n\tmemcpy (myPublicKey, Crypto.getPubDHKey (), KEY_LENGTH);\n\n\tif (Crypto.getDH2 (node->getEncriptionKey ())) {\n\t\tCryptModule::getSHA256 (node->getEncriptionKey (), KEY_LENGTH);\n\n\t\tnode->setKeyValid (true);\n\t\tnode->setStatus (INIT);\n\t\tDEBUG_DBG (\"Node key: %s\", printHexBuffer (node->getEncriptionKey (), KEY_LENGTH));\n\t} else {\n\t\tnodelist.unregisterNode (node);\n\t\tchar macstr[ENIGMAIOT_ADDR_LEN * 3];\n\t\tmac2str ((uint8_t*)mac, macstr);\n\t\tDEBUG_ERROR (\"DH2 error with %s\", macstr);\n\t\treturn false;\n\t}\n\n\tsleepyNode = (clientHello_msg.random & 0x00000001U) == 1;\n\tnode->setInitAsSleepy (sleepyNode);\n\tnode->setSleepy (sleepyNode);\n\tDEBUG_VERBOSE (\"This is a %s node\", sleepyNode ? \"sleepy\" : \"always awaken\");\n\n\tbroadcast = (clientHello_msg.random & 0x00000002U) == 2;\n\tnode->enableBroadcast (broadcast);\n\tnode->setBroadcastKeyRequested (broadcast);\n\tDEBUG_INFO (\"This node has broadcast mode %s\", broadcast ? \"enabled\" : \"disabled\");\n\n\treturn true;\n}\n\nbool EnigmaIOTGatewayClass::processClockRequest (const uint8_t mac[ENIGMAIOT_ADDR_LEN], const uint8_t* buf, size_t count, Node* node) {\n\t/*\n\t* ---------------------------------------------------------\n\t*| msgType (1) | IV (12) | Counter (2) | T1 (8) | Tag (16) |\n\t* ---------------------------------------------------------\n\t*/\n\tstruct timeval tv;\n\t//struct timezone tz;\n\n\tstruct __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t iv[IV_LENGTH];\n\t\tuint16_t counter;\n\t\tint64_t t1;\n\t\tuint8_t tag[TAG_LENGTH];\n\t} clockRequest_msg;\n\tuint16_t counter;\n\n\tconst unsigned int CRMSG_LEN = sizeof (clockRequest_msg);\n\n\tif (count < CRMSG_LEN) {\n\t\tDEBUG_WARN (\"Message too short\");\n\t\treturn false;\n\t}\n    \n    node->setTimeSyncEnabled ();\n    \n    // Get current time. If Gateway is synchronized to NTP server it sends real world time.\n    gettimeofday (&tv, NULL);\n    int64_t t2 = tv.tv_sec;\n    t2 *= 1000000L;\n    t2 += tv.tv_usec;\n\n\n\t//CryptModule::random (clockRequest_msg.iv, IV_LENGTH);\n\n\tmemcpy (&clockRequest_msg, buf, count);\n\n\tDEBUG_VERBOSE (\"IV: %s\", printHexBuffer (clockRequest_msg.iv, IV_LENGTH));\n\n\tconst uint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, buf, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from NetworkKey\n\tmemcpy (aad + addDataLen, node->getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\t//uint8_t packetLen = count - TAG_LENGTH;\n\n\tif (!CryptModule::decryptBuffer ((uint8_t*)&(clockRequest_msg.counter), CRMSG_LEN - IV_LENGTH - TAG_LENGTH - 1, // Decrypt from counter, 10 bytes\n\t\t\t\t\t\t\t\t\t clockRequest_msg.iv, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node->getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), clockRequest_msg.tag, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during decryption\");\n\t\treturn false;\n\t}\n\n    DEBUG_VERBOSE (\"Decripted Clock Request message: %s\", printHexBuffer ((uint8_t*)&clockRequest_msg, count - TAG_LENGTH));\n\n\tmemcpy (&counter, &(clockRequest_msg.counter), sizeof (uint16_t));\n\tDEBUG_INFO (\"Node Id %d. Control message #%d\", node->getNodeId (), counter);\n\tif (useCounter) {\n\t\tif (counter > node->getLastControlCounter ()) {\n\t\t\tDEBUG_INFO (\"Accepted\");\n\t\t\tnode->setLastControlCounter (counter);\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Control message rejected\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//node->t1 = clockRequest_msg.t1;\n\n\t//node->t2 = time_us;\n\n    DEBUG_DBG (\"T1: %llu\", clockRequest_msg.t1);\n\tDEBUG_DBG (\"T2: %llu\", t2);\n\tDEBUG_VERBOSE (\"Clock Request message: %s\", printHexBuffer ((uint8_t*)&clockRequest_msg, CRMSG_LEN - TAG_LENGTH));\n\n    return clockResponse (node, clockRequest_msg.t1, t2);\n}\n\nbool EnigmaIOTGatewayClass::clockResponse (Node* node, uint64_t t1, uint64_t t2) {\n\tstruct timeval tv;\n\t//struct timezone tz;\n\n\tstruct __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t iv[IV_LENGTH];\n\t\tuint16_t counter;\n        int64_t t1;\n\t\tint64_t t2;\n\t\tint64_t t3;\n\t\tuint8_t tag[TAG_LENGTH];\n\t} clockResponse_msg;\n\n\tuint16_t counter;\n\n\tconst unsigned int CRSMSG_LEN = sizeof (clockResponse_msg);\n\n\tclockResponse_msg.msgType = CLOCK_RESPONSE;\n\n\tif (useCounter) {\n\t\tcounter = node->getLastDownlinkMsgCounter () + 1;\n\t\tnode->setLastDownlinkMsgCounter (counter);\n\t} else {\n\t\tcounter = (uint16_t)(Crypto.random ());\n\t}\n\tDEBUG_INFO (\"Downlink message #%d\", counter);\n\n\tmemcpy (&(clockResponse_msg.counter), &counter, sizeof (uint16_t));\n    \n    memcpy (&(clockResponse_msg.t1), &t1, sizeof (int64_t));\n\n\tmemcpy (&(clockResponse_msg.t2), &t2, sizeof (int64_t));\n\n\t// Get current time. If Gateway is synchronized to NTP server it sends real world time.\n\tgettimeofday (&tv, NULL);\n\tint64_t t3 = tv.tv_sec;\n\tt3 *= 1000000L;\n\tt3 += tv.tv_usec;\n\n\tmemcpy (&(clockResponse_msg.t3), &t3, sizeof (int64_t));\n\n\tDEBUG_VERBOSE (\"Clock Response message: %s\", printHexBuffer ((uint8_t*)&clockResponse_msg, CRSMSG_LEN - TAG_LENGTH));\n\n#ifdef DEBUG_ESP_PORT\n\tchar mac[ENIGMAIOT_ADDR_LEN * 3];\n\tmac2str (node->getMacAddress (), mac);\n#endif\n\tDEBUG_DBG (\"T1: %llu\", t1);\n\tDEBUG_DBG (\"T2: %llu\", t2);\n\tDEBUG_DBG (\"T3: %llu\", t3);\n\n\tconst uint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, (uint8_t*)&clockResponse_msg, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from NetworkKey\n\tmemcpy (aad + addDataLen, node->getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::encryptBuffer ((uint8_t*)&(clockResponse_msg.counter), CRSMSG_LEN - IV_LENGTH - TAG_LENGTH - 1, // Encrypt only from counter, 18 bytes\n\t\t\t\t\t\t\t\t\t clockResponse_msg.iv, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node->getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), clockResponse_msg.tag, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during encryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Encrypted Clock Response message: %s\", printHexBuffer ((uint8_t*)&clockResponse_msg, CRSMSG_LEN));\n\n\tDEBUG_INFO (\" -------> CLOCK RESPONSE\");\n\tif (comm->send (node->getMacAddress (), (uint8_t*)&clockResponse_msg, CRSMSG_LEN) == 0) {\n\t\tDEBUG_INFO (\"Clock Response message sent to %s\", mac);\n\t\treturn true;\n\t} else {\n\t\tnodelist.unregisterNode (node);\n\t\tDEBUG_ERROR (\"Error sending Clock Response message to %s\", mac);\n\t\treturn false;\n\t}\n}\n\nbool EnigmaIOTGatewayClass::sendBroadcastKey (Node* node) {\n\n\tDEBUG_DBG (\"Send broadcast key to \" MACSTR, MAC2STR (node->getMacAddress ()));\n\treturn sendDownstream (node->getMacAddress (), NULL, 0, control_message_type_t::BRCAST_KEY);\n\n}\n\nbool EnigmaIOTGatewayClass::serverHello (const uint8_t* key, Node* node) {\n\t/*\n\t* -----------------------------------------------------------------------------\n\t*| msgType (1) | IV (12) | DH Kslave (32) | NodeID (2) | Random (4) | Tag (16) |\n\t* -----------------------------------------------------------------------------\n\t*/\n\n\tstruct __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t iv[IV_LENGTH];\n\t\tuint8_t publicKey[KEY_LENGTH];\n\t\tuint16_t nodeId;\n\t\tuint32_t random;\n\t\tuint8_t tag[TAG_LENGTH];\n\t} serverHello_msg;\n\n#define SHMSG_LEN sizeof(serverHello_msg)\n\n\tuint32_t random;\n\n\tif (!key) {\n\t\tDEBUG_ERROR (\"NULL key\");\n\t\treturn false;\n\t}\n\n\tserverHello_msg.msgType = SERVER_HELLO; // Server hello message\n\n\tCryptModule::random (serverHello_msg.iv, IV_LENGTH);\n\n\tDEBUG_VERBOSE (\"IV: %s\", printHexBuffer (serverHello_msg.iv, IV_LENGTH));\n\n\tfor (int i = 0; i < KEY_LENGTH; i++) {\n\t\tserverHello_msg.publicKey[i] = key[i];\n\t}\n\n\tuint16_t nodeId = node->getNodeId ();\n\tmemcpy (&(serverHello_msg.nodeId), &nodeId, sizeof (uint16_t));\n\n\trandom = Crypto.random ();\n\tmemcpy (&(serverHello_msg.random), &random, RANDOM_LENGTH);\n\n\tDEBUG_VERBOSE (\"Server Hello message: %s\", printHexBuffer ((uint8_t*)&serverHello_msg, SHMSG_LEN - TAG_LENGTH));\n\n\tconst uint8_t addDataLen = SHMSG_LEN - TAG_LENGTH - sizeof (uint32_t) - sizeof (uint16_t) - KEY_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, (uint8_t*)&serverHello_msg, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from NetworkKey\n\tmemcpy (aad + addDataLen, gwConfig.networkKey + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::encryptBuffer (serverHello_msg.publicKey, KEY_LENGTH + sizeof (uint16_t) + sizeof (uint32_t), // Encrypt from public key\n\t\t\t\t\t\t\t\t\t serverHello_msg.iv, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t gwConfig.networkKey, KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), serverHello_msg.tag, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during encryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Encrypted Server Hello message: %s\", printHexBuffer ((uint8_t*)&serverHello_msg, SHMSG_LEN));\n\n\tflashTx = true;\n\n#ifdef DEBUG_ESP_PORT\n\tchar mac[ENIGMAIOT_ADDR_LEN * 3];\n\tmac2str (node->getMacAddress (), mac);\n#endif\n\tDEBUG_INFO (\" -------> SERVER_HELLO\");\n\tif (comm->send (node->getMacAddress (), (uint8_t*)&serverHello_msg, SHMSG_LEN) == 0) {\n\t\tDEBUG_INFO (\"Server Hello message sent to %s\", mac);\n\t\treturn true;\n\t} else {\n\t\tnodelist.unregisterNode (node);\n\t\tDEBUG_ERROR (\"Error sending Server Hello message to %s\", mac);\n\t\treturn false;\n\t}\n}\n\n#if SUPPORT_HA_DISCOVERY\nbool EnigmaIOTGatewayClass::sendHADiscoveryJSON (uint8_t* address, uint8_t* data, size_t len, const char* networkName, const char* nodeName) {\n    DynamicJsonDocument inputJSON (1024);\n    const int jsonBufferSize = 1024;\n    char jsonStringBuffer[jsonBufferSize];\n    haDeviceType_t deviceType;\n\n    DeserializationError result = deserializeMsgPack (inputJSON, data, len);\n\n    if (result != DeserializationError::Ok) {\n        DEBUG_WARN (\"Error decoding HA discovery message: %s\", result.c_str ());\n        return false;\n    }\n    \n    DEBUG_DBG (\"Entity name: %s\", nodeName ? nodeName : mac2str (address));\n\n    if (inputJSON.containsKey (ha_device_type)) {\n        deviceType = inputJSON[ha_device_type];\n        DEBUG_DBG (\"Device Type: %d\", deviceType);\n    } else {\n        DEBUG_WARN (\"Device type error\");\n        return false;\n    }\n\n    String topic = HAEntity::getDiscoveryTopic (HA_DISCOVERY_PREFIX, nodeName ? nodeName : mac2str(address), deviceType, inputJSON.containsKey (ha_name_sufix) ? inputJSON[ha_name_sufix] : (const char *) NULL);\n\n    size_t jsonStrLen;\n    \n    switch (deviceType) {\n    case BINARY_SENSOR:\n        jsonStrLen = HABinarySensor::getDiscoveryJson (jsonStringBuffer, jsonBufferSize, nodeName ? nodeName : mac2str (address), networkName, &inputJSON);\n        break;\n    case SENSOR:\n        jsonStrLen = HASensor::getDiscoveryJson (jsonStringBuffer, jsonBufferSize, nodeName ? nodeName : mac2str (address), networkName, &inputJSON);\n        break;\n    case COVER:\n        jsonStrLen = HACover::getDiscoveryJson (jsonStringBuffer, jsonBufferSize, nodeName ? nodeName : mac2str (address), networkName, &inputJSON);\n        break;\n    case SWITCH:\n        jsonStrLen = HASwitch::getDiscoveryJson (jsonStringBuffer, jsonBufferSize, nodeName ? nodeName : mac2str (address), networkName, &inputJSON);\n        break;\n    case DEVICE_TRIGGER:\n        jsonStrLen = HATrigger::getDiscoveryJson (jsonStringBuffer, jsonBufferSize, nodeName ? nodeName : mac2str (address), networkName, &inputJSON);\n        break;\n    default:\n        jsonStringBuffer[0] = 0;\n        jsonStrLen = 0;\n        DEBUG_WARN (\"Device is not supported for HomeAssistant discovery: %d\", deviceType);\n        return false;\n        break;\n    }\n\n    DEBUG_INFO (\"%s : %s\", topic.c_str (), jsonStringBuffer);\n    if (notifyHADiscovery) {\n        notifyHADiscovery (topic.c_str (), jsonStringBuffer, jsonStrLen);\n    }\n    \n    return true;\n    \n}\n#endif // SUPPORT_HA_DISCOVERY\n\nEnigmaIOTGatewayClass EnigmaIOTGateway;\n\n"
  },
  {
    "path": "src/EnigmaIOTGateway.h",
    "content": "/**\n  * @file EnigmaIOTGateway.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Library to build a gateway for EnigmaIoT system\n  */\n\n#ifndef _ENIGMAIOTGATEWAY_h\n#define _ENIGMAIOTGATEWAY_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n#include \"EnigmaIoTconfig.h\"\n#include \"NodeList.h\"\n#include \"Filter.h\"\n#include \"Comms_hal.h\"\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n#include <DNSServer.h>\n#include <queue>\n#include \"EnigmaIOTRingBuffer.h\"\n#if ENABLE_REST_API\n#include \"GatewayAPI.h\"\n#endif // ENABLE_REST_API\n\n#include \"helperFunctions.h\"\n\n#define LED_ON LOW\n#define LED_OFF !LED_ON\n\n/**\n  * @brief Message code definition\n  */\nenum gatewayMessageType_t {\n\tSENSOR_DATA = 0x01, /**< Data message from sensor node */\n\tSENSOR_BRCAST_DATA = 0x81, /**< Data broadcast message from sensor node */\n\tUNENCRYPTED_NODE_DATA = 0x11, /**< Data message from sensor node. Unencrypted */\n\tDOWNSTREAM_DATA_SET = 0x02, /**< Data message from gateway. Downstream data for user commands */\n\tDOWNSTREAM_BRCAST_DATA_SET = 0x82, /**< Data broadcast message from gateway. Downstream data for user commands */\n\tDOWNSTREAM_DATA_GET = 0x12, /**< Data message from gateway. Downstream data for user commands */\n\tDOWNSTREAM_BRCAST_DATA_GET = 0x92, /**< Data broadcast message from gateway. Downstream data for user commands */\n\tCONTROL_DATA = 0x03, /**< Internal control message from sensor to gateway. Used for OTA, settings configuration, etc */\n\tDOWNSTREAM_CTRL_DATA = 0x04, /**< Internal control message from gateway to sensor. Used for OTA, settings configuration, etc */\n\tDOWNSTREAM_BRCAST_CTRL_DATA = 0x84, /**< Internal control broadcast message from gateway to sensor. Used for OTA, settings configuration, etc */\n    HA_DISCOVERY_MESSAGE = 0x08, /**< This sends gateway needed information to build a Home Assistant discovery MQTT message to allow automatic entities provision */\n    CLOCK_REQUEST = 0x05, /**< Clock request message from node */\n\tCLOCK_RESPONSE = 0x06, /**< Clock response message from gateway */\n\tNODE_NAME_SET = 0x07, /**< Message from node to signal its own custom node name */\n\tNODE_NAME_RESULT = 0x17, /**< Message from gateway to get result after set node name */\n\tBROADCAST_KEY_REQUEST = 0x08, /**< Message from node to request broadcast key */\n\tBROADCAST_KEY_RESPONSE = 0x18, /**< Message from gateway with broadcast key */\n\tCLIENT_HELLO = 0xFF, /**< ClientHello message from sensor node */\n\tSERVER_HELLO = 0xFE, /**< ServerHello message from gateway */\n\tINVALIDATE_KEY = 0xFB /**< InvalidateKey message from gateway */\n};\n\nenum gatewayPayloadEncoding_t {\n\tRAW = 0x00, /**< Raw data without specific format */\n\tCAYENNELPP = 0x81, /**< CayenneLPP packed data */\n\tPROT_BUF = 0x82, /**< Data packed using Protocol Buffers. NOT IMPLEMENTED */\n\tMSG_PACK = 0x83, /**< Data packed using MessagePack */\n\tBSON = 0x84, /**< Data packed using BSON. NOT IMPLEMENTED */\n\tCBOR = 0x85, /**< Data packed using CBOR. NOT IMPLEMENTED */\n\tSMILE = 0x86, /**< Data packed using SMILE. NOT IMPLEMENTED */\n\tENIGMAIOT = 0xFF\n};\n\n/**\n  * @brief Key invalidation reason definition\n  */\nenum gwInvalidateReason_t {\n\tUNKNOWN_ERROR = 0x00, /**< Unknown error. Not used by the moment */\n\tWRONG_CLIENT_HELLO = 0x01, /**< ClientHello message received was invalid */\n\t//WRONG_EXCHANGE_FINISHED = 0x02, /**< KeyExchangeFinished message received was invalid. Probably this means an error on shared key */\n\tWRONG_DATA = 0x03, /**< Data message received could not be decrypted successfuly */\n\tUNREGISTERED_NODE = 0x04, /**< Data received from an unregistered node*/\n\tKEY_EXPIRED = 0x05, /**< Node key has reached maximum validity time */\n\tKICKED = 0x06 /**< Node key has been forcibly unregistered */\n};\n\n#if defined ARDUINO_ARCH_ESP8266 || defined ARDUINO_ARCH_ESP32\n#include <functional>\ntypedef std::function<void (uint8_t* mac, uint8_t* buf, uint8_t len, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char* nodeName)> onGwDataRx_t;\n#if SUPPORT_HA_DISCOVERY\ntypedef std::function<void (const char* topic, char *message, size_t len)> onHADiscovery_t;\n#endif\ntypedef std::function<void (uint8_t* mac, uint16_t node_id, char* nodeName)> onNewNode_t;\ntypedef std::function<void (uint8_t* mac, gwInvalidateReason_t reason)> onNodeDisconnected_t;\ntypedef std::function<void (boolean status)> onWiFiManagerExit_t;\ntypedef std::function<void (void)> simpleEventHandler_t;\n\n#else\ntypedef void (*onGwDataRx_t)(uint8_t* mac, uint8_t* data, uint8_t len, uint16_t lostMessages, bool control, gatewayPayloadEncoding_t payload_type, char* nodeName);\ntypedef void (*onNewNode_t)(uint8_t* mac, uint16_t node_id, char* nodeName);\ntypedef void (*onNodeDisconnected_t)(uint8_t* mac, gwInvalidateReason_t reason);\ntypedef void (*onWiFiManagerExit_t)(boolean status);\ntypedef void (*simpleEventHandler_t)(void);\n#endif\n\ntypedef struct {\n\tuint8_t channel = DEFAULT_CHANNEL; /**< Channel used for communications*/\n\tuint8_t networkKey[KEY_LENGTH];   /**< Network key to protect key agreement*/\n\tchar networkName[NETWORK_NAME_LENGTH];   /**< Network name, used to help nodes to find gateway*/\n} gateway_config_t;\n\ntypedef struct {\n\tuint8_t addr[ENIGMAIOT_ADDR_LEN]; /**< Message address*/\n\tuint8_t data[MAX_MESSAGE_LENGTH]; /**< Message buffer*/\n    size_t len; /**< Message length*/\n    signed int rssi; /**< Message RSSI*/\n} msg_queue_item_t;\n\n/**\n  * @brief Main gateway class. Manages communication with nodes and sends data to upper layer\n  *\n  */\nclass EnigmaIOTGatewayClass {\nprotected:\n\tuint8_t myPublicKey[KEY_LENGTH]; ///< @brief Temporary public key store used during key agreement\n\tbool flashTx = false; ///< @brief `true` if Tx LED should flash\n\tvolatile bool flashRx = false; ///< @brief `true` if Rx LED should flash\n\tnode_t node; ///< @brief temporary store to keep node data while processing a message\n\tNodeList nodelist; ///< @brief Node database that keeps status and shared keys\n\tComms_halClass* comm; ///< @brief Instance of physical communication layer\n\tint8_t txled = -1; ///< @brief I/O pin to connect a led that flashes when gateway transmits data\n\tint8_t rxled = -1; ///< @brief I/O pin to connect a led that flashes when gateway receives data\n\tunsigned long txLedOnTime; ///< @brief Flash duration for Tx LED\n\tunsigned long rxLedOnTime; ///< @brief Flash duration for Rx LED\n    onGwDataRx_t notifyData; ///< @brief Callback function that will be invoked when data is received from a node\n#if SUPPORT_HA_DISCOVERY\n    onHADiscovery_t notifyHADiscovery; ///< @brief Callback function that will be invoked when HomeAssistant discovery message is received from a node\n#endif\n\tonNewNode_t notifyNewNode; ///< @brief Callback function that will be invoked when a new node is connected\n\tonNodeDisconnected_t notifyNodeDisconnection; ///< @brief Callback function that will be invoked when a node gets disconnected\n\tsimpleEventHandler_t notifyRestartRequested; ///< @brief Callback function that will be invoked when a hardware restart is requested\n\tbool useCounter = true; ///< @brief `true` if counter is used to check data messages order\n\tgateway_config_t gwConfig; ///< @brief Gateway specific configuration to be stored on flash memory\n\tchar plainNetKey[KEY_LENGTH];\n#ifdef ESP32\n\tportMUX_TYPE myMutex = portMUX_INITIALIZER_UNLOCKED; ///< @brief Handle to control critical sections\n#endif\n\tmsg_queue_item_t tempBuffer; ///< @brief Temporary storage for input message got from buffer\n\n\tEnigmaIOTRingBuffer<msg_queue_item_t>* input_queue; ///< @brief Input messages buffer. It acts as a FIFO queue\n\n\tAsyncWebServer* server; ///< @brief WebServer that holds configuration portal\n\tDNSServer* dns; ///< @brief DNS server used by configuration portal\n\tAsyncWiFiManager* wifiManager; ///< @brief Wifi configuration portal\n\tonWiFiManagerExit_t notifyWiFiManagerExit; ///< @brief Function called when configuration portal exits\n\tsimpleEventHandler_t notifyWiFiManagerStarted; ///< @brief Function called when configuration portal is started\n\n\tfriend class GatewayAPI;\n\n\t/**\n\t * @brief Activates a flag that signals that configuration has to be saved\n\t */\n\tstatic void doSave (void);\n    \n    /**\n     * @brief Activates a flag that signals that configuration has to be saved\n     */\n    static void doResetConfig (void);\n\n\n\t/**\n\t * @brief Build a **ServerHello** message and send it to node\n\t * @param key Node public key to be used on Diffie Hellman algorithm\n\t * @param node Entry in node list database where node will be registered\n\t * @return Returns `true` if ServerHello message was successfully sent. `false` otherwise\n\t */\n\tbool serverHello (const uint8_t* key, Node* node);\n\n\t/**\n\t * @brief Sends broadcast key to node if it has requested it explicitly or it has notified during handshake\n\t * @param node Entry in node list database to get destination address\n\t * @return Returns `true` if message was successfully sent. `false` otherwise\n\t */\n\tbool sendBroadcastKey (Node* node);\n\n\t/**\n\t * @brief Gets a buffer containing a **ClientHello** message and process it. This carries node public key to be used on Diffie Hellman algorithm\n\t * @param mac Address where this message was received from\n\t * @param buf Pointer to the buffer that contains the message\n\t * @param count Message length in number of bytes of ClientHello message\n\t * @param node Node entry that Client Hello message comes from\n\t * @return Returns `true` if message could be correcly processed\n\t */\n\tbool processClientHello (const uint8_t mac[ENIGMAIOT_ADDR_LEN], const uint8_t* buf, size_t count, Node* node);\n\n\t/**\n\t * @brief Starts clock sync procedure from node to gateway\n\t * @param mac Address where this message was received from\n\t * @param buf Pointer to the buffer that contains the message\n\t * @param count Message length in number of bytes of ClockRequest message\n\t * @param node Node entry that Client Hello message comes from\n\t * @return Returns `true` if message could be correcly processed\n\t */\n\tbool processClockRequest (const uint8_t mac[ENIGMAIOT_ADDR_LEN], const uint8_t* buf, size_t count, Node* node);\n\n\t/**\n\t * @brief Returns timestaps needed so that node can calculate time difference\n\t * @param node Pointer to data that corresponds to originating node\n     * @param t1 Origin clock\n     * @param t2 Received clock\n\t * @return Returns `true` if message could be correcly processed\n\t */\n    bool clockResponse (Node* node, uint64_t t1, uint64_t t2);\n\n\t/**\n\t * @brief Creates an **InvalidateKey** message and sned it. This trigger a new key agreement to start on related node\n\t * @param node Node to send Invalidate Key message to\n\t * @param reason Reason that produced key invalidation in gwInvalidateReason_t format\n\t * @return Returns `true` if message could be correcly sent\n\t */\n\tbool invalidateKey (Node* node, gwInvalidateReason_t reason);\n\n\t/**\n\t * @brief Processes data message from node\n\t * @param mac Node address\n\t * @param buf Buffer that stores received message\n\t * @param count Length of received data\n\t * @param node Node where data message comes from\n\t * @param encrypted `true` if received message is encrypted\n\t * @return Returns `true` if message could be correcly decoded\n\t */\n\tbool processDataMessage (const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t* buf, size_t count, Node* node, bool encrypted = true);\n\n\t/**\n\t * @brief Processes unencrypted data message from node\n\t * @param mac Node address\n\t * @param buf Buffer that stores received message\n\t * @param count Length of received data\n\t * @param node Node where data message comes from\n\t * @return Returns `true` if message could be correcly decoded\n\t */\n\tbool processUnencryptedDataMessage (const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t* buf, size_t count, Node* node);\n\n\t/**\n\t * @brief Builds, encrypts and sends a **DownstreamData** message.\n\t * @param node Node that downstream data message is going to\n\t * @param data Buffer to store payload to be sent\n\t * @param len Length of payload data\n\t * @param controlData Content data type if control data\n\t * @param encoding Identifies data encoding of payload. It can be RAW, CAYENNELPP, MSGPACK\n\t * @return Returns `true` if message could be correcly sent or scheduled\n\t */\n\tbool downstreamDataMessage (Node* node, const uint8_t* data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t encoding = ENIGMAIOT);\n\n\t/**\n\t* @brief Processes control message from node\n\t* @param mac Node address\n\t* @param buf Buffer that stores received message\n\t* @param count Length of received data\n\t* @param node Node where data message comes from\n\t* @return Returns `true` if message could be correcly decoded\n\t*/\n\tbool processControlMessage (const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t* buf, size_t count, Node* node);\n\n\t/**\n\t* @brief Processes new node name request fromn node\n\t* @param mac Node address\n\t* @param buf Buffer that stores received message\n\t* @param count Length of received data\n\t* @param node Node where data message comes from\n\t* @return Returns `true` if message could be correcly decoded\n\t*/\n\tbool processNodeNameSet (const uint8_t mac[ENIGMAIOT_ADDR_LEN], uint8_t* buf, size_t count, Node* node);\n\n\t/**\n\t * @brief Send back set name response\n\t * @param node Pointer to data that corresponds to originating node\n\t * @param error Result code of name set procedure (0: OK, -1: Already used, -2: Too long, -3: Empty name, -4: Message error)\n\t * @return Returns `true` if message could be correcly processed\n\t */\n\tbool nodeNameSetRespose (Node* node, int8_t error);\n\n\t/**\n\t * @brief Process every received message.\n\t *\n\t * It starts clasiffying message usint the first byte. After that it passes it to the corresponding method for decoding\n\t * @param mac Address of message sender\n\t * @param buf Buffer that stores message bytes\n     * @param count Length of message in number of bytes\n     * @param rssi RSSI of message\n     */\n\tvoid manageMessage (const uint8_t* mac, uint8_t* buf, uint8_t count, signed int rssi);\n\n\t/**\n\t * @brief Function that will be called anytime this gateway receives a message\n\t * @param mac_addr Address of message sender\n\t * @param data Buffer that stores message bytes\n     * @param len Length of message in number of bytes\n     * @param rssi RSSI of message\n     */\n\tstatic void rx_cb (uint8_t* mac_addr, uint8_t* data, uint8_t len, signed int rssi);\n\n\t/**\n\t * @brief Function that will be called anytime this gateway sends a message\n\t * to indicate status result of sending process\n\t * @param mac_addr Address of message destination\n\t * @param status Result of sending process\n\t */\n\tstatic void tx_cb (uint8_t* mac_addr, uint8_t status);\n\n\t/**\n\t * @brief Function to debug send status.\n\t * @param mac_addr Address of message sender\n\t * @param status Result status code\n\t */\n    void getStatus (uint8_t* mac_addr, uint8_t status);\n    \n    /**\n     * @brief Sends node RSSI and channel information to GwOutput, like MQTT\n     * @param node Node whose RSSI and channel information is going to be sent\n     */\n    void sendNodeRSSI (Node* node);\n\n\t/**\n\t* @brief Loads configuration from flash memory\n\t* @return Returns `true` if data was read successfuly. `false` otherwise\n\t*/\n\tbool loadFlashData ();\n\n   /**\n\t* @brief Saves configuration to flash memory\n\t* @return Returns `true` if data could be written successfuly. `false` otherwise\n\t*/\n    bool saveFlashData ();\n    \n#if SUPPORT_HA_DISCOVERY\n    /**\n    * @brief Sends a Home Assistant discovery message after receiving it from node\n    * @param address Node physical address\n    * @param data MsgPack input buffer\n    * @param len Input buffer length\n    * @param networkName EnigmaIOT network name\n    * @param nodeName Node name. Can be NULL\n    * @return Returns `true` if data could be written successfuly. `false` otherwise\n    */\n    bool sendHADiscoveryJSON (uint8_t* address, uint8_t* data, size_t len, const char* networkName, const char* nodeName);\n#endif\n    \npublic:\n   /**\n\t* @brief Gets flag that indicates if configuration should be saved\n\t* @return Returns `true` if config data should be saved. `false` otherwise\n\t*/\n\tbool getShouldSave ();\n\n   /**\n\t* @brief Gets EnigmaIOT network name\n\t* @return Returns EnigmaIOT network name\n\t*/\n\tchar* getNetworkName () {\n\t\treturn gwConfig.networkName;\n\t}\n\n   /**\n\t* @brief Gets hashed EnigmaIOT network key\n\t* @return Returns hashed EnigmaIOT network key\n\t*/\n\tchar* getNetworkKey (bool plain = false) {\n\t\tif (plain)\n\t\t\treturn (char*)(plainNetKey);\n\t\telse\n\t\t\treturn (char*)(gwConfig.networkKey);\n\t}\n\n   /**\n\t* @brief Adds a parameter to configuration portal\n\t* @param p Configuration parameter\n\t*/\n\tvoid addWiFiManagerParameter (AsyncWiFiManagerParameter* p) {\n\t\tif (wifiManager) {\n\t\t\twifiManager->addParameter (p);\n\t\t}\n\t}\n\n   /**\n\t* @brief Register callback to be called on wifi manager exit\n\t* @param handle Callback function pointer\n\t*/\n\tvoid onWiFiManagerExit (onWiFiManagerExit_t handle) {\n\t\tnotifyWiFiManagerExit = handle;\n\t}\n\n   /**\n\t* @brief Register callback to be called on wifi manager start\n\t* @param handle Callback function pointer\n\t*/\n    void onWiFiManagerStarted (simpleEventHandler_t handle) {\n\t\tnotifyWiFiManagerStarted = handle;\n\t}\n\n\t/**\n\t* @brief Starts configuration AP and web server and gets settings from it\n\t* @return Returns `true` if data was been correctly configured. `false` otherwise\n\t*/\n\tbool configWiFiManager ();\n\n\t/**\n\t * @brief Initalizes communication basic data and starts accepting node registration\n\t * @param comm Physical layer to be used on this network\n\t * @param networkKey Network key to protect shared key agreement\n\t * @param useDataCounter Indicates if a counter is going to be added to every message data to check message sequence. `true` by default\n\t */\n\tvoid begin (Comms_halClass* comm, uint8_t* networkKey = NULL, bool useDataCounter = true);\n\n\t/**\n\t * @brief This method should be called periodically for instance inside `loop()` function.\n\t * It is used for internal gateway maintenance tasks\n\t */\n\tvoid handle ();\n\n\t/**\n\t * @brief Sets a LED to be flashed every time a message is transmitted\n\t * @param led LED I/O pin\n\t * @param onTime Flash duration. 100ms by default.\n\t */\n\tvoid setTxLed (uint8_t led, time_t onTime = FLASH_LED_TIME);\n\n\t/**\n\t * @brief Sets a LED to be flashed every time a message is received\n\t * @param led LED I/O pin\n\t * @param onTime Flash duration. 100ms by default.\n\t */\n\tvoid setRxLed (uint8_t led, time_t onTime = FLASH_LED_TIME);\n\n\t/**\n\t * @brief Defines a function callback that will be called on every downlink data message that is received from a node\n\t *\n\t * Use example:\n\t * ``` C++\n\t * // First define the callback function\n\t * void processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length, uint16_t lostMessages) {\n\t *   // Do whatever you need with received data\n\t * }\n\t *\n\t * void setup () {\n\t *   .....\n\t *   // Now register function as data message handler\n\t *   EnigmaIOTNode.onDataRx (processRxData);\n\t *   .....\n\t * }\n\t *\n\t * void loop {\n\t *   .....\n\t *   EnigmaIOTNode.handle();\n\t *   .....\n\t * }\n\t * ```\n\t * @param handler Pointer to the function\n\t */\n\tvoid onDataRx (onGwDataRx_t handler) {\n\t\tnotifyData = handler;\n    }\n\n#if SUPPORT_HA_DISCOVERY\n    /**\n     * @brief Defines a function callback that will be called when a Home Assistant discovery message is received from a node\n \t * @param handler Pointer to the function\n     */\n    void onHADiscovery (onHADiscovery_t handler) {\n        notifyHADiscovery = handler;\n    }\n#endif\n\n\t/**\n\t * @brief Gets packet error rate of node that has a specific address\n\t * @param address Node address\n\t * @return Packet error rate\n\t */\n\tdouble getPER (uint8_t* address);\n\n\t/**\n\t * @brief Gets total packets sent by node that has a specific address\n\t * @param address Node address\n\t * @return Node total sent packets\n\t */\n\tuint32_t getTotalPackets (uint8_t* address);\n\n\t/**\n\t * @brief Gets number of errored packets of node that has a specific address\n\t * @param address Node address\n\t * @return Node errored packets\n\t */\n\tuint32_t getErrorPackets (uint8_t* address);\n\n\t/**\n\t * @brief Gets packet rate sent by node that has a specific address, in packets per hour\n\t * @param address Node address\n\t * @return Node packet rate\n\t */\n\tdouble getPacketsHour (uint8_t* address);\n\n\t/**\n\t * @brief Starts a downstream data message transmission\n\t * @param mac Node address\n\t * @param data Payload buffer\n\t * @param len Payload length\n\t * @param controlData Indicates if data is control data and its class\n\t * @param payload_type Identifies data encoding of payload. It can be RAW, CAYENNELPP, MSGPACK\n\t * @param nodeName Causes data to be sent to a node with this name instead of numeric address\n\t * @return Returns true if everything went ok\n\t */\n\tbool sendDownstream (uint8_t* mac, const uint8_t* data, size_t len, control_message_type_t controlData, gatewayPayloadEncoding_t payload_type = RAW, char* nodeName = NULL);\n\n\t/**\n\t * @brief Defines a function callback that will be called every time a node gets connected or reconnected\n\t *\n\t * Use example:\n\t * ``` C++\n\t * // First define the callback function\n\t * void newNodeConnected (uint8_t* mac) {\n\t *   // Do whatever you need new node address\n\t * }\n\t *\n\t * void setup () {\n\t *   .....\n\t *   // Now register function as new node condition handler\n\t *   EnigmaIOTGateway.onNewNode (newNodeConnected);\n\t *   .....\n\t * }\n\t *\n\t * void loop {\n\t *   .....\n\t *   EnigmaIOTNode.handle();\n\t *   .....\n\t * }\n\t * ```\n\t * @param handler Pointer to the function\n\t */\n\tvoid onNewNode (onNewNode_t handler) {\n\t\tnotifyNewNode = handler;\n\t}\n\n\t/**\n\t * @brief Defines a function callback that will be called every time a node is disconnected\n\t *\n\t * Use example:\n\t * ``` C++\n\t * // First define the callback function\n\t * void nodeDisconnected (uint8_t* mac, gwInvalidateReason_t reason) {\n\t *   // Do whatever you need node address and disconnection reason\n\t * }\n\t *\n\t * void setup () {\n\t *   .....\n\t *   // Now register function as new node condition handler\n\t *   EnigmaIOTGateway.onNodeDisconnected (nodeDisconnected);\n\t *   .....\n\t * }\n\t *\n\t * void loop {\n\t *   .....\n\t *   EnigmaIOTNode.handle();\n\t *   .....\n\t * }\n\t * ```\n\t * @param handler Pointer to the function\n\t */\n\tvoid onNodeDisconnected (onNodeDisconnected_t handler) {\n\t\tnotifyNodeDisconnection = handler;\n\t}\n\n\t/**\n\t * @brief Defines a function callback that will process a gateway restart request\n\t * @param handler Pointer to the function\n\t */\n\tvoid onGatewayRestartRequested (simpleEventHandler_t handler) {\n\t\tnotifyRestartRequested = handler;\n\t}\n    \n   /**\n\t * @brief Add message to input queue\n\t * @param addr Origin address\n\t * @param msg EnigmaIoT message\n     * @param len Message length\n     * @param rssi RSSI of received message\n     */\n\tbool addInputMsgQueue (const uint8_t* addr, const uint8_t* msg, size_t len, signed int rssi);\n\n\t /**\n\t * @brief Gets next item in the queue\n\t * @return Next message to be processed\n\t */\n\tmsg_queue_item_t* getInputMsgQueue (msg_queue_item_t* buffer);\n\n   /**\n\t * @brief Deletes next item in the queue\n\t */\n\tvoid popInputMsgQueue ();\n\n\t/**\n\t * @brief Gets number of active nodes\n\t * @return Number of registered nodes\n\t */\n\tint getActiveNodesNumber () {\n\t\treturn nodelist.countActiveNodes ();\n\t}\n\n\t/**\n\t * @brief Gets nodes data structure\n\t * @return All nodes data structure\n\t */\n\tNodeList* getNodes () {\n\t\treturn &nodelist;\n\t}\n\n};\n\nextern EnigmaIOTGatewayClass EnigmaIOTGateway;\n\n#endif\n\n"
  },
  {
    "path": "src/EnigmaIOTNode.cpp",
    "content": "/**\n  * @file EnigmaIOTNode.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Library to build a node for EnigmaIoT system\n  */\n\n//#define ESP8266\n\n//#ifdef ESP8266\n#include <Arduino.h>\n#include \"EnigmaIOTNode.h\"\n#include \"timeManager.h\"\n#include <FS.h>\n#include <MD5Builder.h>\n#ifdef ESP8266\n#include <Updater.h>\n#elif defined ESP32\n#include <Update.h>\n#include \"esp_wifi.h\"\n#endif\n#include <StreamString.h>\n#include <ArduinoJson.h>\n#include <regex>\n\nconst char CONFIG_FILE[] = \"/config.json\";\n\nint localLed = -1;\n\n#ifdef ESP32\nTimerHandle_t ledTimer;\n#elif defined(ESP8266)\nETSTimer ledTimer;\n#endif // ESP32\n\nbool nodeConnectionLedFlashing = false;\n\n#ifdef ESP32\nRTC_DATA_ATTR rtcmem_data_t rtcmem_data_storage; ///< @brief Context data to be kept on persistent storage\n#endif\n\n\nvoid EnigmaIOTNodeClass::resetConfig () {\n\trestartReason = CONFIG_RESET;\n\tsendRestart ();\n    FILESYSTEM.begin ();\n    FILESYSTEM.remove (CONFIG_FILE);\n    FILESYSTEM.end ();\n\tDEBUG_WARN (\"Config file %s deleted. Restarting\");\n\n\tclearRTC ();\n\tESP.restart ();\n}\n\nvoid EnigmaIOTNodeClass::sendRestart () {\n\tconst size_t len = 2;\n\tuint8_t buffer[len];\n\n\tbuffer[0] = RESTART_CONFIRM;\n\tbuffer[1] = restartReason;\n\n\tDEBUG_WARN (\"Message Len %d\\n\", len);\n\tDEBUG_WARN (\"Trying to send: %s\\n\", printHexBuffer (buffer, len));\n\tif (!EnigmaIOTNode.sendData (buffer, len, CONTROL_TYPE)) {\n\t\tDEBUG_WARN (\"Error sending restart\");\n\t} else {\n\t\tDEBUG_WARN (\"Restart sent\");\n\t}\n\t//time_t restartRequested = millis ();\n\t//while (millis () - restartRequested > 200) {\n\t//\tyield ();\n\t//}\n\n}\n\nuint32_t EnigmaIOTNodeClass::getSleepTime () {\n\tif (!node.getSleepy ()) {\n\t\treturn 0;\n\t} else {\n\t\treturn rtcmem_data.sleepTime;\n\t}\n}\n\nsigned int EnigmaIOTNodeClass::getRSSI () {\n\treturn rtcmem_data.rssi;\n}\n\nvoid EnigmaIOTNodeClass::setLed (uint8_t led, time_t onTime) {\n\tthis->led = led;\n\tledOnTime = onTime;\n}\n\nvoid EnigmaIOTNodeClass::setResetPin (int pin) {\n\tresetPin = pin;\n}\n\nvoid clearRtcData (rtcmem_data_t* data) {\n\tmemset (data->nodeKey, 0, KEY_LENGTH);\n\tdata->lastMessageCounter = 0;\n\tdata->nodeId = 0;\n\tdata->channel = 3;\n\tmemset (data->gateway, 0, 6);\n\tmemset (data->networkKey, 0, KEY_LENGTH);\n\tdata->nodeRegisterStatus = UNREGISTERED;\n\tdata->sleepy = false;\n\tdata->nodeKeyValid = false;\n\tdata->broadcastKeyRequested = false;\n\tdata->broadcastKeyValid = false;\n\tDEBUG_DBG (\"RTC Cleared\");\n}\n\nvoid dumpRtcData (rtcmem_data_t* data, uint8_t* gateway = NULL) {\n\tSerial.println (\"RTC MEM DATA:\");\n\tif (data) {\n\t\tSerial.printf (\" -- CRC: %s\\n\", printHexBuffer ((uint8_t*)&(data->crc32), sizeof (uint32_t)));\n\t\tSerial.printf (\" -- Node Key: %s\\n\", printHexBuffer (data->nodeKey, KEY_LENGTH));\n\t\tSerial.printf (\" -- Node key is %svalid\\n\", data->nodeKeyValid ? \"\" : \"NOT \");\n\t\tSerial.printf (\" -- Node status is %d: %s\\n\", data->nodeRegisterStatus, data->nodeRegisterStatus == REGISTERED ? \"REGISTERED\" : \"NOT REGISTERED\");\n\t\tSerial.printf (\" -- Node name: %s\\n\", data->nodeName);\n\t\tSerial.printf (\" -- Last message counter: %d\\n\", data->lastMessageCounter);\n\t\tSerial.printf (\" -- Last control counter: %d\\n\", data->lastControlCounter);\n\t\tSerial.printf (\" -- Last downlink counter: %d\\n\", data->lastDownlinkMsgCounter);\n\t\tSerial.printf (\" -- NodeID: %d\\n\", data->nodeId);\n\t\tSerial.printf (\" -- Channel: %d\\n\", data->channel);\n\t\tSerial.printf (\" -- RSSI: %d\\n\", data->rssi);\n\t\tSerial.printf (\" -- Network name: %s\\n\", data->networkName);\n\t\tchar gwAddress[ENIGMAIOT_ADDR_LEN * 3];\n\t\tSerial.printf (\" -- Gateway: %s\\n\", mac2str (data->gateway, gwAddress));\n\t\tSerial.printf (\" -- Comm errors: %d\\n\", data->commErrors);\n\t\tif (gateway)\n\t\t\tSerial.printf (\" -- Gateway address: %s\\n\", mac2str (gateway, gwAddress));\n\t\tSerial.printf (\" -- Network Key: %s\\n\", printHexBuffer (data->networkKey, KEY_LENGTH));\n\t\tSerial.printf (\" -- Mode: %s\\n\", data->sleepy ? \"sleepy\" : \"non sleepy\");\n\t\tSerial.printf (\" -- Broadcast key: %s\\n\", printHexBuffer (data->broadcastKey, KEY_LENGTH));\n\t\tSerial.printf (\" -- Broadcast key is %s and %s requested\\n\",\n\t\t\t\t\t   data->broadcastKeyValid ? \"valid\" : \"not valid\",\n\t\t\t\t\t   data->broadcastKeyRequested ? \"is\" : \"is not\");\n\t} else {\n\t\tSerial.println (\"rtcmem_data pointer is NULL\");\n\t}\n}\n\n#if USE_FLASH_INSTEAD_RTC\nconst char* RTC_DATA_FILE = \"/context.bin\";\nbool EnigmaIOTNodeClass::loadRTCData () {\n    //FILESYSTEM.remove (RTC_DATA_FILE); // Only for testing\n\t//bool file_correct = false;\n\tclock_t start_load = millis ();\n    FILESYSTEM.begin ();\n\n\trtcmem_data_t context;\n\n    if (FILESYSTEM.exists (RTC_DATA_FILE)) {\n\t\tDEBUG_DBG (\"Opening %s file\", RTC_DATA_FILE);\n        File contextFile = FILESYSTEM.open (RTC_DATA_FILE, \"r\");\n\t\tif (contextFile) {\n\t\t\tDEBUG_DBG (\"%s opened\", RTC_DATA_FILE);\n\t\t\tsize_t size = contextFile.size ();\n\t\t\tif (size != sizeof (rtcmem_data_t)) {\n\t\t\t\tDEBUG_WARN (\"File size error. Expected %d bytes. Got %d\", sizeof (rtcmem_data_t), size);\n\t\t\t\tcontextFile.close ();\n                FILESYSTEM.remove (RTC_DATA_FILE);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tsize = contextFile.readBytes ((char*)&context, sizeof (rtcmem_data_t));\n\t\t\tcontextFile.close ();\n\t\t\tif (size != sizeof (rtcmem_data_t)) {\n\t\t\t\tDEBUG_WARN (\"File read error. Expected %d bytes. Got %d\", sizeof (rtcmem_data_t), size);\n\t\t\t\t//contextFile.close ();\n                FILESYSTEM.remove (RTC_DATA_FILE);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!checkCRC ((uint8_t*)context.nodeKey, sizeof (rtcmem_data_t) - sizeof (uint32_t), &context.crc32)) {\n\t\t\t\tDEBUG_WARN (\"RTC Data is not valid. Wrong CRC\");\n\t\t\t\t//contextFile.close ();\n                FILESYSTEM.remove (RTC_DATA_FILE);\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tmemcpy (&rtcmem_data, &context, sizeof (rtcmem_data_t));\n\t\t\t\tnode.setEncryptionKey (rtcmem_data.nodeKey);\n\t\t\t\tnode.setKeyValid (rtcmem_data.nodeKeyValid);\n\t\t\t\tif (rtcmem_data.nodeKeyValid)\n\t\t\t\t\tnode.setKeyValidFrom (millis ());\n\t\t\t\tnode.setLastMessageCounter (rtcmem_data.lastMessageCounter);\n\t\t\t\tnode.setLastControlCounter (rtcmem_data.lastControlCounter);\n\t\t\t\tnode.setLastDownlinkMsgCounter (rtcmem_data.lastDownlinkMsgCounter);\n\t\t\t\tnode.setLastMessageTime ();\n\t\t\t\tnode.setNodeId (rtcmem_data.nodeId);\n\t\t\t\t// setChannel (rtcmem_data.channel);\n\t\t\t\t//channel = rtcmem_data.channel;\n\t\t\t\t//memcpy (gateway, rtcmem_data.gateway, comm->getAddressLength ()); // setGateway\n\t\t\t\t//memcpy (networkKey, rtcmem_data.networkKey, KEY_LENGTH);\n\t\t\t\tnode.setSleepy (rtcmem_data.sleepy);\n\t\t\t\tnode.setNodeName (rtcmem_data.nodeName);\n\t\t\t\t// set default sleep time if it was not set\n\t\t\t\tif (rtcmem_data.sleepy && rtcmem_data.sleepTime == 0) {\n\t\t\t\t\trtcmem_data.sleepTime = DEFAULT_SLEEP_TIME;\n\t\t\t\t}\n\t\t\t\tnode.setStatus (rtcmem_data.nodeRegisterStatus);\n\t\t\t\tDEBUG_DBG (\"Set %s mode\", node.getSleepy () ? \"sleepy\" : \"non sleepy\");\n#if DEBUG_LEVEL >= VERBOSE\n\t\t\t\tdumpRtcData (&rtcmem_data);\n#endif\n\t\t\t}\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Error opening file %s\", RTC_DATA_FILE);\n            FILESYSTEM.remove (RTC_DATA_FILE);\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tDEBUG_WARN (\"%s do not exist\", RTC_DATA_FILE);\n\t\treturn false;\n\t}\n\n\tDEBUG_DBG (\"Load process finished in %lu ms\", millis () - start_load);\n\n\treturn true;\n}\n#else\nbool EnigmaIOTNodeClass::loadRTCData () {\n#ifdef ESP8266\n\tif (ESP.rtcUserMemoryRead (RTC_ADDRESS, (uint32_t*)&rtcmem_data, sizeof (rtcmem_data))) {\n\t\tDEBUG_VERBOSE (\"Read RTCData: %s\", printHexBuffer ((uint8_t*)&rtcmem_data, sizeof (rtcmem_data)));\n\t} else {\n\t\tDEBUG_ERROR (\"Error reading RTC memory\");\n\t\tclearRtcData (&rtcmem_data);\n\t\treturn false;\n\t}\n#elif defined ESP32\n\tmemcpy ((uint8_t*)&rtcmem_data, (uint8_t*)&rtcmem_data_storage, sizeof (rtcmem_data));\n\tDEBUG_VERBOSE (\"----- Read RTCData: %s\", printHexBuffer ((uint8_t*)&rtcmem_data, sizeof (rtcmem_data)));\n#endif\n\tif (!checkCRC ((uint8_t*)rtcmem_data.nodeKey, sizeof (rtcmem_data) - sizeof (uint32_t), &rtcmem_data.crc32)) {\n\t\tDEBUG_DBG (\"RTC Data is not valid\");\n\t\tclearRtcData (&rtcmem_data);\n\t\treturn false;\n\t} else {\n\t\tnode.setEncryptionKey (rtcmem_data.nodeKey);\n\t\tnode.setKeyValid (rtcmem_data.nodeKeyValid);\n\t\tif (rtcmem_data.nodeKeyValid)\n\t\t\tnode.setKeyValidFrom (millis ());\n\t\tnode.setLastMessageCounter (rtcmem_data.lastMessageCounter);\n\t\tnode.setLastControlCounter (rtcmem_data.lastControlCounter);\n\t\tnode.setLastDownlinkMsgCounter (rtcmem_data.lastDownlinkMsgCounter);\n\t\tnode.setLastMessageTime ();\n\t\tnode.setNodeId (rtcmem_data.nodeId);\n\t\t// setChannel (rtcmem_data.channel);\n\t\t//channel = rtcmem_data.channel;\n\t\t//memcpy (gateway, rtcmem_data.gateway, comm->getAddressLength ()); // setGateway\n\t\t//memcpy (networkKey, rtcmem_data.networkKey, KEY_LENGTH);\n\t\tnode.setSleepy (rtcmem_data.sleepy);\n\t\tnode.setNodeName (rtcmem_data.nodeName);\n\t\t// set default sleep time if it was not set\n\t\tif (rtcmem_data.sleepy && rtcmem_data.sleepTime == 0) {\n\t\t\trtcmem_data.sleepTime = DEFAULT_SLEEP_TIME;\n\t\t}\n\t\tnode.setStatus (rtcmem_data.nodeRegisterStatus);\n\t\tDEBUG_DBG (\"Set %s mode\", node.getSleepy () ? \"sleepy\" : \"non sleepy\");\n#if DEBUG_LEVEL >= VERBOSE\n\t\tdumpRtcData (&rtcmem_data);\n#endif\n\n\t}\n\treturn true;\n\n}\n#endif\n\nbool EnigmaIOTNodeClass::loadFlashData () {\n    //FILESYSTEM.remove (CONFIG_FILE); // Only for testing\n\tbool json_correct = false;\n\n    if (FILESYSTEM.exists (CONFIG_FILE)) {\n\t\tDEBUG_DBG (\"Opening %s file\", CONFIG_FILE);\n        File configFile = FILESYSTEM.open (CONFIG_FILE, \"r\");\n\t\tif (configFile) {\n\t\t\tDEBUG_DBG (\"%s opened\", CONFIG_FILE);\n\t\t\t//size_t size = configFile.size ();\n\n\t\t\tconst size_t capacity = JSON_ARRAY_SIZE (32) + JSON_OBJECT_SIZE (7) + 110;\n\t\t\tDynamicJsonDocument doc (capacity);\n\t\t\tDeserializationError error = deserializeJson (doc, configFile);\n\t\t\tif (error) {\n\t\t\t\tDEBUG_ERROR (\"Failed to parse file\");\n\t\t\t} else {\n\t\t\t\tDEBUG_DBG (\"JSON file parsed\");\n\t\t\t}\n            configFile.close ();\n            \n            if (doc.containsKey(\"type\")){\n                if (!strcmp(\"node\",doc[\"type\"])) {\n                    if (doc.containsKey (\"networkName\") && doc.containsKey (\"networkKey\")\n                        && doc.containsKey (\"sleepTime\")) {\n                        json_correct = true;\n                    }\n                } else {\n                    FILESYSTEM.remove (CONFIG_FILE);\n                    DEBUG_ERROR (\"Wrong configuration. Removing file %s\", CONFIG_FILE);\n                    return false;\n                }\n            }\n\n\t\t\tstrlcpy (rtcmem_data.networkName, doc[\"networkName\"] | \"\", sizeof (rtcmem_data.networkName));\n\t\t\trtcmem_data.sleepTime = doc[\"sleepTime\"].as<int> ();\n\t\t\trtcmem_data.sleepy = !(rtcmem_data.sleepTime == 0);\n\n\t\t\tmemset (rtcmem_data.networkKey, 0, KEY_LENGTH);\n\t\t\tJsonArray netKeyJson = doc[\"networkKey\"];\n\t\t\tif (netKeyJson.size () != KEY_LENGTH) {\n\t\t\t\tDEBUG_WARN (\"Error in stored network key. Expected length: %d, actual length %d\", KEY_LENGTH, netKeyJson.size ());\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (int i = 0; i < KEY_LENGTH; i++) {\n\t\t\t\trtcmem_data.networkKey[i] = netKeyJson[i].as<int> ();\n\t\t\t}\n\t\t\tDEBUG_DBG (\"Network Key dump: %s\", printHexBuffer (rtcmem_data.networkKey, KEY_LENGTH));\n\t\t\tstrncpy ((char*)rtcmem_data.nodeName, doc[\"nodeName\"] | \"\", NODE_NAME_LENGTH);\n\t\t\tnode.setNodeName (rtcmem_data.nodeName);\n\n\t\t\tuint8_t gwAddr[ENIGMAIOT_ADDR_LEN];\n\t\t\tchar gwAddrStr[ENIGMAIOT_ADDR_LEN * 3];\n\t\t\tif (doc.containsKey (\"gateway\")) {\n\t\t\t\tstrncpy (gwAddrStr, doc[\"gateway\"], sizeof (gwAddrStr));\n\t\t\t\tstr2mac (gwAddrStr, gwAddr);\n\t\t\t\tmemcpy (rtcmem_data.gateway, gwAddr, 6);\n\t\t\t}\n\n\t\t\tif (json_correct) {\n\t\t\t\tDEBUG_VERBOSE (\"Configuration successfuly read\");\n\t\t\t}\n\n\t\t\tDEBUG_DBG (\"==== EnigmaIOT Node Configuration ====\");\n\t\t\tDEBUG_DBG (\"Network name: %s\", rtcmem_data.networkName);\n\t\t\tDEBUG_DBG (\"Sleep time: %u\", rtcmem_data.sleepTime);\n\t\t\tDEBUG_DBG (\"Node name: %s\", rtcmem_data.nodeName);\n\t\t\tDEBUG_DBG (\"Gateway: %s\", gwAddrStr);\n\t\t\tDEBUG_VERBOSE (\"Network key: %s\", printHexBuffer (rtcmem_data.networkKey, KEY_LENGTH));\n\n\t\t\tString output;\n\t\t\tserializeJsonPretty (doc, output);\n\n\t\t\tDEBUG_DBG (\"JSON file %s\", output.c_str ());\n\t\t}\n\t} else {\n\t\tDEBUG_WARN (\"%s do not exist\", CONFIG_FILE);\n\t}\n\n\treturn json_correct;\n}\n\nbool EnigmaIOTNodeClass::saveFlashData (bool fsOpen) {\n\tif (configCleared)\n\t\treturn false;\n\n\tif (!fsOpen)\n        FILESYSTEM.begin ();\n\n    File configFile = FILESYSTEM.open (CONFIG_FILE, \"w\");\n\tif (!configFile) {\n\t\tDEBUG_WARN (\"failed to open config file %s for writing\", CONFIG_FILE);\n\t\treturn false;\n\t}\n\n\tconst size_t capacity = JSON_ARRAY_SIZE (32) + JSON_OBJECT_SIZE (7) + 110;\n\tDynamicJsonDocument doc (capacity);\n\n\tchar gwAddrStr[ENIGMAIOT_ADDR_LEN * 3];\n\tmac2str (rtcmem_data.gateway, gwAddrStr);\n\n    doc[\"type\"] = \"node\";\n\tdoc[\"networkName\"] = rtcmem_data.networkName;\n\tJsonArray netKeyJson = doc.createNestedArray (\"networkKey\");\n\tfor (int i = 0; i < KEY_LENGTH; i++) {\n\t\tnetKeyJson.add (rtcmem_data.networkKey[i]);\n\t}\n\tdoc[\"sleepTime\"] = rtcmem_data.sleepTime;\n\tdoc[\"gateway\"] = gwAddrStr;\n\tdoc[\"nodeName\"] = rtcmem_data.nodeName;\n\n\tif (serializeJson (doc, configFile) == 0) {\n\t\tDEBUG_ERROR (\"Failed to write to file\");\n\t\tconfigFile.close ();\n        //FILESYSTEM.remove (CONFIG_FILE); // Testing\n\t\treturn false;\n\t}\n\n\tString output;\n\tserializeJsonPretty (doc, output);\n\n\tDEBUG_DBG (\"%s\", output.c_str ());\n\n\tconfigFile.flush ();\n\t//size_t size = configFile.size ();\n\n\tconfigFile.close ();\n    DEBUG_DBG (\"Configuration saved to flash. %u bytes\", configFile.size ());\n#if DEBUG_LEVEL >= DBG\n\tdumpRtcData (&rtcmem_data);\n#endif\t\n\tif (!fsOpen)\n        FILESYSTEM.end ();\n\treturn true;\n}\n\n#if USE_FLASH_INSTEAD_RTC\nbool EnigmaIOTNodeClass::saveRTCData () {\n\tclock_t start_save = millis ();\n\tif (configCleared)\n\t\treturn false;\n\trtcmem_data.crc32 = calculateCRC32 ((uint8_t*)rtcmem_data.nodeKey, sizeof (rtcmem_data) - sizeof (uint32_t));\n    File contextFile = FILESYSTEM.open (RTC_DATA_FILE, \"w\");\n\tif (!contextFile) {\n\t\tDEBUG_WARN (\"failed to open config file %s for writing\", RTC_DATA_FILE);\n\t\treturn false;\n\t}\n\tcontextFile.write ((uint8_t*)&rtcmem_data, sizeof (rtcmem_data));\n\tcontextFile.flush ();\n\tsize_t size = contextFile.size ();\n\tcontextFile.close ();\n\tDEBUG_DBG (\"Write configuration data to file %s in flash. %u bytes\", RTC_DATA_FILE, size);\n\tDEBUG_VERBOSE (\"Write RTCData: %s\", printHexBuffer ((uint8_t*)&rtcmem_data, sizeof (rtcmem_data)));\n#if DEBUG_LEVEL >= VERBOSE\n\tdumpRtcData (&rtcmem_data);\n#endif\n\tDEBUG_DBG (\"Save process finished in %lu ms\", millis () - start_save);\n\n\treturn true;\n}\n\n#else\n\nbool EnigmaIOTNodeClass::saveRTCData () {\n\tif (configCleared)\n\t\treturn false;\n\tif (protectOTA || otaRunning) {\n\t\tDEBUG_WARN (\"Cannot write to RTC memory\");\n\t\treturn true;\n\t}\n#ifdef ESP8266\n\trtcmem_data.crc32 = calculateCRC32 ((uint8_t*)rtcmem_data.nodeKey, sizeof (rtcmem_data) - sizeof (uint32_t));\n\tif (ESP.rtcUserMemoryWrite (RTC_ADDRESS, (uint32_t*)&rtcmem_data, sizeof (rtcmem_data))) {\n\t\tDEBUG_DBG (\"Write configuration data to RTC memory\");\n#if DEBUG_LEVEL >= VERBOSE\n\t\tDEBUG_VERBOSE (\"Write RTCData: %s\", printHexBuffer ((uint8_t*)&rtcmem_data, sizeof (rtcmem_data)));\n\t\tdumpRtcData (&rtcmem_data);\n#endif\n\t\treturn true;\n\t}\n#elif defined ESP32\n\trtcmem_data.crc32 = calculateCRC32 ((uint8_t*)rtcmem_data.nodeKey, sizeof (rtcmem_data) - sizeof (uint32_t));\n\tmemcpy ((uint8_t*)&rtcmem_data_storage, (uint8_t*)&rtcmem_data, sizeof (rtcmem_data));\n\trtcmem_data_storage.crc32 = calculateCRC32 ((uint8_t*)rtcmem_data_storage.nodeKey, sizeof (rtcmem_data) - sizeof (uint32_t));\n\tDEBUG_VERBOSE (\"Write RTCData: %s\", printHexBuffer ((uint8_t*)&rtcmem_data, sizeof (rtcmem_data)));\n#if DEBUG_LEVEL >= VERBOSE\n\tdumpRtcData (&rtcmem_data);\n#endif\n\treturn true;\n#endif\n\treturn false;\n}\n#endif\n\nvoid EnigmaIOTNodeClass::clearFlash () {\n    if (!FILESYSTEM.begin ()) {\n        DEBUG_ERROR (\"Error on FILESYSTEM.begin()\");\n    }\n    \n    DEBUG_WARN (\"About to format Flash\");\n    if (FILESYSTEM.format()) {\n        DEBUG_WARN (\"Filesystem formatted\");\n    }\n    /*if (FILESYSTEM.remove (CONFIG_FILE)) {\n\t\tDEBUG_DBG (\"%s deleted\", CONFIG_FILE);\n\t}*/ else {\n        DEBUG_ERROR (\"Error on FILESYSTEM.format()\", CONFIG_FILE);\n\t}\n    FILESYSTEM.end ();\n}\n\nbool EnigmaIOTNodeClass::configWiFiManager (rtcmem_data_t* data) {\n\tAsyncWebServer server (80);\n\tDNSServer dns;\n\n\t//regex_t regex;\n\tbool regexResult = true;\n\n\t//char networkKey[33] = \"\";\n\tchar sleepy[5] = \"10\";\n\t//char networkName[NETWORK_NAME_LENGTH] = \"\";\n\tchar nodeName[NODE_NAME_LENGTH] = \"\";\n\n\twifiManager = new AsyncWiFiManager (&server, &dns);\n#if DEBUG_LEVEL == NONE\n    wifiManager->setDebugOutput (false);\n#endif\n\n\t//AsyncWiFiManagerParameter networkNameParam (\"netname\", \"Network name\", networkName, (int)NETWORK_NAME_LENGTH, \"required type=\\\"text\\\" maxlength=20\");\n\t//AsyncWiFiManagerParameter netKeyParam (\"netkey\", \"NetworkKey\", networkKey, 33, \"required type=\\\"password\\\" maxlength=32\");\n\tAsyncWiFiManagerParameter sleepyParam (\"sleepy\", \"Sleep Time\", sleepy, 5, \"required type=\\\"number\\\" min=\\\"0\\\" max=\\\"13600\\\" step=\\\"1\\\"\");\n\tAsyncWiFiManagerParameter nodeNameParam (\"nodename\", \"Node Name\", nodeName, NODE_NAME_LENGTH, \"type=\\\"text\\\" pattern=\\\"^[^/\\\\\\\\]+$\\\" maxlength=32\");\n\n\twifiManager->setCustomHeadElement (\"<style>input:invalid {border: 2px dashed red;input:valid{border: 2px solid black;}</style>\");\n\t//wifiManager->addParameter (&networkNameParam);\n\t//wifiManager->addParameter (&netKeyParam);\n\twifiManager->addParameter (&sleepyParam);\n\twifiManager->addParameter (&nodeNameParam);\n\n\tif (notifyWiFiManagerStarted) {\n\t\tnotifyWiFiManagerStarted ();\n\t}\n\twifiManager->setConnectTimeout (30);\n\twifiManager->setBreakAfterConfig (true);\n\twifiManager->setTryConnectDuringConfigPortal (false);\n\tchar apname[64];\n#ifdef ESP8266\n\tsnprintf (apname, 64, \"EnigmaIoTNode%06x\", ESP.getChipId ());\n\t//String apname = \"EnigmaIoTNode\" + String (ESP.getChipId (), 16);\n#elif defined ESP32\n\tsnprintf (apname, 64, \"EnigmaIoTNode%06x\", (uint32_t)(ESP.getEfuseMac () & (uint64_t)0x0000000000FFFFFF));\n\t//String apname = \"EnigmaIoTNode\" + String (ESP.getEfuseMac (), 16);\n#endif\n\tDEBUG_VERBOSE (\"Start AP: %s\", apname);\n\n\tboolean result = wifiManager->startConfigPortal (apname, NULL);\n\tif (result) {\n\t\tDEBUG_DBG (\"==== Config Portal result ====\");\n\n\t\tDEBUG_DBG (\"Network Name: %s\", WiFi.SSID ().c_str ());\n#ifdef ESP8266\n\t\tstation_config wifiConfig;\n\t\tif (!wifi_station_get_config (&wifiConfig)) {\n\t\t\tDEBUG_WARN (\"Error getting WiFi config\");\n\t\t}\n\t\tDEBUG_DBG (\"WiFi password: %s\", wifiConfig.password);\n\t\tconst char* netkey = (char*)(wifiConfig.password);\n#elif defined ESP32\n        wifi_config_t wifiConfig;\n        if (esp_wifi_get_config (WIFI_IF_STA, &wifiConfig)) {\n            DEBUG_WARN (\"Error getting WiFi config\");\n        }\n        DEBUG_WARN (\"WiFi password: %.*s\", 64, wifiConfig.sta.password);\n        const char* netkey = (char*)(wifiConfig.sta.password);\n#endif\n\t\tDEBUG_DBG (\"Network Key: %s\", netkey);\n\t\tDEBUG_DBG (\"Sleppy time: %s\", sleepyParam.getValue ());\n\t\tDEBUG_DBG (\"Node Name: %s\", nodeNameParam.getValue ());\n\n\t\tdata->lastMessageCounter = 0;\n\n\t\tstrncpy ((char*)(data->networkKey), netkey, KEY_LENGTH);\n\t\tDEBUG_DBG (\"Stored network key before hash: %.*s\", KEY_LENGTH, (char*)(data->networkKey));\n\n\t\tCryptModule::getSHA256 (data->networkKey, KEY_LENGTH);\n\t\tDEBUG_DBG (\"Calculated network key: %s\", printHexBuffer (data->networkKey, KEY_LENGTH));\n\t\tdata->nodeRegisterStatus = UNREGISTERED;\n\n\t\t//const char* netName = WiFi.SSID ().c_str ();\n\t\tDEBUG_DBG (\"Temp network name: %s\", WiFi.SSID ().c_str ());\n\t\tstrncpy (data->networkName, WiFi.SSID ().c_str (), NETWORK_NAME_LENGTH - 1);\n\t\tDEBUG_DBG (\"Stored network name: %s\", data->networkName);\n\n#ifdef ESP32\n\t\tstd::regex sleepTimeRegex (\"(\\\\d)+\");\n\t\tregexResult = std::regex_match (sleepyParam.getValue (), sleepTimeRegex);\n\t\tif (regexResult) {\n#endif\n\t\t\tDEBUG_DBG (\"Sleep time check ok\");\n\t\t\tint sleepyVal = atoi (sleepyParam.getValue ());\n\t\t\tif (sleepyVal > 0) {\n\t\t\t\tdata->sleepy = true;\n\t\t\t}\n\t\t\tdata->sleepTime = sleepyVal;\n#ifdef ESP32\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Sleep time parameter error\");\n\t\t\tresult = false;\n\t\t}\n#endif\n\n\t\t//char tempStr[NODE_NAME_LENGTH];\n\t\t//strncpy (tempStr, nodeNameParam.getValue (), NODE_NAME_LENGTH - 1);\n\n#ifdef ESP32\n\t\tstd::regex nodeNameRegex (\"^[^/\\\\\\\\]+$\");\n\t\tregexResult = std::regex_match (nodeNameParam.getValue (), nodeNameRegex);\n#elif defined ESP8266\n\t\tif (strstr (nodeNameParam.getValue (), \"/\")) {\n\t\t\tregexResult = false;\n\t\t\tDEBUG_WARN (\"Node name parameter error. Contains '/'\");\n\t\t} else if (strstr (nodeNameParam.getValue (), \"\\\\\")) {\n\t\t\tregexResult = false;\n\t\t\tDEBUG_WARN (\"Node name parameter error. Contains '\\\\'\");\n\t\t}\n#endif\n\t\tif (regexResult) {\n\t\t\tstrncpy (data->nodeName, nodeNameParam.getValue (), NODE_NAME_LENGTH);\n\t\t\tDEBUG_DBG (\"Node name: %s\", data->nodeName);\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Node name parameter error\");\n\t\t\tresult = false;\n\t\t}\n\n\t\tdata->nodeKeyValid = false;\n\t\tdata->crc32 = calculateCRC32 ((uint8_t*)(data->nodeKey), sizeof (rtcmem_data_t) - sizeof (uint32_t));\n\t}\n\n\tif (notifyWiFiManagerExit) {\n\t\tnotifyWiFiManagerExit (result);\n\t}\n    \n    delete (wifiManager);\n\n\treturn result;\n}\n\nvoid flashLed (void* led) {\n#ifdef ESP8266\n\tdigitalWrite (*(int*)led, !digitalRead (*(int*)led));\n#elif defined ESP32\n\tbool led_on = !digitalRead (localLed);\n\tDEBUG_VERBOSE (\"Change LED %d to %d\", localLed, led_on);\n\tdigitalWrite (localLed, led_on);\n#endif\n}\n\nvoid startFlash (time_t period) {\n#ifdef ESP32\n\t//static int id = 1;\n\tDEBUG_INFO (\"Start flash\");\n\tif (!nodeConnectionLedFlashing) {\n\t\tnodeConnectionLedFlashing = true;\n\t\tledTimer = xTimerCreate (\"led_flash\", pdMS_TO_TICKS (period), pdTRUE, (void*)0, &flashLed);\n\t\tif (xTimerStart (ledTimer, 0) != pdPASS) {\n\t\t\tDEBUG_WARN (\"Problem starting LED timer\");\n\t\t}\n\t}\n#elif defined (ESP8266)\n\tets_timer_disarm (&ledTimer);\n\tif (!nodeConnectionLedFlashing) {\n\t\tnodeConnectionLedFlashing = true;\n\t\tets_timer_arm_new (&ledTimer, period, true, true);\n\t}\n#endif // ESP32\n}\n\nvoid stopFlash () {\n#ifdef ESP32\n\tif (nodeConnectionLedFlashing) {\n\t\tnodeConnectionLedFlashing = false;\n\t\txTimerStop (ledTimer, 0);\n\t\txTimerDelete (ledTimer, 0);\n\t}\n#elif defined(ESP8266)\n\tif (nodeConnectionLedFlashing) {\n\t\tnodeConnectionLedFlashing = false;\n\t\tets_timer_disarm (&ledTimer);\n\t\tdigitalWrite (localLed, LED_OFF);\n\t}\n#endif // ESP32\n}\n\nvoid EnigmaIOTNodeClass::startIdentifying (time_t period) {\n\tidentifyStart = millis ();\n\tindentifying = true;\n\tstartFlash (period);\n}\n\nvoid EnigmaIOTNodeClass::stopIdentifying () {\n\tindentifying = false;\n\tstopFlash ();\n}\n\nvoid EnigmaIOTNodeClass::checkResetButton () {\n\tif (resetPin > 0) {\n\t\tpinMode (resetPin, INPUT_PULLUP);\n\t\tdigitalWrite (led, LED_ON); // Turn on LED\n\t\tif (digitalRead (resetPin) == LOW) { // If pin is grounded\n\t\t\ttime_t resetPinGrounded = millis ();\n\t\t\twhile (digitalRead (resetPin) == LOW) {\n\t\t\t\tif (millis () - resetPinGrounded > RESET_PIN_DURATION) {\n                    DEBUG_WARN (\"Produce reset. Reset pin %d\", resetPin);\n\t\t\t\t\tdigitalWrite (led, LED_OFF); // Turn off LED\n\t\t\t\t\tstartFlash (50);\n\t\t\t\t\tclearFlash ();\n\t\t\t\t\tclearRTC ();\n\t\t\t\t\tdelay (5000);\n\t\t\t\t\tESP.restart ();\n\t\t\t\t}\n\t\t\t\tdelay (50);\n\t\t\t}\n\t\t}\n\t}\n}\n\nvoid EnigmaIOTNodeClass::begin (Comms_halClass* comm, uint8_t* gateway, uint8_t* networkKey, bool useCounter, bool sleepy) {\n\tcycleStartedTime = 0; // Calculate time from start\n\tpinMode (led, OUTPUT);\n#ifdef ESP8266\n\tets_timer_setfn (&ledTimer, flashLed, (void*)&led);\n#endif\n\tlocalLed = led;\n\n\tcheckResetButton ();\n\n\t// startFlash (100); // Do not flash during setup for less battery drain\n\n\tdigitalWrite (led, LED_OFF);\n\n\tthis->comm = comm;\n\n\tthis->useCounter = useCounter;\n\n\tnode.setInitAsSleepy (sleepy);\n\tnode.setSleepy (sleepy);\n\tDEBUG_DBG (\"Set %s mode: %s\", node.getSleepy () ? \"sleepy\" : \"non sleepy\", sleepy ? \"sleepy\" : \"non sleepy\");\n\n\tif (loadRTCData () && rtcmem_data.commErrors < COMM_ERRORS_BEFORE_SCAN) { // If data present on RTC node has waked up or it is just configured, continue\n#if DEBUG_LEVEL >= DBG\n\t\tchar gwAddress[ENIGMAIOT_ADDR_LEN * 3];\n\t\tDEBUG_DBG (\"RTC data loaded. Gateway: %s\", mac2str (rtcmem_data.gateway, gwAddress));\n\t\tDEBUG_DBG (\"Own address: %s\", mac2str (node.getMacAddress (), gwAddress));\n#endif\n\t} else { // No RTC data, first boot or not configured\n\t\tif (gateway && networkKey) { // If connection data has been passed to library\n\t\t\tDEBUG_DBG (\"EnigmaIot started with config data con begin() call\");\n\t\t\tmemcpy (rtcmem_data.gateway, gateway, comm->getAddressLength ()); // setGateway\n\t\t\tmemcpy (rtcmem_data.networkKey, networkKey, KEY_LENGTH);          // setNetworkKey\n\t\t\tCryptModule::getSHA256 (rtcmem_data.networkKey, KEY_LENGTH);\n\t\t\trtcmem_data.nodeKeyValid = false;\n\t\t\t//rtcmem_data.channel = channel;\n\t\t\trtcmem_data.sleepy = sleepy;\n\t\t\trtcmem_data.nodeRegisterStatus = UNREGISTERED;\n\t\t} else { // Try read from flash\n\t\t\tDEBUG_INFO (\"Starting from Flash\");\n            if (!FILESYSTEM.begin ()) {\n\t\t\t\tDEBUG_ERROR (\"Error mounting flash\");\n                if (FILESYSTEM.format ()) {\n                    DEBUG_INFO (\"FILESYSTEM formatted\");\n\t\t\t\t} else {\n                    DEBUG_ERROR (\"Error formatting FILESYSTEM\");\n\t\t\t\t}\n\t\t\t\tdelay (2500);\n\t\t\t\tESP.restart ();\n\t\t\t\t//return;\n\t\t\t} else {\n                DEBUG_INFO (\"FILESYSTEM mounted\");\n\t\t\t}\n\t\t\tif (loadFlashData ()) { // If data present on flash, read and continue\n\t\t\t\tnode.setStatus (UNREGISTERED);\n\t\t\t\tDEBUG_DBG (\"Flash data loaded\");\n\t\t\t\tuint8_t prevGwAddr[ENIGMAIOT_ADDR_LEN];\n\t\t\t\tmemcpy (prevGwAddr, rtcmem_data.gateway, 6);\n\t\t\t\tif (searchForGateway (&rtcmem_data, true)) {\n\t\t\t\t\t//DEBUG_DBG (\"Found gateway. Storing\");\n\t\t\t\t\trtcmem_data.commErrors = 0;\n\t\t\t\t}\n\t\t\t} else { // Configuration empty. Enter config AP mode\n\t\t\t\tDEBUG_DBG (\"No flash data present. Starting Configuration AP\");\n\t\t\t\tbool result = configWiFiManager (&rtcmem_data);\n\t\t\t\tif (result) {\n\t\t\t\t\tDEBUG_DBG (\"Got configuration. Searching for Gateway\");\n\t\t\t\t\tif (searchForGateway (&rtcmem_data, true)) {\n\t\t\t\t\t\tDEBUG_DBG (\"Found EnigmaIOT Gateway. Storing configuration\");\n\t\t\t\t\t\tif (!saveFlashData (true)) {\n\t\t\t\t\t\t\tDEBUG_ERROR (\"Error saving data on flash\");\n\t\t\t\t\t\t}\n                        FILESYSTEM.end ();\n\t\t\t\t\t\tESP.restart ();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n                    FILESYSTEM.end ();\n                    if (node.getSleepy ()) {\n                        DEBUG_WARN (\"No gateway found. Go to sleep for 120 seconds\");\n                        ESP.deepSleep (120);\n                    } else {\n                        DEBUG_WARN (\"No gateway found. Restarting\");\n                        ESP.restart ();\n                    }\n                } else { // Configuration error\n\t\t\t\t\tDEBUG_ERROR (\"Configuration error. Restarting\");\n\t\t\t\t\tESP.restart ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinitWiFi (rtcmem_data.channel, rtcmem_data.networkName);\n\tcomm->begin (rtcmem_data.gateway, rtcmem_data.channel);\n\tcomm->onDataRcvd (rx_cb);\n\tcomm->onDataSent (tx_cb);\n\n#ifdef ESP8266\n\twifi_set_channel (rtcmem_data.channel);\n#elif defined ESP32\n\tesp_err_t err_ok;\n\tif ((err_ok = esp_wifi_set_promiscuous (true))) {\n\t\tDEBUG_ERROR (\"Error setting promiscuous mode: %s\", esp_err_to_name (err_ok));\n\t}\n\tif ((err_ok = esp_wifi_set_channel (rtcmem_data.channel, WIFI_SECOND_CHAN_NONE))) {\n\t\tDEBUG_ERROR (\"Error setting wifi channel: %s\", esp_err_to_name (err_ok));\n\t}\n\tif ((err_ok = esp_wifi_set_promiscuous (false))) {\n\t\tDEBUG_ERROR (\"Error setting promiscuous mode off: %s\", esp_err_to_name (err_ok));\n\t}\n#endif\n\n\tDEBUG_DBG (\"Comms started. Channel %u\", rtcmem_data.channel);\n}\n\n#ifdef ESP32\nint scanGatewaySSID (char* name, int& wifiIndex) {\n\tuint32_t scanStarted;\n\tint16_t numAP = 0;\n\tconst int MAX_INDEXES = 10;\n\tint numFound = 0;\n\tint indexes[MAX_INDEXES];\n\n\tif (!name) {\n\t\tDEBUG_WARN (\"SSID Name is NULL\");\n\t\treturn 0;\n\t}\n\n\tscanStarted = millis ();\n\tnumAP = WiFi.scanNetworks (false, false, false, 300U);\n\tDEBUG_DBG (\"Found %d APs in %lu ms\", numAP, millis () - scanStarted);\n\tDEBUG_DBG (\"Scan finished. Result = %d\", WiFi.scanComplete ());\n\twhile (!(WiFi.scanComplete ()) && (millis () - scanStarted) > 1500) { //\n#if DEBUG_LEVEL >= DBG\n\t\tdelay (250);\n\t\tSerial.printf (\"%lu.\", millis () - scanStarted);\n#else\n\t\tdelay (50);\n#endif\n\t}\n\tDEBUG_DBG (\"Scan finished. Result = %d\", WiFi.scanComplete ());\n\n\tDEBUG_DBG (\"Found %d APs in %lu ms\", numAP, millis () - scanStarted);\n\n\twifi_ap_record_t* wifiAP;\n\n\tfor (int i = 0; i < numAP; i++) {\n\t\twifiAP = (wifi_ap_record_t*)WiFi.getScanInfoByIndex (i);\n\t\tDEBUG_DBG (\"Found AP %.*s with BSSID \" MACSTR \" and RSSI %d dBm\", 32, wifiAP->ssid, MAC2STR (wifiAP->bssid), wifiAP->rssi);\n\t\tif (!strncmp (name, (char*)(wifiAP->ssid), 32)) {\n\t\t\tindexes[numFound] = i;\n\t\t\tnumFound++;\n\t\t\tif (numFound >= MAX_INDEXES) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\twifiIndex = indexes[0];\n\n\treturn numFound;\n}\n#endif\n\nbool EnigmaIOTNodeClass::searchForGateway (rtcmem_data_t* data, bool shouldStoreData) {\n\tDEBUG_DBG (\"Searching for AP %s\", data->networkName);\n\n\t//WiFi.mode (WIFI_STA);\n\tint numWifi = 0;\n\tint wifiIndex = 0;\n\n    comm->enableTransmit (false);\n    DEBUG_DBG (\"Transmission disabled\");\n#ifdef ESP8266\n    time_t scanStarted = millis ();\n\tnumWifi = WiFi.scanNetworks (false, false, 0, (uint8_t*)(data->networkName));\n\twhile (!(WiFi.scanComplete () || (millis () - scanStarted) > 1500)) {\n#if DEBUG_LEVEL >= DBG\n\t\tdelay (250);\n\t\tSerial.printf (\"%lu.\", millis () - scanStarted);\n#else\n\t\tdelay (50);\n#endif\n\t}\n\tWiFiMode_t mode = WiFi.getMode ();\n\tDEBUG_DBG (\"WiFi mode is %d. Restarting network interface after scan\", mode);\n\tWiFi.mode (WIFI_OFF);\n\tWiFi.mode (mode);\n#elif defined ESP32\n\tnumWifi = scanGatewaySSID (data->networkName, wifiIndex);\n#endif // ESP8266\n    comm->enableTransmit (true);\n    DEBUG_DBG (\"Transmission enabled\");\n\n\tuint8_t prevGwAddr[ENIGMAIOT_ADDR_LEN];\n\tmemcpy (prevGwAddr, data->gateway, 6);\n\n\tif (numWifi > 0) {\n\t\tDEBUG_INFO (\"Gateway %s found: %d\", data->networkName, numWifi);\n\t\tDEBUG_INFO (\"BSSID: %s\", WiFi.BSSIDstr (wifiIndex).c_str ());\n\t\tDEBUG_INFO (\"Channel: %d\", WiFi.channel (wifiIndex));\n\t\tDEBUG_INFO (\"RSSI: %d\", WiFi.RSSI (wifiIndex));\n\t\tdata->channel = WiFi.channel (wifiIndex);\n\t\tdata->rssi = WiFi.RSSI (wifiIndex);\n\t\tmemcpy (data->gateway, WiFi.BSSID (wifiIndex), 6);\n\n\t\tif (shouldStoreData) {\n\t\t\tDEBUG_DBG (\"Found gateway. Storing\");\n\t\t\tif (!saveRTCData ()) {\n\t\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t\t}\n\t\t\tif (memcmp (prevGwAddr, data->gateway, 6)) {\n\t\t\t\tif (!saveFlashData ()) {\n\t\t\t\t\tDEBUG_ERROR (\"Error saving data on flash\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tWiFi.scanDelete ();\n\n#ifdef ESP8266\n\t\twifi_set_channel (data->channel);\n#elif defined ESP32\n\t\tesp_err_t err_ok;\n\t\tif ((err_ok = esp_wifi_set_promiscuous (true))) {\n\t\t\tDEBUG_ERROR (\"Error setting promiscuous mode: %s\", esp_err_to_name (err_ok));\n\t\t}\n\t\tif ((err_ok = esp_wifi_set_channel (data->channel, WIFI_SECOND_CHAN_NONE))) {\n\t\t\tDEBUG_ERROR (\"Error setting wifi channel: %s\", esp_err_to_name (err_ok));\n\t\t}\n\t\tif ((err_ok = esp_wifi_set_promiscuous (false))) {\n\t\t\tDEBUG_ERROR (\"Error setting promiscuous mode off: %s\", esp_err_to_name (err_ok));\n\t\t}\n#endif\n\n\t\t// requestReportRSSI = true;\n\t\treturn true;\n\t}\n\tDEBUG_WARN (\"Gateway %s not found\", data->networkName);\n\treturn false;\n}\n\nvoid EnigmaIOTNodeClass::stop () {\n\tcomm->stop ();\n\tDEBUG_DBG (\"Communication layer uninitalized\");\n}\n\nbool EnigmaIOTNodeClass::setNodeAddress (uint8_t address[ENIGMAIOT_ADDR_LEN]) {\n\tnode.setMacAddress (address);\n\treturn true;\n}\n\nvoid EnigmaIOTNodeClass::setSleepTime (uint32_t sleepTime, bool forceSleepForever) {\n\tif (node.getInitAsSleepy ()) {\n#ifdef ESP8266 // ESP32 does not have this limitation\n\t\tuint64_t maxSleepTime = (ESP.deepSleepMax () / (uint64_t)1000000);\n#endif\n\n\t\tif (sleepTime == 0 && !forceSleepForever) {\n\t\t\tnode.setSleepy (false);\n\t\t\t//rtcmem_data.sleepy = false; // This setting is temporary, do not store\n\t\t} else if (sleepTime\n#ifdef ESP8266\n\t\t\t\t   < maxSleepTime\n#endif\n\t\t\t\t   ) {\n\t\t\tnode.setSleepy (true);\n\t\t\trtcmem_data.sleepTime = sleepTime;\n\t\t}\n#ifdef ESP8266\n\t\telse {\n\t\t\tDEBUG_DBG (\"Max sleep time is %lu\", (uint32_t)maxSleepTime);\n\t\t\tnode.setSleepy (true);\n\t\t\trtcmem_data.sleepTime = (uint32_t)maxSleepTime;\n\t\t}\n#endif\n\t\tthis->sleepTime = (uint64_t)rtcmem_data.sleepTime * (uint64_t)1000000;\n\t\tDEBUG_DBG (\"Sleep time set to %d. Sleepy mode is %s\",\n\t\t\t\t   rtcmem_data.sleepTime,\n\t\t\t\t   node.getSleepy () ? \"sleepy\" : \"non sleepy\");\n\n\t} else {\n\t\tDEBUG_WARN (\"Cannot set sleep time to %u seconds as this node started as non sleepy\", sleepTime);\n\t}\n}\n\n// bool EnigmaIOTNodeClass::reportRSSI () {\n// \tuint8_t buffer[MAX_MESSAGE_LENGTH];\n// \tuint8_t bufLength;\n\n// \tDEBUG_DBG (\"Report RSSI and channel\");\n\n// \tbuffer[0] = control_message_type::RSSI_ANS;\n// \tbuffer[1] = rtcmem_data.rssi;\n// \tbuffer[2] = rtcmem_data.channel;\n// \tbufLength = 3;\n\n// \tif (sendData (buffer, bufLength, CONTROL_TYPE)) {\n// \t\tDEBUG_DBG (\"Sleep time is %d seconds\", sleepTime / 1000000);\n// \t\tDEBUG_VERBOSE (\"Data: %s\", printHexBuffer (buffer, bufLength));\n// \t\treturn true;\n// \t} else {\n// \t\tDEBUG_WARN (\"Error sending version response\");\n// \t\treturn false;\n// \t}\n// }\n\nvoid EnigmaIOTNodeClass::handle () {\n\tstatic unsigned long blueOntime;\n\n\t// Locate gateway address and channel // and rssi\n\tif (requestSearchGateway) {\n\t\trequestSearchGateway = false;\n\t\t// requestReportRSSI = true;\n\t\tsearchForGateway (&rtcmem_data, true);\n\t}\n\n\t// Report RSSI to gateway\n\t// if (requestReportRSSI && node.isRegistered ()) {\n\t// \trequestReportRSSI = false;\n\t// \treportRSSI ();\n\t// }\n\n\t// Flash led if programmed (when data is transferred)\n\tif (led >= 0) {\n\t\tif (flashBlue) {\n\t\t\tblueOntime = millis ();\n\t\t\tdigitalWrite (led, LED_ON);\n\t\t\tflashBlue = false;\n\t\t}\n\n\t\tif (!indentifying) {\n\t\t\tif (/*!digitalRead (led) &&*/ millis () - blueOntime > ledOnTime) {\n\t\t\t\tdigitalWrite (led, LED_OFF);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check if this should go to sleep\n\tif (node.getSleepy () && !shouldRestart) {\n\t\tif (sleepRequested && millis () - node.getLastMessageTime () > DOWNLINK_WAIT_TIME && node.isRegistered () && !indentifying) {\n\t\t\t// Substract running time\n            int64_t sleep_t = 0;\n            if (sleepTime) {\n                sleep_t = sleepTime - ((millis () - cycleStartedTime) * 1000);\n            }\n            if (sleep_t && sleep_t < 1000) {\n\t\t\t\t// Avoid negative values\n\t\t\t\tsleep_t = 1000;\n\t\t\t}\n\t\t\t//int64_t msSleep = sleep_t / 1000;\n            if (sleep_t) {\n                DEBUG_WARN (\"Go to sleep for %ld ms\", (int32_t)(sleep_t / 1000L));\n            } else {\n                DEBUG_WARN (\"Go to sleep indefinitely\");\n            }\n            DEBUG_WARN (\"%d\", millis ());\n            comm->enableTransmit (false);\n#ifdef ESP8266\n\t\t\tESP.deepSleep (sleep_t);\n#elif defined ESP32\n\t\t\tesp_deep_sleep (sleep_t);\n#endif\n\t\t}\n\t}\n\n\t// Check registration timeout\n\tstatic time_t lastRegistration = millis ();\n\tstatus_t status = node.getStatus ();\n\tif (status == WAIT_FOR_SERVER_HELLO /*|| status == WAIT_FOR_CIPHER_FINISHED*/) {\n\t\tif (node.getSleepy ()) { // Sleep after registration timeout\n\t\t\tif (millis () - node.getLastMessageTime () > RECONNECTION_PERIOD) {\n\t\t\t\tDEBUG_INFO (\"Current node status: %d\", node.getStatus ());\n\t\t\t\tnode.reset ();\n\t\t\t\trtcmem_data.nodeRegisterStatus = UNREGISTERED;\n\n\t\t\t\tif (!saveRTCData ()) {\n\t\t\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t\t\t}\n\n\t\t\t\tuint32_t rnd = Crypto.random (PRE_REG_DELAY * 1000); // nanoseconds\n\n\t\t\t\tDEBUG_INFO (\"Registration timeout. Go to sleep for %lu ms\", (uint32_t)(RECONNECTION_PERIOD * 4 + rnd / 1000));\n#ifdef ESP8266\n\t\t\t\tESP.deepSleep (RECONNECTION_PERIOD * 4000 + rnd, RF_NO_CAL);\n#elif defined ESP32\n\t\t\t\tESP.deepSleep (RECONNECTION_PERIOD * 4000 + rnd);\n#endif\n\t\t\t}\n\t\t} else { // Retry registration\n\t\t\tif (millis () - node.getLastMessageTime () > RECONNECTION_PERIOD * 5) {\n\t\t\t\tDEBUG_INFO (\"Current node status: %d\", node.getStatus ());\n\t\t\t\tnode.reset ();\n\t\t\t\tnode.setLastMessageTime (); // Set wait time start\n\t\t\t}\n\t\t}\n\t}\n\n\t// Retry registration\n\tif (node.getStatus () == UNREGISTERED) {\n\t\tif (millis () - lastRegistration > RECONNECTION_PERIOD) {\n\t\t\tDEBUG_DBG (\"Current node status: %d\", node.getStatus ());\n\t\t\tlastRegistration = millis (); // Set wait time start\n\t\t\tnode.reset ();\n\t\t\tuint32_t rnd = Crypto.random (PRE_REG_DELAY);\n\t\t\tDEBUG_INFO (\"Random delay (%u)\", rnd);\n\t\t\tdelay (1500 + rnd);\n\t\t\tclientHello ();\n\t\t\tdelay (1500 + Crypto.random (POST_REG_DELAY)); // Wait for Server Hello\n\t\t}\n\t}\n\n\t// Check OTA update timeout\n\tif (otaRunning) {\n\t\tif (millis () - lastOTAmsg > OTA_TIMEOUT_TIME) {\n\t\t\tuint8_t responseBuffer[2];\n\t\t\tresponseBuffer[0] = control_message_type::OTA_ANS;\n\t\t\tresponseBuffer[1] = ota_status::OTA_TIMEOUT;\n\t\t\tif (sendData (responseBuffer, sizeof (responseBuffer), CONTROL_TYPE)) {\n\t\t\t\tDEBUG_INFO (\"OTA TIMEOUT\");\n\t\t\t}\n\t\t\totaRunning = false;\n\t\t\tDEBUG_WARN (\"Restart due to OTA timeout\");\n\t\t\trestart (IRRELEVANT);\n\t\t}\n\t}\n\n\t// Check identifying LED timeout\n\tif (indentifying) {\n\t\tif (millis () - identifyStart > IDENTIFY_TIMEOUT) {\n\t\t\tstopIdentifying ();\n\t\t\tdigitalWrite (led, LED_OFF);\n\t\t}\n\t}\n\n\t//if (!node.getSleepy () && node.isRegistered () && !node.hasClockSync())\n\t//\tclockRequest ();\n\n\t// Check time sync timeout\n\tif (clockSyncEnabled) {\n\t\tstatic time_t lastTimeSync;\n\t\tif (!node.getSleepy () && node.isRegistered ()) {\n\t\t\tif ((millis () - lastTimeSync > timeSyncPeriod)) {\n\t\t\t\tlastTimeSync = millis ();\n\t\t\t\tDEBUG_DBG (\"Clock Request\");\n\t\t\t\tclockRequest ();\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check restart\n\tif (shouldRestart) {\n\t\tstatic bool restartSent = false;\n\t\tif (!restartSent) {\n\t\t\tDEBUG_WARN (\"Send restart\");\n\t\t\tsendRestart ();\n\t\t\trestartSent = true;\n\t\t}\n\t\tstatic unsigned long retartRequest = millis ();\n\t\tif (millis () - retartRequest > 2500) {\n\t\t\tDEBUG_WARN (\"Restart\");\n\t\t\tESP.restart ();\n\t\t}\n\t}\n\n\t// In case of comm errors search for gateway again\n\tif (CHECK_COMM_ERRORS && (rtcmem_data.commErrors >= COMM_ERRORS_BEFORE_SCAN)) {\n\t\tif (!gatewaySearchStarted) {\n\t\t\tgatewaySearchStarted = true;\n\n\t\t\tif (searchForGateway (&rtcmem_data, true)) {\n\t\t\t\trtcmem_data.commErrors = 0;\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nvoid EnigmaIOTNodeClass::rx_cb (uint8_t* mac_addr, uint8_t* data, uint8_t len, signed int rssi) {\n\tEnigmaIOTNode.manageMessage (mac_addr, data, len, rssi);\n}\n\nvoid EnigmaIOTNodeClass::tx_cb (uint8_t* mac_addr, uint8_t status) {\n\tEnigmaIOTNode.getStatus (mac_addr, status);\n}\n\nbool EnigmaIOTNodeClass::checkCRC (const uint8_t* buf, size_t count, uint32_t* crc) {\n\tuint32_t recvdCRC;\n\n\tmemcpy (&recvdCRC, crc, sizeof (uint32_t));\n\t//DEBUG_VERBOSE (\"Received CRC32: 0x%08X\", *crc32);\n\tuint32_t _crc = calculateCRC32 (buf, count);\n\tDEBUG_VERBOSE (\"CRC32 =  Calc: 0x%08X Recvd: 0x%08X Length: %d\", _crc, recvdCRC, count);\n\treturn (_crc == recvdCRC);\n}\n\nbool EnigmaIOTNodeClass::clientHello () {\n\t/*\n\t* ------------------------------------------------------------------------------------------------------------\n\t*| msgType (1) | IV (12) | DH Kmaster (32) | Random (30 bits) | Broadcast (1 bit) | Sleepy (1 bit) | Tag (16) |\n\t* ------------------------------------------------------------------------------------------------------------\n\t*/\n\n\tstruct __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t iv[IV_LENGTH];\n\t\tuint8_t publicKey[KEY_LENGTH];\n\t\tuint32_t random;\n\t\tuint8_t tag[TAG_LENGTH];\n\t} clientHello_msg;\n\n#define CHMSG_LEN sizeof(clientHello_msg)\n\n\tinvalidateReason = UNKNOWN_ERROR; // reset any previous force disconnect\n\n\tCrypto.getDH1 ();\n\tnode.setStatus (INIT);\n\trtcmem_data.nodeRegisterStatus = INIT;\n\t/*uint8_t macAddress[ENIGMAIOT_ADDR_LEN];\n#ifdef ESP8266\n\tif (wifi_get_macaddr (STATION_IF, macAddress)) {\n#elif defined ESP32\n\tif (esp_wifi_get_mac (WIFI_IF_STA, macAddress) == ESP_OK) {\n#endif\n\t\tnode.setMacAddress (macAddress);\n\t}*/\n\n\tuint8_t* key = Crypto.getPubDHKey ();\n\n\tif (!key) {\n\t\tDEBUG_ERROR (\"Error calculating public ECDH key\");\n\t\treturn false;\n\t}\n\n\tclientHello_msg.msgType = CLIENT_HELLO; // Client hello message\n\n\tCryptModule::random (clientHello_msg.iv, IV_LENGTH);\n\n\tDEBUG_VERBOSE (\"IV: %s\", printHexBuffer (clientHello_msg.iv, IV_LENGTH));\n\n\tfor (int i = 0; i < KEY_LENGTH; i++) {\n\t\tclientHello_msg.publicKey[i] = key[i];\n\t}\n\n\tuint32_t random;\n\trandom = Crypto.random ();\n\n\tif (node.getSleepy ()) {\n\t\trandom = random | 0x00000001U; // Signal sleepy node\n\t\tDEBUG_DBG (\"Signal sleepy node\");\n\t} else {\n\t\trandom = random & 0xFFFFFFFEU; // Signal always awake node\n\t\tDEBUG_DBG (\"Signal non sleepy node\");\n\t}\n\n\tif (node.broadcastIsEnabled ()) {\n\t\trandom = random | 0x00000002U; // Signal broadcast mode enabled to request broadcast key\n\t\trtcmem_data.broadcastKeyRequested = true;\n\t\tDEBUG_DBG (\"Signal sleepy node\");\n\t} else {\n\t\trandom = random & 0xFFFFFFFDU; // Signal broadcast disabled\n\t\trtcmem_data.broadcastKeyRequested = false;\n\t\tDEBUG_DBG (\"Signal non sleepy node\");\n\t}\n\n\tmemcpy (&(clientHello_msg.random), &random, RANDOM_LENGTH);\n\n\tDEBUG_VERBOSE (\"Client Hello message: %s\", printHexBuffer ((uint8_t*)&clientHello_msg, CHMSG_LEN - TAG_LENGTH));\n\n\tuint8_t addDataLen = CHMSG_LEN - TAG_LENGTH - sizeof (uint32_t) - KEY_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, (uint8_t*)&clientHello_msg, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from NetworkKey\n\tmemcpy (aad + addDataLen, rtcmem_data.networkKey + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::encryptBuffer (clientHello_msg.publicKey, KEY_LENGTH + sizeof (uint32_t), // Encrypt only from public key\n\t\t\t\t\t\t\t\t\t clientHello_msg.iv, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t rtcmem_data.networkKey, KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), clientHello_msg.tag, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during encryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Encrypted Client Hello message: %s\", printHexBuffer ((uint8_t*)&clientHello_msg, CHMSG_LEN));\n\n\tnode.setStatus (WAIT_FOR_SERVER_HELLO);\n\trtcmem_data.nodeRegisterStatus = WAIT_FOR_SERVER_HELLO;\n\n\tDEBUG_INFO (\" -------> CLIENT HELLO\");\n\n\treturn comm->send (rtcmem_data.gateway, (uint8_t*)&clientHello_msg, CHMSG_LEN) == 0;\n}\n\nbool EnigmaIOTNodeClass::clockRequest () {\n\t/*\n\t * ---------------------------------------------------------\n\t *| msgType (1) | IV (12) | Counter (2) | T1 (8) | tag (16) |\n\t * ---------------------------------------------------------\n\t */\n\tstruct  __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t iv[IV_LENGTH];\n\t\tint16_t counter;\n\t\tint64_t t1;\n\t\tuint8_t tag[TAG_LENGTH];\n\t} clockRequest_msg;\n\tuint16_t counter;\n\n\tstatic const uint8_t CRMSG_LEN = sizeof (clockRequest_msg);\n\n\tclockRequest_msg.msgType = CLOCK_REQUEST;\n\n\tCryptModule::random (clockRequest_msg.iv, IV_LENGTH);\n\n\tDEBUG_VERBOSE (\"IV: %s\", printHexBuffer (clockRequest_msg.iv, IV_LENGTH));\n\n\tif (useCounter) {\n\t\tcounter = node.getLastControlCounter () + 1;\n\t\tnode.setLastControlCounter (counter);\n\t\trtcmem_data.lastControlCounter = counter;\n\t} else {\n\t\tcounter = (uint16_t)(Crypto.random ());\n\t}\n\n\tDEBUG_INFO (\"Control message #%d\", counter);\n\n\tmemcpy (&(clockRequest_msg.counter), &counter, sizeof (uint16_t));\n\n\tuint64_t t1 = TimeManager.clock_us ();\n\n\tmemcpy (&(clockRequest_msg.t1), &t1, sizeof (int64_t));\n\n\tDEBUG_VERBOSE (\"Clock Request message: %s\", printHexBuffer ((uint8_t*)&clockRequest_msg, CRMSG_LEN - TAG_LENGTH));\n\tDEBUG_DBG (\"T1: %llu\", t1);\n\n\tuint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, (uint8_t*)&clockRequest_msg, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from Node Key\n\tmemcpy (aad + addDataLen, node.getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::encryptBuffer ((uint8_t*)&(clockRequest_msg.counter), CRMSG_LEN - IV_LENGTH - TAG_LENGTH - 1, // Encrypt only from counter\n\t\t\t\t\t\t\t\t\t clockRequest_msg.iv, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node.getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), clockRequest_msg.tag, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during encryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Encrypted Clock Request message: %s\", printHexBuffer ((uint8_t*)&clockRequest_msg, CRMSG_LEN));\n\n\tDEBUG_INFO (\" -------> CLOCK REQUEST\");\n\n\tnode.setLastMessageTime ();\n\n\tflashBlue = true;\n\n\tif (useCounter && !otaRunning) { // RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot\n\t\tif (!saveRTCData ()) {\n\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t}\n\t}\n\n\treturn comm->send (rtcmem_data.gateway, (uint8_t*)&clockRequest_msg, CRMSG_LEN) == 0;\n\n}\n\nbool EnigmaIOTNodeClass::processClockResponse (const uint8_t* mac, const uint8_t* buf, size_t count) {\n\tstruct __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t iv[IV_LENGTH];\n\t\tuint16_t counter;\n        int64_t t1;\n\t\tint64_t t2;\n\t\tint64_t t3;\n\t\tuint8_t tag[TAG_LENGTH];\n\t} clockResponse_msg;\n    \n    uint64_t t1, t2, t3, t4;\n\n\tuint16_t counter;\n\n\tconst unsigned int CRSMSG_LEN = sizeof (clockResponse_msg);\n\n\tmemcpy (&clockResponse_msg, buf, count);\n\n\tuint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, buf, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from Node Key\n\tmemcpy (aad + addDataLen, node.getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\t//uint8_t packetLen = count - TAG_LENGTH;\n\n\tif (!CryptModule::decryptBuffer ((uint8_t*)&(clockResponse_msg.counter), CRSMSG_LEN - IV_LENGTH - TAG_LENGTH - 1, // Decrypt from counter, 18 bytes\n\t\t\t\t\t\t\t\t\t clockResponse_msg.iv, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node.getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), clockResponse_msg.tag, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during decryption\");\n\t\treturn false;\n\t}\n\n    DEBUG_VERBOSE (\"Decripted Clock Response message: %s\", printHexBuffer ((uint8_t*)&clockResponse_msg, count - TAG_LENGTH));\n\n\tmemcpy (&counter, &(clockResponse_msg.counter), sizeof (uint16_t));\n\tDEBUG_INFO (\"Downlink msg #%d\", counter);\n\tif (useCounter) {\n\t\tif (counter > node.getLastDownlinkMsgCounter ()) {\n\t\t\tDEBUG_INFO (\"Accepted\");\n\t\t\tnode.setLastDownlinkMsgCounter (counter);\n\t\t\trtcmem_data.lastDownlinkMsgCounter = counter;\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Downlink msg rejected\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n    t1 = clockResponse_msg.t1;\n\tt2 = clockResponse_msg.t2;\n\tt3 = clockResponse_msg.t3;\n\tt4 = TimeManager.clock_us ();\n\n\tif (count < CRSMSG_LEN) {\n\t\tDEBUG_WARN (\"Message too short\");\n\t\treturn false;\n\t}\n\n\tmemcpy (&clockResponse_msg, buf, count);\n\n\tint64_t offset = TimeManager.adjustTime (t1, t2, t3, t4);\n\n\tif (offset < MIN_SYNC_ACCURACY && offset > (MIN_SYNC_ACCURACY * -1)) {\n\t\ttimeSyncPeriod = TIME_SYNC_PERIOD;\n\t} else {\n\t\ttimeSyncPeriod = QUICK_SYNC_TIME;\n\t}\n\tDEBUG_VERBOSE (\"Clock Response message: %s\", printHexBuffer ((uint8_t*)&clockResponse_msg, CRSMSG_LEN - TAG_LENGTH));\n\n\tDEBUG_DBG (\"T1: %llu\", t1);\n    DEBUG_DBG (\"T2: %llu\", t2);\n    DEBUG_DBG (\"T3: %llu\", t3);\n    DEBUG_DBG (\"T4: %llu\", t4);\n    DEBUG_INFO (\"Offest adjusted to %lld us, Roundtrip delay is %lld\", offset, TimeManager.getDelay ());\n\n\tif (useCounter && !otaRunning) { // RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot\n\t\tif (!saveRTCData ()) {\n\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t}\n\t}\n\n\treturn true;\n}\n\nint64_t EnigmaIOTNodeClass::clock () {\n\treturn TimeManager.clock ();\n\n}\n\ntime_t EnigmaIOTNodeClass::unixtime () {\n\treturn TimeManager.unixtime ();\n}\n\nbool EnigmaIOTNodeClass::hasClockSync () {\n\tif (!node.getInitAsSleepy ())\n\t\treturn TimeManager.isTimeAdjusted ();\n\telse\n\t\treturn false;\n}\n\nbool EnigmaIOTNodeClass::processServerHello (const uint8_t* mac, const uint8_t* buf, size_t count) {\n\t/*\n\t* ------------------------------------------------------\n\t*| msgType (1) | random (12) | DH Kslave (32) | Tag (16) |\n\t* ------------------------------------------------------\n\t*/\n\n\tstruct __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t iv[IV_LENGTH];\n\t\tuint8_t publicKey[KEY_LENGTH];\n\t\tuint16_t nodeId;\n\t\tuint32_t random;\n\t\tuint8_t tag[TAG_LENGTH];\n\t} serverHello_msg;\n\n#define SHMSG_LEN sizeof(serverHello_msg)\n\n\tuint16_t nodeId;\n\n\tif (count < SHMSG_LEN) {\n\t\tDEBUG_WARN (\"Message too short\");\n\t\treturn false;\n\t}\n\n\tmemcpy (&serverHello_msg, buf, count);\n\n\tuint8_t addDataLen = SHMSG_LEN - TAG_LENGTH - sizeof (uint32_t) - sizeof (uint16_t) - KEY_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, (uint8_t*)&serverHello_msg, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from NetworkKey\n\tmemcpy (aad + addDataLen, rtcmem_data.networkKey + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::decryptBuffer (serverHello_msg.publicKey, KEY_LENGTH + sizeof (uint16_t) + sizeof (uint32_t),\n\t\t\t\t\t\t\t\t\t serverHello_msg.iv, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t rtcmem_data.networkKey, KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), serverHello_msg.tag, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during decryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Decrypted Server Hello message: %s\", printHexBuffer ((uint8_t*)&serverHello_msg, SHMSG_LEN - TAG_LENGTH));\n\n\tbool cError = Crypto.getDH2 (serverHello_msg.publicKey);\n\n\tif (!cError) {\n\t\tDEBUG_ERROR (\"DH2 error\");\n\t\treturn false;\n\t}\n\n\tmemcpy (&nodeId, &serverHello_msg.nodeId, sizeof (uint16_t));\n\tnode.setNodeId (nodeId);\n\trtcmem_data.nodeKeyValid = nodeId;\n\tDEBUG_DBG (\"Node ID: %u\", node.getNodeId ());\n\n\tnode.setEncryptionKey (CryptModule::getSHA256 (serverHello_msg.publicKey, KEY_LENGTH));\n\tmemcpy (rtcmem_data.nodeKey, node.getEncriptionKey (), KEY_LENGTH);\n\tDEBUG_INFO (\"Node key: %s\", printHexBuffer (node.getEncriptionKey (), KEY_LENGTH));\n\n\treturn true;\n}\n\nbool EnigmaIOTNodeClass::sendData (const uint8_t* data, size_t len, dataMessageType_t dataMsgType, bool encrypt, nodePayloadEncoding_t payloadType) {\n\tif (!dataMsgType) {\n\t\tmemcpy (dataMessageSent, data, len);\n\t\tdataMessageSentLength = len;\n\t\tdataMessageEncrypt = encrypt;\n\t\tdataMessageSendPending = true;\n\t\tdataMessageSendEncoding = payloadType;\n\t}\n\tnode.setLastMessageTime (); // Mark message time to start RX window start\n\n\tif (node.getStatus () == REGISTERED && node.isKeyValid ()) {\n\t\tif (dataMsgType == CONTROL_TYPE) {\n            DEBUG_VERBOSE (\"Control message sent: %s\", printHexBuffer (data, len));\n        } else if (dataMsgType == HA_DISC_TYPE) {\n            DEBUG_VERBOSE (\"HA discovery message sent: %s\", printHexBuffer (data, len));\n        } else {\n\t\t\tDEBUG_VERBOSE (\"%s data sent: %s\", encrypt ? \"Encrypted\" : \"Unencrypted\", printHexBuffer (data, len));\n\t\t}\n\t\tflashBlue = true;\n\t\tif (dataMessage (data, len, dataMsgType, encrypt, payloadType)) {\n\t\t\tdataMessageSendPending = false; // Data sent. This setting can still be overriden by invalidateCommand\n\t\t\treturn true;\n\t\t} else\n\t\t\treturn false;\n\n\t}\n\treturn false;\n}\n\nvoid EnigmaIOTNodeClass::sleep () {\n\tif (node.getSleepy ()) {\n\t\tDEBUG_DBG (\"Sleep programmed for %lu ms\", rtcmem_data.sleepTime * 1000);\n\t\tsleepTime = (uint64_t)rtcmem_data.sleepTime * (uint64_t)1000000;\n\t\tsleepRequested = true;\n\t} else {\n\t\tDEBUG_VERBOSE (\"Node is non sleepy. Sleep rejected\");\n\t}\n}\n\nbool EnigmaIOTNodeClass::unencryptedDataMessage (const uint8_t* data, size_t len, dataMessageType_t dataMsgType, nodePayloadEncoding_t payloadEncoding) {\n\t/*\n\t* ------------------------------------------------------------------------\n\t*| msgType (1) | NodeId (2) | Counter (2) | PayloadType (1) | Data (....) |\n\t* ------------------------------------------------------------------------\n\t*/\n\n\tuint8_t buf[MAX_MESSAGE_LENGTH];\n\tuint16_t counter;\n\tuint16_t nodeId = node.getNodeId ();\n\n\tuint8_t nodeId_idx = 1;\n\tuint8_t counter_idx = nodeId_idx + sizeof (int16_t);\n\tuint8_t encoding_idx = counter_idx + sizeof (int16_t);\n\tuint8_t data_idx = encoding_idx + sizeof (int8_t);\n\n\tuint8_t packet_length = data_idx + len;\n\n\tif (!data) {\n\t\treturn false;\n\t}\n\n    if (dataMsgType != DATA_TYPE) {\n\t\treturn false; // Unencrypted control data not implemented\n\t} else {\n\t\tbuf[0] = (uint8_t)UNENCRYPTED_NODE_DATA;\n\t}\n\n\tmemcpy (buf + nodeId_idx, &nodeId, sizeof (uint16_t));\n\n\tif (useCounter) {\n\t\tcounter = node.getLastMessageCounter () + 1;\n\t\tnode.setLastMessageCounter (counter);\n\t\trtcmem_data.lastMessageCounter = counter;\n\t} else {\n\t\tcounter = (uint16_t)(Crypto.random ());\n\t}\n\tmemcpy (buf + counter_idx, &counter, sizeof (uint16_t));\n\n\tbuf[encoding_idx] = (uint8_t)payloadEncoding;\n\n\tmemcpy (buf + data_idx, data, len);\n\n\tDEBUG_INFO (\" -------> UNENCRYPTED DATA\");\n\tDEBUG_VERBOSE (\"Unencrypted data message: %s\", printHexBuffer (buf, packet_length));\n\n#if DEBUG_LEVEL >= VERBOSE\n\tchar macStr[ENIGMAIOT_ADDR_LEN * 3];\n\tDEBUG_DBG (\"Destination address: %s\", mac2str (rtcmem_data.gateway, macStr));\n#endif\n\n\tif (useCounter && !otaRunning) { // RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot\n\t\tif (!saveRTCData ()) {\n\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t}\n\t}\n\n\treturn (comm->send (rtcmem_data.gateway, buf, packet_length) == 0);\n}\n\n\nbool EnigmaIOTNodeClass::dataMessage (const uint8_t* data, size_t len, dataMessageType_t dataMsgType, bool encrypt, nodePayloadEncoding_t payloadEncoding) {\n\t/*\n\t* ----------------------------------------------------------------------------------------\n\t*| msgType (1) | IV (12) | length (2) | NodeId (2) | Counter (2) | Data (....) | tag (16) |\n\t* ----------------------------------------------------------------------------------------\n\t*/\n\n\tif (!encrypt) {\n        return unencryptedDataMessage (data, len, dataMsgType, payloadEncoding);\n\t}\n\n\tuint8_t buf[MAX_MESSAGE_LENGTH];\n\t//uint8_t tag[TAG_LENGTH];\n\tuint16_t counter;\n\tuint16_t nodeId = node.getNodeId ();\n\n\tuint8_t iv_idx = 1;\n\tuint8_t length_idx = iv_idx + IV_LENGTH;\n\tuint8_t nodeId_idx = length_idx + sizeof (int16_t);\n\tuint8_t counter_idx = nodeId_idx + sizeof (int16_t);\n\tuint8_t encoding_idx;\n\tuint8_t data_idx;\n\tif (dataMsgType != CONTROL_TYPE) {\n\t\tencoding_idx = counter_idx + sizeof (int16_t);\n\t\tdata_idx = encoding_idx + sizeof (int8_t);\n\t} else {\n\t\tdata_idx = counter_idx + sizeof (int16_t);\n\t}\n\tuint8_t tag_idx = data_idx + len;\n\n\n\tif (!data) {\n\t\treturn false;\n\t}\n\n    if (dataMsgType == CONTROL_TYPE) {\n        buf[0] = (uint8_t)CONTROL_DATA;\n    } else if (dataMsgType == HA_DISC_TYPE) {\n        buf[0] = (uint8_t)HA_DISCOVERY_MESSAGE;\n\t} else {\n\t\tbuf[0] = (uint8_t)SENSOR_DATA;\n\t}\n\n\tCryptModule::random (buf + iv_idx, IV_LENGTH);\n\n\tDEBUG_VERBOSE (\"IV: %s\", printHexBuffer (buf + iv_idx, IV_LENGTH));\n\n\tmemcpy (buf + nodeId_idx, &nodeId, sizeof (uint16_t));\n\n    if (dataMsgType != CONTROL_TYPE) { // Control messages and data messages use different counters\n\t\tif (useCounter) {\n\t\t\tcounter = node.getLastMessageCounter () + 1;\n\t\t\tnode.setLastMessageCounter (counter);\n\t\t\trtcmem_data.lastMessageCounter = counter;\n\t\t} else {\n\t\t\tcounter = (uint16_t)(Crypto.random ());\n\t\t}\n\t} else {\n\t\tif (useCounter) {\n\t\t\tcounter = node.getLastControlCounter () + 1;\n\t\t\tnode.setLastControlCounter (counter);\n\t\t\trtcmem_data.lastControlCounter = counter;\n\t\t} else {\n\t\t\tcounter = (uint16_t)(Crypto.random ());\n\t\t}\n\t}\n\n    if (dataMsgType != CONTROL_TYPE) {\n\t\tDEBUG_INFO (\"Data message #%d\", counter);\n\t} else {\n\t\tDEBUG_INFO (\"Control message #%d\", counter);\n\t}\n\n\tmemcpy (buf + counter_idx, &counter, sizeof (uint16_t));\n\n\tbuf[encoding_idx] = payloadEncoding;\n\n\tmemcpy (buf + data_idx, data, len);\n\n\tuint16_t packet_length = tag_idx;\n\n\tmemcpy (buf + length_idx, &packet_length, sizeof (uint16_t));\n\n\tDEBUG_VERBOSE (\"Data message: %s\", printHexBuffer (buf, packet_length));\n\tDEBUG_DBG (\"Encoding: 0x%02X\", payloadEncoding);\n\n\tuint8_t* crypt_buf = buf + length_idx;\n\n\tsize_t cryptLen = packet_length - 1 - IV_LENGTH;\n\n\tuint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, buf, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from Node Key\n\tmemcpy (aad + addDataLen, node.getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::encryptBuffer (crypt_buf, cryptLen, // Encrypt from length\n\t\t\t\t\t\t\t\t\t buf + iv_idx, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node.getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of node key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), buf + tag_idx, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during encryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Encrypted data message: %s\", printHexBuffer (buf, packet_length + TAG_LENGTH));\n\n    if (dataMsgType == CONTROL_TYPE) {\n        DEBUG_INFO (\" -------> CONTROL MESSAGE\");\n    } else if (dataMsgType == HA_DISC_TYPE) {\n        DEBUG_INFO (\" -------> HA DISCOVERY MESSAGE\");\n\t} else {\n\t\tDEBUG_INFO (\" -------> DATA\");\n\t}\n#if DEBUG_LEVEL >= VERBOSE\n\tchar macStr[ENIGMAIOT_ADDR_LEN * 3];\n\tDEBUG_DBG (\"Destination address: %s\", mac2str (rtcmem_data.gateway, macStr));\n#endif\n\n\tif (useCounter) { // RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot\n\t\tif (!saveRTCData ()) {\n\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t}\n\t}\n\n\treturn (comm->send (rtcmem_data.gateway, buf, packet_length + TAG_LENGTH) == 0);\n}\n\nbool EnigmaIOTNodeClass::sendHADiscoveryMessage (const uint8_t* data, size_t len) {\n    if (!data || !len) {\n        DEBUG_WARN (\"Empty buffer\");\n        return false;\n    }\n    return sendData (data, len, HA_DISC_TYPE, true, MSG_PACK);\n}\n\nbool EnigmaIOTNodeClass::processGetSleepTimeCommand (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n\tuint8_t buffer[MAX_MESSAGE_LENGTH];\n\tuint8_t bufLength;\n\n\tDEBUG_DBG (\"Get Sleep command received\");\n\tDEBUG_VERBOSE (\"%s\", printHexBuffer (data, len));\n\n\tbuffer[0] = control_message_type::SLEEP_ANS;\n\n\tuint32_t sleepTime = getSleepTime ();\n\tmemcpy (buffer + 1, &sleepTime, sizeof (sleepTime));\n\tbufLength = 5;\n\n\tif (sendData (buffer, bufLength, CONTROL_TYPE)) {\n\t\tDEBUG_DBG (\"Sleep time is %d seconds\", sleepTime);\n\t\tDEBUG_VERBOSE (\"Data: %s\", printHexBuffer (buffer, bufLength));\n\t\treturn true;\n\t} else {\n\t\tDEBUG_WARN (\"Error sending version response\");\n\t\treturn false;\n\t}\n}\n\nbool EnigmaIOTNodeClass::processGetNameCommand (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n\tuint8_t buffer[MAX_MESSAGE_LENGTH];\n\tuint8_t bufLength;\n\n\tDEBUG_DBG (\"Get Name command received\");\n\tDEBUG_VERBOSE (\"%s\", printHexBuffer (data, len));\n\n\tbuffer[0] = control_message_type::NAME_ANS;\n\n\tuint8_t* nodeAddress = node.getMacAddress ();\n\n\tchar* name = rtcmem_data.nodeName;\n\tsize_t nameLen = 0;\n\tif (name) {\n\t\tnameLen = strlen (name);\n\t} else {\n\t\tDEBUG_WARN (\"Emprty name\");\n\t\treturn false;\n\t}\n\n\tmemcpy (buffer + 1, nodeAddress, ENIGMAIOT_ADDR_LEN);\n\tmemcpy (buffer + 1 + ENIGMAIOT_ADDR_LEN, name, nameLen);\n\tbufLength = 1 + ENIGMAIOT_ADDR_LEN + nameLen;\n\n\tif (sendData (buffer, bufLength, CONTROL_TYPE)) {\n\t\tDEBUG_DBG (\"Node name is %s\", name ? name : \"NULL name\");\n\t\tDEBUG_VERBOSE (\"Data: %s\", printHexBuffer (buffer, bufLength));\n\t\treturn true;\n\t} else {\n\t\tDEBUG_WARN (\"Error sending name response\");\n\t\treturn false;\n\t}\n}\n\nbool EnigmaIOTNodeClass::processSetNameResponse (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n\t/*\n\t * ---------------------------------------------------\n\t *| msgType (1) | IV (12) | Result code (1) | tag (16) |\n\t * ---------------------------------------------------\n\t */\n\tstruct __attribute__ ((packed, aligned (1))) {\n\t\tuint8_t msgType;\n\t\tuint8_t iv[IV_LENGTH];\n\t\tuint16_t counter;\n\t\tint8_t errorCode;\n\t\tuint8_t tag[TAG_LENGTH];\n\t} nodeNameSetResponse_msg;\n\n\tuint16_t counter;\n\n\tconst unsigned int NNSRMSG_LEN = sizeof (nodeNameSetResponse_msg);\n\n\tif (len < NNSRMSG_LEN) {\n\t\tDEBUG_WARN (\"Message too short\");\n\t\treturn false;\n\t}\n\tmemcpy (&nodeNameSetResponse_msg, data, len);\n\n\tconst uint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, (uint8_t*)&nodeNameSetResponse_msg, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from NetworkKey\n\tmemcpy (aad + addDataLen, node.getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::decryptBuffer ((uint8_t*)&(nodeNameSetResponse_msg.errorCode), sizeof (uint8_t),\n\t\t\t\t\t\t\t\t\t nodeNameSetResponse_msg.iv, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node.getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), nodeNameSetResponse_msg.tag, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during decryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Decrypted Node Name Set response message: %s\", printHexBuffer ((uint8_t*)&nodeNameSetResponse_msg, NNSRMSG_LEN - TAG_LENGTH));\n\n\tmemcpy (&counter, &(nodeNameSetResponse_msg.counter), sizeof (uint16_t));\n\tDEBUG_INFO (\"Downlink msg #%d\", counter);\n\tif (useCounter) {\n\t\tif (counter > node.getLastDownlinkMsgCounter ()) {\n\t\t\tDEBUG_INFO (\"Accepted\");\n\t\t\tnode.setLastDownlinkMsgCounter (counter);\n\t\t\trtcmem_data.lastDownlinkMsgCounter = counter;\n\t\t} else {\n\t\t\tDEBUG_WARN (\"Downlink msg rejected\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (nodeNameSetResponse_msg.errorCode != NAME_OK) {\n\t\tDEBUG_WARN (\"Name error: %d\", nodeNameSetResponse_msg.errorCode);\n\t} else {\n\t\tDEBUG_DBG (\"Name set correctly\");\n\t}\n\n\tif (useCounter && !otaRunning) { // RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot\n\t\tif (!saveRTCData ()) {\n\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t}\n\t}\n\n\treturn true;\n}\n\nbool EnigmaIOTNodeClass::processSetNameCommand (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n\tuint8_t buffer[MAX_MESSAGE_LENGTH];\n\tuint8_t bufLength;\n\n\tDEBUG_DBG (\"Set Name command received\");\n\tDEBUG_VERBOSE (\"%s\", printHexBuffer (data, len));\n\n\tbuffer[0] = control_message_type::NAME_ANS;\n\n\tuint8_t* nodeAddress = node.getMacAddress ();\n\n\tmemcpy (rtcmem_data.nodeName, data + 1, len - 1);\n\tnode.setNodeName (rtcmem_data.nodeName);\n\n\tsaveRTCData ();\n\tsaveFlashData ();\n\n\tif (!sendNodeNameSet (rtcmem_data.nodeName)) {\n\t\tDEBUG_WARN (\"Error sending set node name %s\", rtcmem_data.nodeName);\n\t}\n\n\tsize_t nameLen = strlen (rtcmem_data.nodeName);\n\n\tmemcpy (buffer + 1, nodeAddress, ENIGMAIOT_ADDR_LEN);\n\tmemcpy (buffer + 1 + ENIGMAIOT_ADDR_LEN, rtcmem_data.nodeName, nameLen);\n\tbufLength = 1 + ENIGMAIOT_ADDR_LEN + nameLen;\n\n\tif (sendData (buffer, bufLength, CONTROL_TYPE)) {\n\t\tDEBUG_DBG (\"Node name is %s\", rtcmem_data.nodeName);\n\t\tDEBUG_VERBOSE (\"Data: %s\", printHexBuffer (buffer, bufLength));\n\t\treturn true;\n\t} else {\n\t\tDEBUG_WARN (\"Error sending name response\");\n\t\treturn false;\n\t}\n}\n\nbool EnigmaIOTNodeClass::sendNodeNameSet (const char* name) {\n\tif (!name)\n\t\treturn false;\n\n\tsize_t nameLength = strlen (name);\n\n\tDEBUG_INFO (\"Setting node name to %s. Size: %d\", name, nameLength);\n\n\tif (!nameLength || (nameLength > NODE_NAME_LENGTH)) {\n\t\treturn false;\n\t}\n\n   /*\n\t* ------------------------------------------------------------------------------------\n\t*| msgType (1) | IV (12) | NodeID (2) | Counter (2) | Node name (up to 32) | tag (16) |\n\t* ------------------------------------------------------------------------------------\n\t*/\n\n\tuint8_t buf[MAX_MESSAGE_LENGTH];\n\t//uint8_t tag[TAG_LENGTH];\n\tuint16_t nodeId = node.getNodeId ();\n\tuint16_t counter;\n\n\tuint8_t iv_idx = 1;\n\tuint8_t nodeId_idx = iv_idx + IV_LENGTH;\n\tuint8_t counter_idx = nodeId_idx + sizeof (int16_t);\n\tuint8_t nodeName_idx = counter_idx + sizeof (int16_t);\n\tuint8_t tag_idx = nodeName_idx + nameLength;\n\n\tsize_t packet_length = 1 + IV_LENGTH + sizeof (int16_t) + sizeof (int16_t) + nameLength;\n\n\n\tbuf[0] = (uint8_t)NODE_NAME_SET;\n\n\tCryptModule::random (buf + iv_idx, IV_LENGTH);\n\n\tDEBUG_VERBOSE (\"IV: %s\", printHexBuffer (buf + iv_idx, IV_LENGTH));\n\n\tif (useCounter) {\n\t\tcounter = node.getLastControlCounter () + 1;\n\t\tnode.setLastControlCounter (counter);\n\t\trtcmem_data.lastControlCounter = counter;\n\t} else {\n\t\tcounter = (uint16_t)(Crypto.random ());\n\t}\n\n\tDEBUG_INFO (\"Control message #%d\", counter);\n\n\tmemcpy (buf + counter_idx, &counter, sizeof (uint16_t));\n\n\tmemcpy (buf + nodeId_idx, &nodeId, sizeof (uint16_t));\n\n\tmemcpy (buf + nodeName_idx, name, nameLength);\n\n\tDEBUG_VERBOSE (\"Set node name message: %s\", printHexBuffer (buf, packet_length));\n\n\tuint8_t* crypt_buf = buf + nodeId_idx;\n\n\tsize_t cryptLen = packet_length - 1 - IV_LENGTH;\n\n\tuint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, buf, addDataLen); // Copy message upto iv\n\n\t// Copy 8 last bytes from Node Key\n\tmemcpy (aad + addDataLen, node.getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\n\n\tif (!CryptModule::encryptBuffer (crypt_buf, cryptLen, // Encrypt from length\n\t\t\t\t\t\t\t\t\t buf + iv_idx, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t node.getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of node key\n\t\t\t\t\t\t\t\t\t aad, sizeof (aad), buf + tag_idx, TAG_LENGTH)) {\n\t\tDEBUG_ERROR (\"Error during encryption\");\n\t\treturn false;\n\t}\n\n\tDEBUG_VERBOSE (\"Encrypted set node name message: %s\", printHexBuffer (buf, packet_length + TAG_LENGTH));\n\n#if DEBUG_LEVEL >= VERBOSE\n\tchar macStr[ENIGMAIOT_ADDR_LEN * 3];\n\tDEBUG_DBG (\"Destination address: %s\", mac2str (rtcmem_data.gateway, macStr));\n#endif\n\n\tflashBlue = true;\n\n\tDEBUG_INFO (\"-------> NODE NAME SEND\");\n\n\tif (useCounter && !otaRunning) { // RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot\n\t\tif (!saveRTCData ()) {\n\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t}\n\t}\n\n\treturn (comm->send (rtcmem_data.gateway, buf, packet_length + TAG_LENGTH) == 0);\n\n}\n\nbool EnigmaIOTNodeClass::processSetIdentifyCommand (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n\t//uint8_t buffer[MAX_MESSAGE_LENGTH];\n\t//uint8_t bufLength;\n\n\tDEBUG_DBG (\"Set Identify command received\");\n\tDEBUG_VERBOSE (\"%s\", printHexBuffer (data, len));\n\n\tDEBUG_WARN (\"IDENTIFY\");\n\tstartIdentifying (1000);\n\n\treturn true;\n}\n\n// bool EnigmaIOTNodeClass::processGetRSSICommand (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n// \trequestSearchGateway = true;\n// \trequestReportRSSI = true;\n\n// \treturn true;\n// }\n\nbool EnigmaIOTNodeClass::processSetRestartCommand (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n\tDEBUG_WARN (\"Restart due to command\");\n\trestart (RESTART_REQUESTED);\n\treturn true;\n}\n\nbool EnigmaIOTNodeClass::processSetResetConfigCommand (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n\tuint8_t buffer[MAX_MESSAGE_LENGTH];\n\tuint8_t bufLength;\n\n\tDEBUG_DBG (\"Reset Config command received\");\n\tDEBUG_VERBOSE (\"%s\", printHexBuffer (data, len));\n\n\tbuffer[0] = control_message_type::RESET_ANS;\n\tbufLength = 1;\n\n\tconfigCleared = true; // Disable any possible saving to flash or RTC memory\n\n\tbool result;\n\n\tif ((result = sendData (buffer, bufLength, CONTROL_TYPE))) {\n\t\tDEBUG_DBG (\"Reset Config about to be executed\", sleepTime);\n\t\tDEBUG_VERBOSE (\"Data: %s\", printHexBuffer (buffer, bufLength));\n\t} else {\n\t\tDEBUG_WARN (\"Error sending Reset Config response\");\n\t}\n\n\tDEBUG_WARN (\"Send restart command before deleting config\");\n\trestartReason = CONFIG_RESET;\n    sendRestart ();\n    \n    comm->enableTransmit (false);\n\tclearRTC ();\n\tclearFlash ();\n\n\trestart (CONFIG_RESET);\n\n\treturn result;\n}\n\nvoid EnigmaIOTNodeClass::clearRTC () {\n\tuint8_t data[sizeof (rtcmem_data)];\n\n\tif (protectOTA || otaRunning) {\n\t\tDEBUG_WARN (\"Cannot write to RTC memory\");\n\t\treturn;\n\t}\n\n\tmemset (data, 0, sizeof (rtcmem_data));\n\n#ifdef ESP8266\n\tESP.rtcUserMemoryWrite (RTC_ADDRESS, (uint32_t*)data, sizeof (rtcmem_data));\n#elif defined ESP32\n\tmemset (&rtcmem_data_storage, 0, sizeof (rtcmem_data));\n#endif\n    \n#if USE_FLASH_INSTEAD_RTC\n    FILESYSTEM.begin ();\n    FILESYSTEM.remove (RTC_DATA_FILE);\n    FILESYSTEM.end ();\n#endif\n\n\tDEBUG_DBG (\"RTC Cleared\");\n}\n\nbool EnigmaIOTNodeClass::processSetSleepTimeCommand (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n\tuint8_t buffer[MAX_MESSAGE_LENGTH];\n\tuint8_t bufLength;\n\n\tDEBUG_DBG (\"Set Sleep command received\");\n\tDEBUG_VERBOSE (\"%s\", printHexBuffer (data, len));\n    if (!FILESYSTEM.begin ()) {\n\t\tDEBUG_ERROR (\"Error mounting flash\");\n\t}\n\tbool result = loadFlashData ();\n\tif (!result) {\n\t\tDEBUG_WARN (\"Error loading configuration\");\n\t}\n\n\tbuffer[0] = control_message_type::SLEEP_ANS;\n\n\tuint32_t sleepTime;\n\tmemcpy (&sleepTime, data + 1, sizeof (uint32_t));\n\tDEBUG_DBG (\"Sleep time requested: %d\", sleepTime);\n\tsetSleepTime (sleepTime);\n\tsleepTime = getSleepTime ();\n\tif (sleepTime > 0) {\n\t\tif (result) {\n\t\t\tif ((result = saveFlashData ())) {\n\t\t\t\tDEBUG_DBG (\"Saved config data after set sleep time command\");\n\t\t\t} else {\n\t\t\t\tDEBUG_WARN (\"Error saving data after set sleep time command\");\n\t\t\t}\n\t\t}\n        FILESYSTEM.end ();\n\t}\n\tmemcpy (buffer + 1, &sleepTime, sizeof (sleepTime));\n\tbufLength = 5;\n\n\tif (sendData (buffer, bufLength, CONTROL_TYPE)) {\n\t\tDEBUG_DBG (\"Sleep time is %d seconds\", sleepTime);\n\t\tDEBUG_VERBOSE (\"Data: %s\", printHexBuffer (buffer, bufLength));\n\t\treturn result;\n\t} else {\n\t\tDEBUG_WARN (\"Error sending version response\");\n\t\treturn false;\n\t}\n}\n\n\nbool EnigmaIOTNodeClass::processVersionCommand (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n\tuint8_t buffer[MAX_MESSAGE_LENGTH];\n\tuint8_t bufLength;\n\n\tbuffer[0] = control_message_type::VERSION_ANS;\n\tmemcpy (buffer + 1, ENIGMAIOT_PROT_VERS, sizeof (ENIGMAIOT_PROT_VERS));\n\tbufLength = sizeof (ENIGMAIOT_PROT_VERS) + 1;\n\tDEBUG_DBG (\"Version command received\");\n\tif (sendData (buffer, bufLength, CONTROL_TYPE)) {\n\t\tDEBUG_DBG (\"Version is %s\", ENIGMAIOT_PROT_VERS);\n\t\tDEBUG_VERBOSE (\"Data: %s\", printHexBuffer (buffer, bufLength));\n\t\treturn true;\n\t} else {\n\t\tDEBUG_WARN (\"Error sending version response\");\n\t\treturn false;\n\t}\n}\n\nbool EnigmaIOTNodeClass::processOTACommand (const uint8_t* mac, const uint8_t* data, uint8_t len) {\n\tconst uint8_t MAX_OTA_RESPONSE_LENGTH = 4;\n\n\tuint8_t responseBuffer[MAX_OTA_RESPONSE_LENGTH];\n\n\t//DEBUG_VERBOSE (\"Data: %s\", printHexBuffer (data, len));\n\tuint16_t msgIdx;\n\tstatic char md5buffer[33];\n\tchar md5calc[32];\n\tstatic uint16_t numMsgs;\n\tstatic uint32_t otaSize;\n\tstatic uint16_t oldIdx;\n\tstatic bool otaRecoverRequested = false;\n\tstatic MD5Builder _md5;\n\tuint8_t* dataPtr = (uint8_t*)(data + 1);\n\tuint8_t dataLen = len - 1;\n\n\tif (dataLen < 2) {\n\t\tDEBUG_ERROR (\"OTA message is too short: %u bytes\", dataLen + 1);\n\t\treturn false;\n\t}\n\n\tmemcpy (&msgIdx, dataPtr, sizeof (uint16_t));\n\tdataPtr += sizeof (uint16_t);\n\tdataLen -= sizeof (uint16_t);\n\tDEBUG_INFO (\"OTA message #%u\", msgIdx);\n\tif (msgIdx > 0 && otaRunning) {\n\t\tif (msgIdx != (oldIdx + 1)) {\n\t\t\tif (!otaRecoverRequested) {\n\t\t\t\totaRecoverRequested = true;\n\t\t\t\tresponseBuffer[0] = control_message_type::OTA_ANS;\n\t\t\t\tresponseBuffer[1] = ota_status::OTA_OUT_OF_SEQUENCE;\n\t\t\t\tmemcpy (responseBuffer + 2, (uint8_t*)&oldIdx, sizeof (oldIdx));\n\t\t\t\tsendData (responseBuffer, 4, CONTROL_TYPE);\n\t\t\t\tDEBUG_ERROR (\"%u OTA messages missing before %u\", msgIdx - oldIdx - 1, msgIdx);\n\t\t\t\t//otaRunning = false;\n\t\t\t\t//otaError = true;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\toldIdx = msgIdx;\n\t\t\totaRecoverRequested = false;\n\t\t}\n\t}\n\tlastOTAmsg = millis ();\n\n\tif (msgIdx == 0) {\n\t\tif (dataLen < 38) {\n\t\t\tDEBUG_ERROR (\"OTA message #0 is too short: %u bytes\", dataLen + 3);\n\t\t\treturn false;\n\t\t}\n\t\tmemcpy (&otaSize, dataPtr, sizeof (uint32_t));\n\t\tDEBUG_INFO (\"OTA size: %u bytes\", otaSize);\n\t\tdataPtr += sizeof (uint32_t);\n\t\tdataLen -= sizeof (uint32_t);\n\t\tmemcpy (&numMsgs, dataPtr, sizeof (uint16_t));\n\t\tDEBUG_INFO (\"Number of OTA messages: %u\", numMsgs);\n\t\tdataPtr += sizeof (uint16_t);\n\t\tdataLen -= sizeof (uint16_t);\n\t\tmemcpy (md5buffer, dataPtr, 32);\n\t\tmd5buffer[32] = '\\0';\n\t\tDEBUG_VERBOSE (\"MD5: %s\", printHexBuffer ((uint8_t*)md5buffer, 32));\n\t\totaRunning = true;\n\t\totaError = false;\n\t\t_md5.begin ();\n\t\tresponseBuffer[0] = control_message_type::OTA_ANS;\n\t\tresponseBuffer[1] = ota_status::OTA_STARTED;\n\t\tif (sendData (responseBuffer, 2, CONTROL_TYPE)) {\n\t\t\tDEBUG_WARN (\"OTA STARTED\");\n\t\t\trestart (IRRELEVANT, false); // Force unregistration after boot so that sleepy status is synchronized\n\t\t\t\t\t\t\t // on Gateway\n\t\t\tif (!Update.begin (otaSize)) {\n\t\t\t\tDEBUG_ERROR (\"Error begginning OTA. OTA size: %u\", otaSize);\n\t\t\t\treturn false;\n\t\t\t}\n#ifdef ESP8266\n\t\t\tUpdate.runAsync (true);\n#endif\n\t\t\tif (!Update.setMD5 (md5buffer)) {\n\t\t\t\tDEBUG_ERROR (\"Error setting MD5\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (otaRunning) {\n\t\t\tstatic size_t totalBytes = 0;\n\n\t\t\t_md5.add (dataPtr, dataLen);\n            comm->enableTransmit (false);\n\t\t\t// Process OTA Update\n#if DEBUG_LEVEL >= INFO || CORE_DEBUG_LEVEL >= 3\n\t\t\tsize_t numBytes = \n#endif\n                Update.write (dataPtr, dataLen);\n            comm->enableTransmit (true);\n\t\t\ttotalBytes += dataLen;\n\t\t\tDEBUG_INFO (\"%u bytes written. Total %u\", numBytes, totalBytes);\n\t\t} else {\n\t\t\tif (!otaError) {\n\t\t\t\totaError = true;\n\t\t\t\tresponseBuffer[0] = control_message_type::OTA_ANS;\n\t\t\t\tresponseBuffer[1] = ota_status::OTA_START_ERROR;\n                sendData (responseBuffer, 2, CONTROL_TYPE);\n\t\t\t\tDEBUG_ERROR (\"OTA error. Message 0 not received\");\n\t\t\t}\n\t\t}\n\t}\n\n\tif (msgIdx == numMsgs && otaRunning) {\n\t\tStreamString otaErrorStr;\n\n\t\tDEBUG_INFO (\"OTA end\");\n\t\t_md5.calculate ();\n\t\tDEBUG_DBG (\"OTA MD5 %s\", _md5.toString ().c_str ());\n\t\t_md5.getChars (md5calc);\n\t\tif (!memcmp (md5calc, md5buffer, 32)) {\n\t\t\tresponseBuffer[0] = control_message_type::OTA_ANS;\n\t\t\tresponseBuffer[1] = ota_status::OTA_CHECK_OK;\n            sendData (responseBuffer, 2, CONTROL_TYPE);\n\t\t\tDEBUG_WARN (\"OTA MD5 check OK\");\n\t\t} else {\n\t\t\tresponseBuffer[0] = control_message_type::OTA_ANS;\n\t\t\tresponseBuffer[1] = ota_status::OTA_CHECK_FAIL;\n            sendData (responseBuffer, 2, CONTROL_TYPE);\n\t\t\tDEBUG_ERROR (\"OTA MD5 check failed\");\n\t\t}\n\t\tSerial.print ('.');\n\t\twhile (!Update.isFinished ()) {\n\t\t\tSerial.print ('.');\n\t\t\tdelay (100);\n\t\t}\n\t\tSerial.println ();\n\n\t\tif (Update.end ()) {\n\t\t\tresponseBuffer[0] = control_message_type::OTA_ANS;\n\t\t\tresponseBuffer[1] = ota_status::OTA_FINISHED;\n            sendData (responseBuffer, 2, CONTROL_TYPE);\n\t\t\t//uint8_t otaErrorCode = Update.getError ();\n\t\t\tDEBUG_WARN (\"OTA Finished OK\");\n            DEBUG_WARN (\"OTA eror code: %d\", Update.getError ());\n\t\t\t//ESP.restart ();\n\t\t\tprotectOTA = true;\n\t\t\t//otaRunning = false;\n\t\t\tshouldRestart = true;\n\t\t\trestartReason = RESTART_AFTER_OTA;\n\t\t\t//clearRTC ();\n\t\t\treturn true; // Restart does not happen inmediatelly, so code goes on\n\t\t} else {\n\t\t\tresponseBuffer[0] = control_message_type::OTA_ANS;\n\t\t\tresponseBuffer[1] = ota_status::OTA_CHECK_FAIL;\n            sendData (responseBuffer, 2, CONTROL_TYPE);\n\t\t\t//uint8_t otaErrorCode = Update.getError ();\n\t\t\tUpdate.printError (otaErrorStr);\n\t\t\totaErrorStr.trim (); // remove line ending\n\t\t\tDEBUG_ERROR (\"OTA Failed\");\n\t\t\tDEBUG_WARN (\"OTA eror code: %s\", otaErrorStr.c_str ());\n\t\t\tSerial.println (\"OTA failed\");\n\t\t\totaRunning = false;\n\t\t\tshouldRestart = true;\n\t\t\trestartReason = OTA_ERROR_RESTART;\n\t\t\treturn false;\n\t\t}\n\t\tdelay (500);\n\t\tDEBUG_WARN (\"Restart after OTA\");\n\t\trestart (RESTART_AFTER_OTA);\n\t}\n\n\treturn true;\n}\n\nvoid EnigmaIOTNodeClass::restart (restartReason_t reason, bool reboot) {\n\trtcmem_data.nodeRegisterStatus = UNREGISTERED;\n\trtcmem_data.nodeKeyValid = false; // Force resync\n\tif (!saveRTCData ()) {\n\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t}\n\tDEBUG_WARN (\"Reset configuration data in RTC memory\");\n\t// if (reboot)\n\tshouldRestart = reboot;\n\tif (reason != IRRELEVANT) {\n\t\trestartReason = reason;\n\t}\n\t//ESP.restart (); \n}\n\nbool EnigmaIOTNodeClass::processControlCommand (const uint8_t* mac, const uint8_t* data, size_t len, bool broadcast) {\n\n\tDEBUG_VERBOSE (\"Data: %s\", printHexBuffer (data, len));\n\tDEBUG_DBG (\"%s control command\", broadcast ? \"Broadcast\" : \"Unicast\");\n\tswitch (data[0]) {\n\tcase control_message_type::VERSION:\n\t\treturn processVersionCommand (mac, data, len);\n\tcase control_message_type::SLEEP_GET:\n\t\treturn processGetSleepTimeCommand (mac, data, len);\n\tcase control_message_type::SLEEP_SET:\n\t\treturn processSetSleepTimeCommand (mac, data, len);\n\tcase control_message_type::IDENTIFY:\n\t\treturn processSetIdentifyCommand (mac, data, len);\n\tcase control_message_type::RESET:\n\t\treturn processSetResetConfigCommand (mac, data, len);\n\t// case control_message_type::RSSI_GET:\n\t// \treturn processGetRSSICommand (mac, data, len);\n\tcase control_message_type::NAME_GET:\n\t\treturn processGetNameCommand (mac, data, len);\n\tcase control_message_type::NAME_SET:\n\t\tif (!broadcast) { // DO NOT PROCESS BROADCAST NAME SET \n\t\t\treturn processSetNameCommand (mac, data, len);\n\t\t}\n\t\tbreak;\n\tcase control_message_type::RESTART_NODE:\n\t\treturn processSetRestartCommand (mac, data, len);\n\tcase control_message_type::BRCAST_KEY:\n\t\treturn processBroadcastKeyMessage (mac, data, len);\n\tcase control_message_type::OTA:\n\t\tif (!broadcast) { // DO NOT PROCESS BROADCAST OTA MESSAGES\n\t\t\tif (processOTACommand (mac, data, len)) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tDEBUG_ERROR (\"Error processing OTA\");\n\t\t\t\trestart (OTA_ERROR_RESTART);\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n\treturn false;\n}\n\nbool EnigmaIOTNodeClass::processBroadcastKeyMessage (const uint8_t* mac, const uint8_t* buf, size_t count) {\n\tif (!buf || count != KEY_LENGTH + 1) {\n\t\tDEBUG_WARN (\"Invalid broadcast key message. Incorrect length %d\", count);\n\t\treturn false;\n\t}\n\n\tint broadcastKey_idx = 1;\n\n\tDEBUG_VERBOSE (\"Broadcast key: %s\", printHexBuffer (&buf[broadcastKey_idx], KEY_LENGTH));\n\n\tmemcpy (rtcmem_data.broadcastKey, &buf[broadcastKey_idx], KEY_LENGTH);\n\trtcmem_data.broadcastKeyRequested = false;\n\trtcmem_data.broadcastKeyValid = true;\n\n\treturn true;\n}\n\nbool EnigmaIOTNodeClass::processDownstreamData (const uint8_t* mac, const uint8_t* buf, size_t count, bool control) {\n\t/*\n\t* --------------------------------------------------------------------------\n\t*| msgType (1) | IV (12) | length (2) | Counter (2) | NodeId (2) | Data (....) | Tag (16) |\n\t* --------------------------------------------------------------------------\n\t*/\n\n\tuint8_t iv_idx = 1;\n\tuint8_t length_idx = iv_idx + IV_LENGTH;\n\tuint8_t nodeId_idx = length_idx + sizeof (int16_t);\n\tuint8_t counter_idx = nodeId_idx + sizeof (int16_t);\n\tuint8_t encoding_idx;\n\tuint8_t data_idx;\n\tif (!control) {\n\t\tencoding_idx = counter_idx + sizeof (int16_t);\n\t\tdata_idx = encoding_idx + sizeof (int8_t);\n\t} else {\n\t\tdata_idx = counter_idx + sizeof (int16_t);\n\t}\n\tuint8_t tag_idx = count - TAG_LENGTH;\n\n\tuint16_t counter;\n\tuint16_t nodeId;\n\tbool broadcast = (buf[0] & 0x80);\n\n\t//if (broadcast) {\n\t//\tDEBUG_WARN (\"Broadcast message. Type: 0x%X\", buf[0]);\n\t//} \n\n\tconst uint8_t addDataLen = 1 + IV_LENGTH;\n\tuint8_t aad[AAD_LENGTH + addDataLen];\n\n\tmemcpy (aad, buf, addDataLen); // Copy message upto iv\n\n\tuint8_t packetLen = count - TAG_LENGTH;\n\n\tif (broadcast) {\n\t\tmemcpy (aad + addDataLen, rtcmem_data.broadcastKey + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH); \t// Copy 8 last bytes from Node Key\n\t\tif (!CryptModule::decryptBuffer (buf + length_idx, packetLen - 1 - IV_LENGTH, // Decrypt from nodeId\n\t\t\t\t\t\t\t\t\t\t buf + iv_idx, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t\t rtcmem_data.broadcastKey, KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t\t aad, sizeof (aad), buf + tag_idx, TAG_LENGTH)) {\n\t\t\tDEBUG_ERROR (\"Error during decryption of broadcast message\");\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tmemcpy (aad + addDataLen, node.getEncriptionKey () + KEY_LENGTH - AAD_LENGTH, AAD_LENGTH);\t// Copy 8 last bytes from Node Key\n\t\tif (!CryptModule::decryptBuffer (buf + length_idx, packetLen - 1 - IV_LENGTH, // Decrypt from nodeId\n\t\t\t\t\t\t\t\t\t\t buf + iv_idx, IV_LENGTH,\n\t\t\t\t\t\t\t\t\t\t node.getEncriptionKey (), KEY_LENGTH - AAD_LENGTH, // Use first 24 bytes of network key\n\t\t\t\t\t\t\t\t\t\t aad, sizeof (aad), buf + tag_idx, TAG_LENGTH)) {\n\t\t\tDEBUG_ERROR (\"Error during decryption\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tDEBUG_VERBOSE (\"Decripted downstream message: %s\", printHexBuffer (buf, count - TAG_LENGTH));\n\n\tmemcpy (&nodeId, &(buf[nodeId_idx]), sizeof (uint16_t));\n\n\tmemcpy (&counter, &(buf[counter_idx]), sizeof (uint16_t));\n\tDEBUG_INFO (\"Downlink msg #%d\", counter);\n\tif (useCounter) {\n\t\tif (broadcast) {\n\t\t\tif (counter > lastBroadcastMsgCounter) {\n\t\t\t\tDEBUG_INFO (\"Accepted. Counter was %u\", lastBroadcastMsgCounter);\n\t\t\t\tlastBroadcastMsgCounter = counter;\n\t\t\t}\n\t\t} else {\n\t\t\tif (counter > node.getLastDownlinkMsgCounter ()) {\n\t\t\t\tDEBUG_INFO (\"Accepted. Counter was %u\", node.getLastDownlinkMsgCounter ());\n\t\t\t\tnode.setLastDownlinkMsgCounter (counter);\n\t\t\t\trtcmem_data.lastDownlinkMsgCounter = counter;\n\t\t\t} else {\n\t\t\t\tDEBUG_WARN (\"Downlink msg rejected\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (useCounter && !otaRunning) { // RTC must not be written if OTA is running. OTA uses RTC memmory to signal 2nd firmware boot\n\t\tif (!saveRTCData ()) {\n\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t}\n\t}\n\n\tif (control) {\n\t\tDEBUG_INFO (\"Control command\");\n\t\tDEBUG_VERBOSE (\"Data: %s\", printHexBuffer (&buf[data_idx], tag_idx - data_idx));\n\t\treturn processControlCommand (mac, &buf[data_idx], tag_idx - data_idx, broadcast);\n\t}\n\n\tDEBUG_VERBOSE (\"Sending data notification. Payload length: %d\", tag_idx - data_idx);\n\tif (notifyData) {\n\t\tnotifyData (mac, &buf[data_idx], tag_idx - data_idx, (nodeMessageType_t)(buf[0]), (nodePayloadEncoding_t)(buf[encoding_idx]));\n\t}\n\n\treturn true;\n\n}\n\n\nnodeInvalidateReason_t EnigmaIOTNodeClass::processInvalidateKey (const uint8_t* mac, const uint8_t* buf, size_t count) {\n\n\t// TODO: Encrypt using network key, adding some random data.This is to avoid DoS attack.\n\t// I have to investigate if this may really work.\n\t// Other options: \n\t//    - mark message using timestamp. May not work with gateways not connected to Internet.\n\t//    - Adding a number calculated from node message (a byte should be sufficient).\n\t//           For instance nth byte + 3. Most probable candidate\n\n#define IKMSG_LEN 2\n\tif (buf && count < IKMSG_LEN) {\n\t\treturn UNKNOWN_ERROR;\n\t}\n\n\tDEBUG_WARN (\"Invalidate key request. Reason: %u\", buf[1]);\n\tuint8_t reason = buf[1];\n\tif (reason < KEY_EXPIRED) {\n\t\tif (dataMessageSentLength > 0)\n\t\t\tdataMessageSendPending = true; // Start last data retransmission\n\t}\n\n\treturn (nodeInvalidateReason_t)reason;\n}\n\nvoid EnigmaIOTNodeClass::manageMessage (const uint8_t* mac, const uint8_t* buf, uint8_t count, signed int rssi) {\n    DEBUG_INFO (\"Reveived message. Origin MAC: %02X:%02X:%02X:%02X:%02X:%02X\", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);\n    DEBUG_VERBOSE (\"Received message RSSI: %d\", rssi);\n    DEBUG_VERBOSE (\"Received data: %s\", printHexBuffer (const_cast<uint8_t*>(buf), count));\n\tflashBlue = true;\n\n\tif (count <= 1) {\n\t\tDEBUG_ERROR (\"Empty message received\");\n\t\treturn;\n\t}\n\n\t// All downlink messages should come from gateway\n\tif (memcmp (mac, rtcmem_data.gateway, comm->getAddressLength ()) != 0) {\n\t\tDEBUG_ERROR (\"Message doesn't come from gateway\");\n\t\treturn;\n\t}\n\n\tswitch (buf[0]) {\n\tcase SERVER_HELLO:\n\t\tDEBUG_INFO (\" <------- SERVER HELLO\");\n\t\tif (node.getStatus () == WAIT_FOR_SERVER_HELLO) {\n\t\t\tif (processServerHello (mac, buf, count)) {\n\t\t\t\t// mark node as registered\n\t\t\t\t//stopFlash (); // Do not flash during setup for less battery drain\n\t\t\t\tnode.setKeyValid (true);\n\t\t\t\trtcmem_data.nodeKeyValid = true;\n\t\t\t\tnode.setKeyValidFrom (millis ());\n\t\t\t\tnode.setLastMessageCounter (0);\n\t\t\t\tnode.setStatus (REGISTERED);\n\t\t\t\trtcmem_data.nodeRegisterStatus = REGISTERED;\n\n\t\t\t\t// save context to RTC memory\n\t\t\t\tmemcpy (rtcmem_data.nodeKey, node.getEncriptionKey (), KEY_LENGTH);\n\t\t\t\trtcmem_data.lastMessageCounter = 0;\n\t\t\t\trtcmem_data.lastDownlinkMsgCounter = 0;\n\t\t\t\trtcmem_data.lastControlCounter = 0;\n\t\t\t\trtcmem_data.nodeId = node.getNodeId ();\n\t\t\t\tDEBUG_INFO (\"Reset counters\");\n\t\t\t\tif (!saveRTCData ()) {\n\t\t\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t\t\t}\n\n\t\t\t\t// request clock sync if non sleepy\n\t\t\t\t//if (!node.getSleepy () && node.isRegistered ())\n\t\t\t\t//\tclockRequest ();\n\n#if DEBUG_LEVEL >= INFO\n\t\t\t\tnode.printToSerial (&DEBUG_ESP_PORT);\n#endif\n\t\t\t\tif (!sendNodeNameSet (rtcmem_data.nodeName)) {\n\t\t\t\t\tDEBUG_WARN (\"Error sending set node name %s\", rtcmem_data.nodeName ? rtcmem_data.nodeName : \"NULL name\");\n\t\t\t\t}\n\n\t\t\t\t// send notification to user code\n\t\t\t\tif (notifyConnection) {\n\t\t\t\t\tnotifyConnection ();\n\t\t\t\t}\n\t\t\t\t// Resend last message in case of it is still pending to be sent.\n\t\t\t\t// If key expired it was successfully sent before so retransmission is not needed \n\t\t\t\tif (invalidateReason < KEY_EXPIRED && dataMessageSentLength > 0) {\n\t\t\t\t\tif (node.getStatus () == REGISTERED && node.isKeyValid ()) {\n\t\t\t\t\t\tif (dataMessageSendPending && dataMessageSentLength > 0) {\n\t\t\t\t\t\t\tDEBUG_INFO (\"Data pending to be sent. Length: %u\", dataMessageSentLength);\n\t\t\t\t\t\t\tDEBUG_VERBOSE (\"Data sent: %s\", printHexBuffer (dataMessageSent, dataMessageSentLength));\n\t\t\t\t\t\t\tdataMessage ((uint8_t*)dataMessageSent, dataMessageSentLength, DATA_TYPE, dataMessageEncrypt, dataMessageSendEncoding);\n\t\t\t\t\t\t\t//dataMessageSentLength = 0;\n\t\t\t\t\t\t\tdataMessageSendPending = false;\n\n\t\t\t\t\t\t\tflashBlue = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcycleStartedTime = millis ();\n\n\n\t\t\t} else {\n\t\t\t\tnode.reset ();\n\t\t\t}\n\t\t} else {\n\t\t\tnode.reset ();\n\t\t}\n\t\tbreak;\n\tcase INVALIDATE_KEY:\n\t\tDEBUG_INFO (\" <------- INVALIDATE KEY\");\n\t\tinvalidateReason = processInvalidateKey (mac, buf, count);\n\t\trequestSearchGateway = true;\n\t\tnode.reset ();\n\t\trtcmem_data.lastMessageCounter = 0;\n\t\trtcmem_data.lastControlCounter = 0;\n\t\trtcmem_data.lastDownlinkMsgCounter = 0;\n\t\tlastBroadcastMsgCounter = 0;\n\t\tTimeManager.reset ();\n\t\ttimeSyncPeriod = QUICK_SYNC_TIME;\n\t\tif (notifyDisconnection) {\n\t\t\tnotifyDisconnection (invalidateReason);\n\t\t}\n\t\tbreak;\n\n\tcase DOWNSTREAM_BRCAST_DATA_SET:\n\t\tif (!node.broadcastIsEnabled ()) {\n\t\t\tbreak;\n\t\t}\n\tcase DOWNSTREAM_DATA_SET:\n\t\tDEBUG_INFO (\" <------- DOWNSTREAM DATA SET\");\n\t\tif (processDownstreamData (mac, buf, count)) {\n\t\t\tDEBUG_INFO (\"Downstream Data set OK\");\n\t\t}\n\t\tbreak;\n\n\tcase DOWNSTREAM_BRCAST_DATA_GET:\n\t\tif (!node.broadcastIsEnabled ()) {\n\t\t\tbreak;\n\t\t}\n\tcase DOWNSTREAM_DATA_GET:\n\t\tDEBUG_INFO (\" <------- DOWNSTREAM DATA GET\");\n\t\tif (processDownstreamData (mac, buf, count)) {\n\t\t\tDEBUG_INFO (\"Downstream Data set OK\");\n\t\t}\n\t\tbreak;\n\n\tcase DOWNSTREAM_BRCAST_CTRL_DATA:\n\t\tif (!node.broadcastIsEnabled ()) {\n\t\t\tbreak;\n\t\t}\n\tcase DOWNSTREAM_CTRL_DATA:\n\t\tDEBUG_INFO (\" <------- DOWNSTREAM CONTROL DATA\");\n\t\tif (processDownstreamData (mac, buf, count, true)) {\n\t\t\tDEBUG_INFO (\"Downstream Data OK\");\n\t\t}\n\t\tbreak;\n\n\tcase CLOCK_RESPONSE:\n\t\tDEBUG_INFO (\" <------- CLOCK RESPONSE\");\n\t\tif (clockSyncEnabled) {\n\t\t\tif (processClockResponse (mac, buf, count)) {\n\t\t\t\tDEBUG_INFO (\"Clock Response OK\");\n\t\t\t}\n\t\t}\n\t\tbreak;\n\tcase NODE_NAME_RESULT:\n\t\tDEBUG_INFO (\" <------- SET NODE NAME RESULT\");\n\t\tif (processSetNameResponse (mac, buf, count)) {\n\t\t\tDEBUG_INFO (\"Set Node Name OK\");\n\t\t}\n\t\tbreak;\n\tcase BROADCAST_KEY_RESPONSE:\n\t\tDEBUG_INFO (\" <------- BROADCAST KEY MESSAGE\");\n\t\tif (processBroadcastKeyMessage (mac, buf, count)) {\n\t\t\tDEBUG_INFO (\"Broadcast Key OK\");\n\t\t}\n\t\tbreak;\n\t}\n}\n\nvoid EnigmaIOTNodeClass::getStatus (uint8_t* mac_addr, uint8_t status) {\n\tgatewaySearchStarted = false;\n\tif (status == 0) {\n\t\tDEBUG_DBG (\"SENDStatus OK\");\n\t\trtcmem_data.commErrors = 0;\n\t} else {\n\t\trtcmem_data.commErrors++;\n\t\tif (!saveRTCData ()) {\n\t\t\tDEBUG_ERROR (\"Error saving data on RTC\");\n\t\t}\n\t\tDEBUG_ERROR (\"SENDStatus ERROR %d. Comm errors %u\", status, rtcmem_data.commErrors);\n\t}\n}\n\n\nEnigmaIOTNodeClass EnigmaIOTNode;\n\n//#endif\n"
  },
  {
    "path": "src/EnigmaIOTNode.h",
    "content": "/**\n  * @file EnigmaIOTNode.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Library to build a node for EnigmaIoT system\n  */\n\n#ifndef _ENIGMAIOTNODE_h\n#define _ENIGMAIOTNODE_h\n//#ifdef ESP8266\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n#include \"EnigmaIoTconfig.h\"\n#include \"cryptModule.h\"\n#include \"helperFunctions.h\"\n#include \"Comms_hal.h\"\n#include \"NodeList.h\"\n#include <cstddef>\n#include <cstdint>\n#include <ESPAsyncWebServer.h>\n#include <ESPAsyncWiFiManager.h>\n\n#define LED_ON LOW\n#define LED_OFF !LED_ON\n\n/**\n  * @brief Message code definition\n  */\nenum nodeMessageType {\n\tSENSOR_DATA = 0x01, /**< Data message from sensor node */\n\tSENSOR_BRCAST_DATA = 0x81, /**< Data broadcast message from sensor node */\n\tUNENCRYPTED_NODE_DATA = 0x11, /**< Data message from sensor node. Unencrypted */\n\tDOWNSTREAM_DATA_SET = 0x02, /**< Data message from gateway. Downstream data for commands */\n\tDOWNSTREAM_BRCAST_DATA_SET = 0x82, /**< Data broadcast message from gateway. Downstream data for user commands */\n\tDOWNSTREAM_DATA_GET = 0x12, /**< Data message from gateway. Downstream data for user commands */\n\tDOWNSTREAM_BRCAST_DATA_GET = 0x92, /**< Data broadcast message from gateway. Downstream data for user commands */\n\tCONTROL_DATA = 0x03, /**< Internal control message from node to gateway. Used for OTA, settings configuration, etc */\n    DOWNSTREAM_CTRL_DATA = 0x04, /**< Internal control message from gateway to node. Used for OTA, settings configuration, etc */\n    HA_DISCOVERY_MESSAGE = 0x08, /**< This sends gateway needed information to build a Home Assistant discovery MQTT message to allow automatic entities provision */\n\tDOWNSTREAM_BRCAST_CTRL_DATA = 0x84, /**< Internal control broadcast message from gateway to sensor. Used for OTA, settings configuration, etc */\n\tCLOCK_REQUEST = 0x05, /**< Clock request message from node */\n\tCLOCK_RESPONSE = 0x06, /**< Clock response message from gateway */\n\tNODE_NAME_SET = 0x07, /**< Message from node to signal its own custom node name */\n\tNODE_NAME_RESULT = 0x17, /**< Message from gateway to get result after set node name */\n\tBROADCAST_KEY_REQUEST = 0x08, /**< Message from node to request broadcast key */\n\tBROADCAST_KEY_RESPONSE = 0x18, /**< Message from gateway with broadcast key */\n\tCLIENT_HELLO = 0xFF, /**< ClientHello message from node */\n\tSERVER_HELLO = 0xFE, /**< ServerHello message from gateway */\n\tINVALIDATE_KEY = 0xFB /**< InvalidateKey message from gateway */\n};\n\nenum nodePayloadEncoding_t {\n\tRAW = 0x00, /**< Raw data without specific format */\n\tCAYENNELPP = 0x81, /**< CayenneLPP packed data */\n\tPROT_BUF = 0x82, /**< Data packed using Protocol Buffers. NOT IMPLEMENTED */\n\tMSG_PACK = 0x83, /**< Data packed using MessagePack */\n\tBSON = 0x84, /**< Data packed using BSON. NOT IMPLEMENTED */\n\tCBOR = 0x85, /**< Data packed using CBOR. NOT IMPLEMENTED */\n\tSMILE = 0x86 /**< Data packed using SMILE. NOT IMPLEMENTED */\n};\n\nenum dataMessageType_t {\n    DATA_TYPE,      /**< User data message */\n    CONTROL_TYPE,   /**< Control message */\n    HA_DISC_TYPE    /**< Home Assistant Discovery message */\n};\n\n\n/**\n  * @brief Key invalidation reason definition\n  */\nenum nodeInvalidateReason_t {\n\tUNKNOWN_ERROR = 0x00, /**< Unknown error. Not used by the moment */\n\tWRONG_CLIENT_HELLO = 0x01, /**< ClientHello message received was invalid */\n\tWRONG_DATA = 0x03, /**< Data message received could not be decrypted successfuly */\n\tUNREGISTERED_NODE = 0x04, /**< Data received from an unregistered node*/\n\tKEY_EXPIRED = 0x05 /**< Node key has reached maximum validity time */\n};\n\n/**\n  * @brief Context data to be stored con persistent storage to be used after wake from sleep mode\n  */\ntypedef struct {\n\tuint32_t crc32; /**< CRC to check RTC data integrity */\n\tuint8_t nodeKey[KEY_LENGTH]; /**< Node shared key */\n\tuint16_t nodeId; /**< Node identification */\n\tuint8_t channel /*= DEFAULT_CHANNEL*/; /**< WiFi channel used on ESP-NOW communication */\n\tuint8_t gateway[ENIGMAIOT_ADDR_LEN]; /**< Gateway address */\n\tsigned int rssi; /**< Gateway signal strength */\n\tuint8_t networkKey[KEY_LENGTH]; /**< Network key to protect key agreement */\n\tchar networkName[NETWORK_NAME_LENGTH]; /**< Network name. Used to search gateway peer */\n\tbool sleepy; /**< Sleepy node */\n\tuint32_t sleepTime /*= 0*/; /**< Time to sleep between sensor data delivery */\n\tchar nodeName[NODE_NAME_LENGTH + 1]; /**< Node name. Use as a human friendly name to avoid use of numeric address*/\n\tuint8_t commErrors /*= 0*/; /**< number of non acknowledged packets. May mean that gateway is not available or its channel has changed.\n\t\t\t\t\t\t\t\tThis is used to retrigger Gateway scan*/\n\tbool nodeKeyValid /* = false*/; /**< true if key has been negotiated successfully */\n\tuint8_t broadcastKey[KEY_LENGTH]; /**< Key to encrypt broadcast messages */\n\tbool broadcastKeyValid /* = false*/; /**< true if broadcast key has been received from gateway */\n\tbool broadcastKeyRequested /* = false*/; /**< true if broadcast key has been requested to gateway */\n\tstatus_t nodeRegisterStatus /*= UNREGISTERED*/; /**< Node registration status */\n\tuint16_t lastMessageCounter; /**< Node last message counter */\n\tuint16_t lastControlCounter; /**< Control message last counter */\n\tuint16_t lastDownlinkMsgCounter; /**< Downlink message last counter */\n} rtcmem_data_t;\n\ntypedef nodeMessageType nodeMessageType_t;\n\n#if defined ARDUINO_ARCH_ESP8266 || defined ARDUINO_ARCH_ESP32\n#include <functional>\ntypedef std::function<void (const uint8_t* mac, const uint8_t* buf, uint8_t len, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding)> onNodeDataRx_t;\ntypedef std::function<void ()> onConnected_t;\ntypedef std::function<void (nodeInvalidateReason_t reason)> onDisconnected_t;\ntypedef std::function<void (bool status)> onWiFiManagerExit_t;\ntypedef std::function<void (void)> simpleEventHandler_t;\n#else\ntypedef void (*onNodeDataRx_t)(const uint8_t* mac, const uint8_t* buf, uint8_t len, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding);\ntypedef void (*onConnected_t)();\ntypedef void (*onDisconnected_t)(nodeInvalidateReason_t reason);\ntypedef void (*onWiFiManagerExit_t)(bool status);\ntypedef void (*onWiFiManagerStarted_t)(void);\n#endif\n\n/**\n  * @brief Main node class. Manages communication with gateway and allows sending and receiving user data\n  *\n  */\nclass EnigmaIOTNodeClass {\nprotected:\n\tNode node; ///< @brief Node abstraction to store context\n\tbool flashBlue = false; ///< @brief If true Tx LED will be flashed\n\tint8_t led = -1; ///< @brief IO Pin that corresponds to Tx LED. Default value disables LED. It is initialized with `setLed` method\n\tunsigned int ledOnTime; ///< @brief Time that LED is On during flash. Initalized on `setLed`\n\tComms_halClass* comm; ///< @brief Comms abstraction layer\n\tonNodeDataRx_t notifyData; ///< @brief Callback that will be called on every message reception\n\tonConnected_t notifyConnection; ///< @brief Callback that will be called anytime a new node is registered\n\tonDisconnected_t notifyDisconnection; ///< @brief Callback that will be called anytime a node is disconnected\n\tbool useCounter = true; ///< @brief `true` means that data message counter will be used to mark message order\n\trtcmem_data_t rtcmem_data; ///< @brief Context data to be stored on persistent storage\n\tbool sleepRequested = false; ///< @brief `true` means that this node will sleep as soon a message is sent and downlink wait time has passed\n\tuint64_t sleepTime; ///< @brief Time in microseconds that this node will be slept between measurements\n\tuint8_t dataMessageSent[MAX_MESSAGE_LENGTH]; ///< @brief Buffer where sent message is stored in case of retransmission is needed\n\tuint8_t dataMessageSentLength = 0; ///< @brief Message length stored for use in case of message retransmission is needed\n\tbool dataMessageSendPending = false; ///< @brief True in case of message retransmission is needed\n\tnodePayloadEncoding_t dataMessageSendEncoding = RAW; ///< @brief Encoding of the message pending to be sent\n\tbool dataMessageEncrypt = true; ///< @brief Message encryption enabled. Stored for use in case of message retransmission is needed\n\tnodeInvalidateReason_t invalidateReason = UNKNOWN_ERROR; ///< @brief Last key invalidation reason\n\tbool otaRunning = false; ///< @brief True if OTA update has started\n\tbool otaError = false; ///< @brief True if OTA update has failed. This normally produces a restart\n\tbool protectOTA = false; ///< @brief True if OTA update was launched. OTA flag is stored on RTC so this disables writting.\n\ttime_t lastOTAmsg; ///< @brief Time when last OTA update message has received. This is used to control timeout\n\tboolean indentifying = false; ///< @brief True if node has its led flashing to be identified\n\ttime_t identifyStart; ///< @brief Time when identification started flashing. Used to control identification timeout\n\tclock_t timeSyncPeriod = QUICK_SYNC_TIME; ///< @brief Clock synchronization period\n\tbool clockSyncEnabled = false; ///< @brief If true clock is synchronized with Gateway\n\tbool shouldRestart = false; ///< @brief Triggers a restart if true\n\trestartReason_t restartReason; ///< @brief Reason of restart (OTA, restart requested, configuration reset)\n\tbool gatewaySearchStarted = false; ///< @brief Avoids start a new gateway scan if it already started\n\tbool requestSearchGateway = false; ///< @brief Flag to control updating gateway address, RSSI and channel\n\t// bool requestReportRSSI = false; ///< @brief Flag to control RSSI reporting\n\tbool configCleared = false; ///< @brief This flag disables asy configuration save after triggering a factory reset\n\tint resetPin = -1; ///< @brief  Pin used to reset configuration if it is connected to ground during startup\n\tAsyncWiFiManager* wifiManager; ///< @brief Wifi configuration portal\n\tonWiFiManagerExit_t notifyWiFiManagerExit; ///< @brief Function called when configuration portal exits\n\tsimpleEventHandler_t notifyWiFiManagerStarted; ///< @brief Function called when configuration portal is started\n\ttime_t cycleStartedTime; ///< @brief Used to calculate exact sleep time by substracting awake time\n\tint16_t lastBroadcastMsgCounter; ///< @brief Counter for broadcast messages from gateway */\n\n\t/**\n\t  * @brief Check that a given CRC matches to calulated value from a buffer\n\t  * @param buf Pointer to the buffer that contains the stream to calculate CRC\n\t  * @param count Buffer length in number of bytes\n\t  * @param crc Received CRC to check against calculation\n\t  * @return Returns `true` if CRC check was successful. `false` otherwise\n\t  */\n\tbool checkCRC (const uint8_t* buf, size_t count, uint32_t* crc);\n\n\t/**\n\t  * @brief Starts node identification by flashing led\n\t  * @param period Flash led period in ms\n\t  */\n\tvoid startIdentifying (time_t period);\n\n\t/**\n\t  * @brief Stops node identification\n\t  */\n\tvoid stopIdentifying ();\n\n\t/**\n   * @brief Loads configuration from RTC data. Uses a CRC to check data integrity\n   * @return Returns `true` if data is valid. `false` otherwise\n   */\n\tbool loadRTCData ();\n\n\t/**\n\t* @brief Loads configuration from flash memory\n\t* @return Returns `true` if data was read successfuly. `false` otherwise\n\t*/\n\tbool loadFlashData ();\n\n\t/**\n\t* @brief Saves configuration to flash memory\n\t* @param fsOpen True if FileSystem has is managed in outter code\n\t* @return Returns `true` if data could be written successfuly. `false` otherwise\n\t*/\n\tbool saveFlashData (bool fsOpen = false);\n\n\t/**\n\t* @brief Starts configuration AP and web server and gets settings from it\n\t* @param data Pointer to configuration data to be stored on RTC memory to keep status\n\t*             along sleep cycles\n\t* @return Returns `true` if data was been correctly configured. `false` otherwise\n\t*/\n\tbool configWiFiManager (rtcmem_data_t* data);\n\n   /**\n\t* @brief Sends a restart notification control message\n\t*/\n\tvoid sendRestart ();\n\n\t/**\n\t  * @brief Build a **ClientHello** messange and send it to gateway\n\t  * @return Returns `true` if ClientHello message was successfully sent. `false` otherwise\n\t  */\n\tbool clientHello ();\n\n\t/**\n\t  * @brief Build a **ClockRequest** messange and send it to gateway\n\t  * @return Returns `true` if ClockRequest message was successfully sent. `false` otherwise\n\t  */\n\tbool clockRequest ();\n\n\t/**\n\t  * @brief Gets a buffer containing a **ClockResponse** message and process it. It uses that message to\n\t  * calculate clock difference against gateway and synchronize to it\n\t  * @param mac Address where this message was received from\n\t  * @param buf Pointer to the buffer that contains the message\n\t  * @param count Message length in number of bytes of ClockResponse message\n\t  * @return Returns `true` if message could be correcly processed\n\t  */\n\tbool processClockResponse (const uint8_t* mac, const uint8_t* buf, size_t count);\n\n\t/**\n\t  * @brief Gets a buffer containing a **ServerHello** message and process it. It uses that message to calculate a shared key using Diffie Hellman algorithm\n\t  * @param mac Address where this message was received from\n\t  * @param buf Pointer to the buffer that contains the message\n\t  * @param count Message length in number of bytes of ServerHello message\n\t  * @return Returns `true` if message could be correcly processed\n\t  */\n\tbool processServerHello (const uint8_t* mac, const uint8_t* buf, size_t count);\n\n\t/**\n\t  * @brief Gets a buffer containing an **InvalidateKey** message and process it. This trigger a new key agreement to start\n\t  * @param mac Address where this message was received from\n\t  * @param buf Pointer to the buffer that contains the message\n\t  * @param count Message length in number of bytes of InvalidateKey message\n\t  * @return Returns the reason because key is not valid anymore. Check possible values in nodeInvalidateReason_t\n\t  */\n\tnodeInvalidateReason_t processInvalidateKey (const uint8_t* mac, const uint8_t* buf, size_t count);\n\n\t/**\n\t  * @brief Gets a buffer containing a **BroadcastKey** message and process it. This key is used to send and receive broadcast messages\n\t  * @param mac Address where this message was received from\n\t  * @param buf Pointer to the buffer that contains the message\n\t  * @param count Message length in number of bytes of ServerHello message\n\t  * @return Returns `true` if message could be correcly processed\n\t  */\n\tbool processBroadcastKeyMessage (const uint8_t* mac, const uint8_t* buf, size_t count);\n\n\t/**\n\t  * @brief Builds, encrypts and sends a **Data** message.\n\t  * @param data Buffer to store payload to be sent\n\t  * @param len Length of payload data\n      * @param dataMsgType Signals if this message is a special EnigmaIoT message or that should not be passed to higher layers\n\t  * @param payloadEncoding Determine payload data encoding as nodePayloadEncoding_t. It can be RAW, CAYENNELPP, MSGPACK\n\t  * @param encrypt Indicates if message should be encrypted. True by default. Not recommended to set to false, use it only if you absolutely need more performance\n\t  * @return Returns `true` if message could be correcly sent\n\t  */\n    bool dataMessage (const uint8_t* data, size_t len, dataMessageType_t dataMsgType = DATA_TYPE, bool encrypt = true, nodePayloadEncoding_t payloadEncoding = CAYENNELPP);\n\n\t/**\n\t  * @brief Builds and sends a **Data** message without encryption. Not recommended, use it only if you absolutely need more performance.\n\t  * @param data Buffer to store payload to be sent\n\t  * @param len Length of payload data\n      * @param dataMsgType Signals if this message is a special EnigmaIoT message or that should not be passed to higher layers\n\t  * @param payloadEncoding Determine payload data encoding as nodePayloadEncoding_t. It can be RAW, CAYENNELPP, MSGPACK\n\t  * @return Returns `true` if message could be correcly sent\n\t  */\n    bool unencryptedDataMessage (const uint8_t* data, size_t len, dataMessageType_t dataMsgType = DATA_TYPE, nodePayloadEncoding_t payloadEncoding = CAYENNELPP);\n\n\t/**\n\t  * @brief Processes a single OTA update command or data\n\t  * @param mac Gateway address\n\t  * @param data Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processOTACommand (const uint8_t* mac, const uint8_t* data, uint8_t len);\n\n\t/**\n\t  * @brief Processes a control command. Does not propagate to user code\n\t  * @param mac Gateway address\n\t  * @param data Buffer to store received message\n\t  * @param len Length of payload data\n      * @param broadcast `true`if this is a broadcast addressed message\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processControlCommand (const uint8_t* mac, const uint8_t* data, size_t len, bool broadcast);\n\n\t/**\n\t  * @brief Processes downstream data from gateway\n\t  * @param mac Gateway address\n\t  * @param buf Buffer to store received payload\n\t  * @param count Length of payload data\n\t  * @param control Idicates if downstream message is user or control data. If true it is a control message\n\t  * @return Returns `true` if message could be correcly decoded\n\t  */\n\tbool processDownstreamData (const uint8_t* mac, const uint8_t* buf, size_t count, bool control = false);\n\n\t/**\n\t  * @brief Process every received message.\n\t  *\n\t  * It starts clasiffying message usint the first byte. After that it passes it to the corresponding method for decoding\n\t  * @param mac Address of message sender\n\t  * @param buf Buffer that stores message bytes\n      * @param count Length of message in number of bytes\n      * @param rssi RSSI of received message\n      */\n    void manageMessage (const uint8_t* mac, const uint8_t* buf, uint8_t count, signed int rssi);\n\n\t/**\n\t  * @brief Functrion to debug send status.\n\t  * @param mac_addr Address of message sender\n\t  * @param status Result status code\n\t  */\n\tvoid getStatus (uint8_t* mac_addr, uint8_t status);\n\n\t/**\n\t  * @brief Function that will be called anytime this node receives a message\n\t  * @param mac_addr Address of message sender\n\t  * @param data Buffer that stores message bytes\n      * @param len Length of message in number of bytes\n      * @param rssi RSSI of received message\n      */\n\tstatic void rx_cb (uint8_t* mac_addr, uint8_t* data, uint8_t len, signed int rssi);\n\n\t/**\n\t  * @brief Function that will be called anytime this node sends a message\n\t  * to indicate status result of sending process\n\t  * @param mac_addr Address of message destination\n\t  * @param status Result of sending process\n\t  */\n\tstatic void tx_cb (uint8_t* mac_addr, uint8_t status);\n\n\t/**\n\t  * @brief Processes a request of sleep time configuration\n\t  * @param mac Gateway address\n\t  * @param buf Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processGetSleepTimeCommand (const uint8_t* mac, const uint8_t* buf, uint8_t len);\n\n\t/**\n\t  * @brief Processes a request to set new sleep time configuration\n\t  * @param mac Gateway address\n\t  * @param buf Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processSetSleepTimeCommand (const uint8_t* mac, const uint8_t* buf, uint8_t len);\n\n\t/**\n\t  * @brief Processes a request to start indicate to identify a node visually\n\t  * @param mac Gateway address\n\t  * @param buf Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processSetIdentifyCommand (const uint8_t* mac, const uint8_t* buf, uint8_t len);\n\n\t/**\n\t  * @brief Processes a request to reset node configuration\n\t  * @param mac Gateway address\n\t  * @param buf Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processSetResetConfigCommand (const uint8_t* mac, const uint8_t* buf, uint8_t len);\n\n\t/**\n\t  * @brief Processes a request to restar node mcu\n\t  * @param mac Gateway address\n\t  * @param buf Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processSetRestartCommand (const uint8_t* mac, const uint8_t* buf, uint8_t len);\n\n\t/**\n\t  * @brief Processes a request firmware version\n\t  * @param mac Gateway address\n\t  * @param buf Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processVersionCommand (const uint8_t* mac, const uint8_t* buf, uint8_t len);\n\n\t/**\n\t  * @brief Initiades data transmission distinguissing if it is payload or control data.\n\t  * @param data Buffer to store payload to be sent\n\t  * @param len Length of payload data\n      * @param dataMsgType Signals if this message is a special EnigmaIoT message or that should not be passed to higher layers\n\t  * @param encrypt `true` if data should be encrypted. Default is `true`\n\t  * @param payloadEncoding Identifies data encoding of payload. It can be RAW, CAYENNELPP, MSGPACK\n\t  * @return Returns `true` if message could be correcly sent\n\t  */\n    bool sendData (const uint8_t* data, size_t len, dataMessageType_t dataMsgType, bool encrypt = true, nodePayloadEncoding_t payloadEncoding = CAYENNELPP);\n\n\t/**\n\t * @brief Starts searching for a gateway that it using configured Network Name as WiFi AP. Stores this info for subsequent use\n\t * @param data Node context structure\n\t * @param shouldStoreData True if this method should save context in flash\n\t * @return Returns `true` if gateway could be found. `false` otherwise\n\t */\n\tbool searchForGateway (rtcmem_data_t* data, bool shouldStoreData = false);\n\n\t/**\n\t * @brief Clears configuration stored in RTC memory to recover factory state\n\t */\n\tvoid clearRTC ();\n\n\t/**\n\t * @brief Clears configuration stored in flash to recover factory state\n\t */\n\tvoid clearFlash ();\n\n\t/**\n\t * @brief Save configuration to RTC to store current status and recover it after deep sleep\n\t * @return Returns `true` if result is successful. `false` otherwise\n\t */\n\tbool saveRTCData ();\n\n\t/**\n\t * @brief Checks reset button status during startup\n\t */\n\tvoid checkResetButton ();\n\n\t// /**\n\t//   * @brief Sends RSSI value and channel to Gateway\n\t//   * @return True if report was sent successfuly\n\t//   */\n\t// bool reportRSSI ();\n\n\t/**\n\t  * @brief Processes a request to measure RSSI\n\t  * @param mac Gateway address\n\t  * @param data Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processGetRSSICommand (const uint8_t* mac, const uint8_t* data, uint8_t len);\n\n\t/**\n\t  * @brief Processes a request to get Node name and address\n\t  * @param mac Gateway address\n\t  * @param data Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processGetNameCommand (const uint8_t* mac, const uint8_t* data, uint8_t len);\n\n\t/**\n\t  * @brief Processes a response to set Node name\n\t  * @param mac Gateway address\n\t  * @param data Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processSetNameResponse (const uint8_t* mac, const uint8_t* data, uint8_t len);\n\n\t/**\n\t  * @brief Processes a request to set Node name\n\t  * @param mac Gateway address\n\t  * @param data Buffer to store received message\n\t  * @param len Length of payload data\n\t  * @return Returns `true` if message could be correcly decoded and processed\n\t  */\n\tbool processSetNameCommand (const uint8_t* mac, const uint8_t* data, uint8_t len);\n\n\t/**\n\t  * @brief Informs Gateway about custom node name\n\t  * @param name Custom node name\n\t  * @return True if message was sent successfuly\n\t  */\n\tbool sendNodeNameSet (const char* name);\n\npublic:\n\t/**\n\t  * @brief Initalizes communication basic data and starts node registration\n\t  * @param comm Physical layer to be used on this node network\n\t  * @param gateway Gateway address\n\t  * @param networkKey Network key to protect shared key agreement\n\t  * @param useCounter Indicates if a counter has to be added to every message data to check message sequence. `true` by default\n\t  * @param sleepy Indicates if this node changes to low energy mode (sleep mode) after sending a data message. `true` by default\n\t  *\n\t  * This condition is signalled to Gateway during registration so that downlink messages are managed diferently.\n\t  * On non sleepy nodes a downlink data message can be sent on any moment as node will be always awake. But for nodes that sleep,\n\t  * normally those that are powered with batteries, downlink message will be queued on gateway and sent just after an uplink data\n\t  * message from node has been sent\n\t  */\n\tvoid begin (Comms_halClass* comm, uint8_t* gateway = NULL, uint8_t* networkKey = NULL, bool useCounter = true, bool sleepy = true);\n\n\t/**\n\t  * @brief Stops EnigmaIoT protocol\n\t  */\n\tvoid stop ();\n\n\t/**\n\t* @brief Sets connection as unregistered to force a resyncrhonisation after boot\n\t* @param reason Reason of the reboot (OTA, restart requested, configuration reset)\n\t* @param reboot True if a reboot should be triggered after unregistration\n\t*/\n\tvoid restart (restartReason_t reason, bool reboot = true);\n\n\t/**\n\t  * @brief Allows to configure a new sleep time period from user code\n\t  * @param sleepTime Time in seconds. Final period is not espected to be exact. Its value\n\t  *                  depends on communication process. If it is zero, disables deep sleep.\n\t  * @param forceSleepForever Ignored if `sleepTime` is not zero. If it has zero value forces deepSleep command to sleep indifinitely.\n\t  */\n\tvoid setSleepTime (uint32_t sleepTime, bool forceSleepForever = false);\n\n\t/**\n\t  * @brief Set node address to be used in EnigmaIOT communication\n\t  * @param address Node address\n\t  * @return `true` if addres was set correctly\n\t  */\n\tbool setNodeAddress (uint8_t address[ENIGMAIOT_ADDR_LEN]);\n\n\t/**\n\t  * @brief Returns sleep period in seconds\n\t  * @return Sleep period in seconds\n\t  */\n\tuint32_t getSleepTime ();\n\n\t/**\n\t  * @brief Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted broadcast\n\t  * messages. If this is enabled this will be notified to gateway so that it sends broadcast key.\n\t  * Notice this mode is optional and does not disable the ability to send normal messages.\n\t  * @return `true` if node has broadcast mode enabled.\n\t  */\n\tbool broadcastIsEnabled () {\n\t\treturn node.broadcastIsEnabled ();\n\t}\n\n\t/**\n\t  * @brief Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node will be able to send\n\t  * and receive encrypted broadcast messages.\n\t  * @param broadcast `true` to enable broadcast mode on this node.\n\t  */\n\tvoid enableBroadcast (bool broadcast = true) {\n#ifndef DISABLE_BRCAST\n\t\tnode.enableBroadcast (broadcast);\n\t\trtcmem_data.broadcastKeyValid = false;\n\t\trtcmem_data.broadcastKeyRequested = false; // Key is not requested yet\n#endif\n\t}\n\n\t/**\n\t  * @brief This method should be called periodically for instance inside `loop()` function.\n\t  * It is used for internal node maintenance tasks\n\t  */\n\tvoid handle ();\n\n\t/**\n\t  * @brief Controls clock synchronization function\n\t  * @param clockSync If true clock will be synchronized with gateway\n\t  */\n\tvoid enableClockSync (bool clockSync = true) {\n        setenv (\"TZ\", TZINFO, 1);\n        tzset ();\n\t\tclockSyncEnabled = clockSync;\n\t}\n\n\t/**\n\t  * @brief Sets a LED to be flashed every time a message is transmitted\n\t  * @param led LED I/O pin\n\t  * @param onTime Flash duration. 100ms by default.\n\t  */\n\tvoid setLed (uint8_t led, time_t onTime = FLASH_LED_TIME);\n\n\t/**\n\t  * @brief Sets a pin to be used to reset configuration it it is connected to ground during startup\n\t  * @param pin Reset pin\n\t  */\n\tvoid setResetPin (int pin);\n\n\t/**\n\t  * @brief Starts a data message transmission\n\t  * @param data Payload buffer\n\t  * @param len Payload length\n\t  * @param payloadEncoding Identifies data encoding of payload. It can be RAW, CAYENNELPP, MSGPACK\n\t  */\n\tbool sendData (const uint8_t* data, size_t len, nodePayloadEncoding_t payloadEncoding = CAYENNELPP) {\n\t\treturn sendData (data, len, DATA_TYPE, true, payloadEncoding);\n    }\n\n    /**\n      * @brief Builds, encrypts and sends a **HomeAssistant discovery** message.\n      * @param data Buffer to store payload to be sent\n      * @param len Length of payload data\n      * @return Returns `true` if message could be correcly sent\n      */\n    bool sendHADiscoveryMessage (const uint8_t* data, size_t len);\n\n\n\t/**\n\t  * @brief Starts a data message transmission\n\t  * @param data Payload buffer\n\t  * @param len Payload length\n\t  * @param payloadEncoding Identifies data encoding of payload. It can be RAW, CAYENNELPP, MSGPACK\n\t  */\n\tbool sendUnencryptedData (const uint8_t* data, size_t len, nodePayloadEncoding_t payloadEncoding = CAYENNELPP) {\n        return sendData (data, len, DATA_TYPE, false, payloadEncoding);\n\t}\n\n\t/**\n\t  * @brief Defines a function callback that will be called on every downlink data message that is received from gateway\n\t  *\n\t  * Use example:\n\t  * ``` C++\n\t  * // First define the callback function\n\t  * void processRxData (const uint8_t* mac, const uint8_t* buffer, uint8_t length) {\n\t  *   // Do whatever you need with received data\n\t  * }\n\t  *\n\t  * void setup () {\n\t  *   .....\n\t  *   // Now register function as data message handler\n\t  *   EnigmaIOTNode.onDataRx (processRxData);\n\t  *   .....\n\t  * }\n\t  *\n\t  * void loop {\n\t  *   .....\n\t  * }\n\t  * ```\n\t  * @param handler Pointer to the function\n\t  */\n\tvoid onDataRx (onNodeDataRx_t handler) {\n\t\tnotifyData = handler;\n\t}\n\n\t/**\n\t  * @brief Defines a function callback that will be called everytime node is registered on gateway.\n\t  *\n\t  * Use example:\n\t  * ``` C++\n\t  * // First define the callback function\n\t  * void connectEventHandler () {\n\t  *   // Do whatever you need to process disconnecion\n\t  * }\n\t  *\n\t  * void setup () {\n\t  *   .....\n\t  *   // Now register function as data message handler\n\t  *   EnigmaIOTNode.onConnected (connectEventHandler);\n\t  *   .....\n\t  * }\n\t  *\n\t  * void loop {\n\t  *   .....\n\t  * }\n\t  * ```\n\t  * @param handler Pointer to the function\n\t  */\n\tvoid onConnected (onConnected_t handler) {\n\t\tnotifyConnection = handler;\n\t}\n\n\t/**\n\t  * @brief Defines a function callback that will be called everytime node is disconnected from gateway.\n\t  *\n\t  * Deregistration is always started by gateway due syntax or encryption error or in case of key validity is over.\n\t  *\n\t  * Use example:\n\t  * ``` C++\n\t  * // First define the callback function\n\t  * void disconnectEventHandler () {\n\t  *   // Do whatever you need to process disconnecion\n\t  * }\n\t  *\n\t  * void setup () {\n\t  *   .....\n\t  *   // Now register function as data message handler\n\t  *   EnigmaIOTNode.onDisconnected (disconnectEventHandler);\n\t  *   .....\n\t  * }\n\t  *\n\t  * void loop {\n\t  *   .....\n\t  * }\n\t  * ```\n\t  * @param handler Pointer to the function\n\t  */\n\tvoid onDisconnected (onDisconnected_t handler) {\n\t\tnotifyDisconnection = handler;\n\t}\n\n\t/**\n\t * @brief Register callback to be called on wifi manager exit\n\t * @param handle Callback function pointer\n\t */\n\tvoid onWiFiManagerExit (onWiFiManagerExit_t handle) {\n\t\tnotifyWiFiManagerExit = handle;\n\t}\n\n   /**\n\t* @brief Register callback to be called on wifi manager start\n\t* @param handle Callback function pointer\n\t*/\n\tvoid onWiFiManagerStarted (simpleEventHandler_t handle) {\n\t\tnotifyWiFiManagerStarted = handle;\n\t}\n\n\t/**\n\t * @brief Adds a parameter to configuration portal\n\t * @param p Configuration parameter\n\t */\n\tvoid addWiFiManagerParameter (AsyncWiFiManagerParameter* p) {\n\t\tif (wifiManager) {\n\t\t\twifiManager->addParameter (p);\n\t\t}\n\t}\n\n\t/**\n\t  * @brief Requests transition to sleep mode (low energy state)\n\t  *\n\t  * Sleep can be requested in any moment and will be triggered inmediatelly except if node is doing registration or is waiting for downlink\n\t  */\n\tvoid sleep ();\n\n\t/**\n\t  * @brief Gets current clock counter. millis() + offset\n\t  * @return Clock value in `int64_t` format\n\t  */\n\tint64_t clock ();\n\n\t/**\n\t  * @brief Gets current time in seconds from 1970, if time is synchronized\n\t  * @return Time value in `time_t` format\n\t  */\n\ttime_t unixtime ();\n\n\t/**\n\t  * @brief Checks if internal clock is synchronized to gateway\n\t  * @return True if clock is synchronized\n\t  */\n\tbool hasClockSync ();\n\n\t/**\n\t  * @brief Checks if node is registered\n\t  * @return True if node is registered\n\t  */\n\tbool isRegistered () {\n\t\treturn node.isRegistered ();\n\t}\n\n\t/**\n\t * @brief Gets latest RSSI measurement. It is updated during start up or in case of transmission errors\n\t * @return RSSI value\n\t */\n\tsigned int getRSSI ();\n\n\t/**\n\t * @brief Deletes configuration file stored on flash. It makes neccessary to configure it again using WiFi Portal\n\t */\n\tvoid resetConfig ();\n\n\t/**\n\t * @brief Checks if OTA is running\n\t * @return OTA running state\n\t */\n\tbool getOTArunning () {\n\t\treturn otaRunning;\n    }\n\n    /**\n     * @brief Gets Node instance\n     * @return Node instance pointer\n     */\n    Node* getNode () {\n        return &node;\n    }\n\n};\n\nextern EnigmaIOTNodeClass EnigmaIOTNode;\n\n//#endif // ESP8266\n#endif // _ENIGMAIOTNODE_h\n"
  },
  {
    "path": "src/EnigmaIOTRingBuffer.h",
    "content": "/**\n  * @file EnigmaIOTRingBuffer.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Library to build a gateway for EnigmaIoT system\n  */\n\n#ifndef _ENIGMAIOTBUFFER_h\n#define _ENIGMAIOTBUFFER_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n#include \"helperFunctions.h\"\n\n/**\n  * @brief Ring buffer class. Used to implement message buffer\n  *\n  */\ntemplate <typename Telement>\nclass EnigmaIOTRingBuffer {\nprotected:\n    int maxSize; ///< @brief Buffer size\n    int numElements = 0; ///< @brief Number of elements that buffer currently has\n    int readIndex = 0; ///< @brief Pointer to next item to be read\n    int writeIndex = 0; ///< @brief Pointer to next position to write onto\n    Telement* buffer; ///< @brief Actual buffer\n\npublic:\n    /**\n      * @brief Creates a ring buffer to hold `Telement` objects\n      * @param range Buffer depth\n      */\n    EnigmaIOTRingBuffer <Telement> (int range) : maxSize (range) {\n        buffer = new Telement[maxSize];\n    }\n\n    /**\n      * @brief EnigmaIOTRingBuffer destructor\n      * @param range Free up buffer memory\n      */\n    ~EnigmaIOTRingBuffer () {\n        maxSize = 0;\n        delete[] (buffer);\n    }\n\n    /**\n      * @brief Returns actual number of elements that buffer holds\n      * @return Returns Actual number of elements that buffer holds\n      */\n    int size () { return numElements; }\n\n    /**\n      * @brief Checks if buffer is full\n      * @return Returns `true`if buffer is full, `false` otherwise\n      */\n    bool isFull () { return numElements == maxSize; }\n\n    /**\n      * @brief Checks if buffer is empty\n      * @return Returns `true`if buffer has no elements stored, `false` otherwise\n      */\n    bool empty () { return (numElements == 0); }\n\n    /**\n      * @brief Adds a new item to buffer, deleting older element if it is full\n      * @param item Element to add to buffer\n      * @return Returns `false` if buffer was full before inserting the new element, `true` otherwise\n      */\n    bool push (Telement* item) {\n        bool wasFull = isFull ();\n        DEBUG_DBG (\"Add element. Buffer was %s\", wasFull ? \"full\" : \"not full\");\n        DEBUG_DBG (\"Before -- > ReadIdx: %d. WriteIdx: %d. Size: %d\", readIndex, writeIndex, numElements);\n#ifdef ESP32\n        portMUX_TYPE myMutex = portMUX_INITIALIZER_UNLOCKED;\n        portENTER_CRITICAL (&myMutex);\n#endif\n        memcpy (&(buffer[writeIndex]), item, sizeof (Telement));\n        //Serial.printf (\"Copied: %d bytes\\n\", sizeof (Telement));\n        writeIndex++;\n        if (writeIndex >= maxSize) {\n            writeIndex %= maxSize;\n        }\n        if (wasFull) { // old value is no longer valid\n            readIndex++;\n            if (readIndex >= maxSize) {\n                readIndex %= maxSize;\n            }\n        } else {\n            numElements++;\n        }\n#ifdef ESP32\n        portEXIT_CRITICAL (&myMutex);\n#endif\n        DEBUG_DBG (\"After -- > ReadIdx: %d. WriteIdx: %d. Size: %d\", readIndex, writeIndex, numElements);\n        return !wasFull;\n    }\n\n    /**\n      * @brief Deletes older item from buffer, if buffer is not empty\n      * @return Returns `false` if buffer was empty before trying to delete element, `true` otherwise\n      */\n    bool pop () {\n        bool wasEmpty = empty ();\n        DEBUG_DBG (\"Remove element. Buffer was %s\", wasEmpty ? \"empty\" : \"not empty\");\n        DEBUG_DBG (\"Before -- > ReadIdx: %d. WriteIdx: %d. Size: %d\", readIndex, writeIndex, numElements);\n        if (!wasEmpty) {\n            readIndex++;\n            if (readIndex >= maxSize) {\n                readIndex %= maxSize;\n            }\n            numElements--;\n        }\n        DEBUG_DBG (\"After -- > ReadIdx: %d. WriteIdx: %d. Size: %d\", readIndex, writeIndex, numElements);\n        return !wasEmpty;\n    }\n\n    /**\n      * @brief Gets a pointer to older item in buffer, if buffer is not empty\n      * @return Returns pointer to element. If buffer was empty before calling this method it returns `NULL`\n      */\n    Telement* front () {\n        DEBUG_DBG (\"Read element. ReadIdx: %d. WriteIdx: %d. Size: %d\", readIndex, writeIndex, numElements);\n        if (!empty ()) {\n            return &(buffer[readIndex]);\n        } else {\n            return NULL;\n        }\n    }\n};\n\n#endif"
  },
  {
    "path": "src/EnigmaIOTdebug.h",
    "content": "/**\n  * @brief Auxiliary functions for debugging over Serial\n  *\n  * Format used on debug functions is the same as `printf()`. Check source code for usage examples\n  * Debug calls will be enabled or disabled automatically before compiling according defined `DEBUG_LEVEL`.\n  *\n  * If `DEBUG_ESP_PORT` is not defined library will give no debug output at all\n  *\n  * @file EnigmaIOTdebug.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  */\n\n#ifndef _DEBUG_h\n#define _DEBUG_h\n\n#include <Arduino.h>\n#include \"EnigmaIoTconfig.h\"\n#ifdef ESP32\n#include <esp_log.h>\n#endif\n\n#define NO_DEBUG\t0 ///< @brief Debug level that will give no debug output\n#define ERROR\t1 ///< @brief Debug level that will give error messages\n#define WARN\t2 ///< @brief Debug level that will give error and warning messages\n#define INFO\t3 ///< @brief Debug level that will give error, warning and info messages\n#define DBG\t    4 ///< @brief Debug level that will give error, warning,info AND dbg messages\n#define VERBOSE\t5 ///< @brief Debug level that will give all defined messages\n\n#ifdef ESP8266\nconst char* extractFileName (const char* path);\n#define DEBUG_LINE_PREFIX() DEBUG_ESP_PORT.printf_P (PSTR(\"[%lu][H:%5lu][%s:%d] %s() | \"),millis(),(unsigned long)ESP.getFreeHeap(),extractFileName(__FILE__),__LINE__,__FUNCTION__)\n#endif\n\n#ifdef DEBUG_ESP_PORT\n\n#ifdef ESP8266\n#if DEBUG_LEVEL >= VERBOSE\n#define DEBUG_VERBOSE(text,...) DEBUG_ESP_PORT.print(\"V \");DEBUG_LINE_PREFIX();DEBUG_ESP_PORT.printf_P(PSTR(text),##__VA_ARGS__);DEBUG_ESP_PORT.println()\n#else\n#define DEBUG_VERBOSE(...)\n#endif\n\n#if DEBUG_LEVEL >= DBG\n#define DEBUG_DBG(text,...) DEBUG_ESP_PORT.print(\"D \");DEBUG_LINE_PREFIX(); DEBUG_ESP_PORT.printf_P(PSTR(text),##__VA_ARGS__);DEBUG_ESP_PORT.println()\n#else\n#define DEBUG_DBG(...)\n#endif\n\n#if DEBUG_LEVEL >= INFO\n#define DEBUG_INFO(text,...) DEBUG_ESP_PORT.print(\"I \");DEBUG_LINE_PREFIX();DEBUG_ESP_PORT.printf_P(PSTR(text),##__VA_ARGS__);DEBUG_ESP_PORT.println()\n#else\n#define DEBUG_INFO(...)\n#endif\n\n#if DEBUG_LEVEL >= WARN\n#define DEBUG_WARN(text,...) DEBUG_ESP_PORT.print(\"W \");DEBUG_LINE_PREFIX();DEBUG_ESP_PORT.printf_P(PSTR(text),##__VA_ARGS__);DEBUG_ESP_PORT.println()\n#else\n#define DEBUG_WARN(...)\n#endif\n\n#if DEBUG_LEVEL >= ERROR\n#define DEBUG_ERROR(text,...) DEBUG_ESP_PORT.print(\"E \");DEBUG_LINE_PREFIX();DEBUG_ESP_PORT.printf_P(PSTR(text),##__VA_ARGS__);DEBUG_ESP_PORT.println()\n#else\n#define DEBUG_ERROR(...)\n#endif\n#elif defined ESP32\n#define DEFAULT_LOG_TAG \"EnigmaIOT\"\n#define DEBUG_VERBOSE(format,...) ESP_LOGV (DEFAULT_LOG_TAG,\"%d Heap: %6d. \" format, millis(), ESP.getFreeHeap(), ##__VA_ARGS__)\n#define DEBUG_DBG(format,...) ESP_LOGD (DEFAULT_LOG_TAG,\"%d Heap: %6d \" format, millis(), ESP.getFreeHeap(), ##__VA_ARGS__)\n#define DEBUG_INFO(format,...) ESP_LOGI (DEFAULT_LOG_TAG,\"%d Heap: %6d \" format, millis(), ESP.getFreeHeap(), ##__VA_ARGS__)\n#define DEBUG_WARN(format,...) ESP_LOGW (DEFAULT_LOG_TAG,\"%d Heap: %6d \" format, millis(), ESP.getFreeHeap(), ##__VA_ARGS__)\n#define DEBUG_ERROR(format,...) ESP_LOGE (DEFAULT_LOG_TAG,\"%d Heap: %6d \" format, millis(), ESP.getFreeHeap(), ##__VA_ARGS__)\n#endif\n#else\n#define DEBUG_VERBOSE(...)\n#define DEBUG_DBG(...)\n#define DEBUG_INFO(...)\n#define DEBUG_WARN(...)\n#define DEBUG_ERROR(...)\n#endif\n\n\n\n#endif\n\n"
  },
  {
    "path": "src/EnigmaIOTjsonController.h",
    "content": "/**\n  * @file EnigmaIOTjsonController.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Prototype for JSON/MSGPACK based controller node\n  */\n\n#ifndef _ENIGMAIOTJSONCONTROLLER_h\n#define _ENIGMAIOTJSONCONTROLLER_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n#include <EnigmaIOTNode.h>\n#include <ArduinoJson.h>\n#if SUPPORT_HA_DISCOVERY    \n#include <queue>\n#endif\n\n#if defined ESP8266 || defined ESP32\n#include <functional>\ntypedef std::function<bool (const uint8_t* data, size_t len, nodePayloadEncoding_t payloadEncoding, dataMessageType_t dataMsgType)> sendData_cb; /**< Data send callback definition */\n#if SUPPORT_HA_DISCOVERY\ntypedef std::function<void ()> haDiscovery_call_t; /**< Function called to send HA discovery data */\n#endif // SUPPORT_HA_DISCOVERY\n#else\n#error This code only supports ESP8266 or ESP32 platforms\n#endif // defined ESP8266 || defined ESP32\n\nclass EnigmaIOTjsonController {\nprotected:\n\tsendData_cb sendData;\n    EnigmaIOTNodeClass* enigmaIotNode;\n#if SUPPORT_HA_DISCOVERY\n    std::queue<haDiscovery_call_t> haCallQueue;\n    bool doSendHAdiscovery = false;\n    clock_t sendHAtime;\n    clock_t sendHAdelay = HA_FIRST_DISCOVERY_DELAY;\n#endif // SUPPORT_HA_DISCOVERY\n\npublic:\n   /**\n\t * @brief Initialize data structures\n \t * @param node Pointer to EnigmaIOT node instance\n\t * @param config Pointer to configuration structure. If it is `NULL` then it tries to load configuration from flash\n\t */\n\tvirtual void setup (EnigmaIOTNodeClass* node, void* config = NULL) = 0;\n\n\t/**\n\t * @brief This should be called periodically for module handling\n\t */\n\tvirtual void loop () = 0;\n\n\t/**\n\t * @brief Called to process a downlink command\n\t * @param mac Address of sender\n\t * @param buffer Message bytes\n\t * @param length Message length\n\t * @param command Type of command. nodeMessageType_t\n\t * @param payloadEncoding Payload encoding of type nodePayloadEncoding_t\n\t * @return `true` on success\n\t */\n\tvirtual bool processRxCommand (\n\t\tconst uint8_t* mac, const uint8_t* buffer, uint8_t length, nodeMessageType_t command, nodePayloadEncoding_t payloadEncoding) = 0;\n\n\t/**\n\t * @brief Register send data callback to run when module needs to send a message\n\t * @param cb Callback with sendData_cb format\n\t */\n\tvoid sendDataCallback (sendData_cb cb) {\n\t\tsendData = cb;\n\t}\n\n\t/**\n\t * @brief Used to notify controller that it is registered on EnigmaIOT network\n\t */\n    virtual void connectInform () {\n        DEBUG_INFO (\"Connect inform\");\n        sendStartAnouncement ();\n#if SUPPORT_HA_DISCOVERY\n        if (enigmaIotNode->getNode ()->getSleepy ()) {\n            sendHAdelay = HA_FIRST_DISCOVERY_DELAY_SLEEPY;\n        }\n        DEBUG_INFO (\"Enable HA Discovery\");\n        doSendHAdiscovery = true;\n        sendHAtime = millis ();\n#endif // SUPPORT_HA_DISCOVERY\n    }\n\n    /**\n     * @brief Used to notify controller that it is unregistered on EnigmaIOT network\n     */\n    virtual void disconnectInform (nodeInvalidateReason_t reason){}\n\n\t/**\n\t * @brief Called when wifi manager starts config portal\n\t */\n\tvirtual void configManagerStart () = 0;\n\n\t/**\n\t * @brief Called when wifi manager exits config portal\n\t * @param status `true` if configuration was successful\n\t */\n\tvirtual void configManagerExit (bool status) = 0;\n\n\t/**\n\t * @brief Loads output module configuration\n\t * @return Returns `true` if load was successful. `false` otherwise\n\t */\n    virtual bool loadConfig () = 0;\n\n#if SUPPORT_HA_DISCOVERY    \n    void callHAdiscoveryCalls () {\n        if (doSendHAdiscovery && millis () - sendHAtime > sendHAdelay) {\n            haDiscovery_call_t hacall = 0;\n            DEBUG_INFO (\"Call HA discovery\");\n            if (haCallQueue.size ()) {\n                hacall = haCallQueue.front ();\n            }\n            DEBUG_INFO (\"haCallQueue size is %d\", haCallQueue.size ());\n            if (hacall) {\n                DEBUG_INFO (\"Execute hacall\");\n                hacall ();\n                haCallQueue.pop ();\n                sendHAtime = millis ();\n                if (enigmaIotNode->getNode ()->getSleepy ()) {\n                    sendHAdelay = HA_NEXT_DISCOVERY_DELAY_SLEEPY;\n                } else {\n                    sendHAdelay = HA_NEXT_DISCOVERY_DELAY;\n                }\n            } else {\n                doSendHAdiscovery = false;\n            }\n            DEBUG_INFO (\" Exit call HA discovery. Delay = %d. doSendHAdiscovery = %s\",\n                        sendHAdelay, doSendHAdiscovery ? \"true\" : \"false\");\n        }\n    }\n#endif\n    \nprotected:\n\n\t/**\n\t  * @brief Sends command processing response acknowledge\n\t  * @param command Command name\n\t  * @param result Command execution success\n\t  * @return Returns `true` if message sending was successful. `false` otherwise\n\t  */\n\tvirtual bool sendCommandResp (const char* command, bool result) = 0;\n\n\t/**\n\t  * @brief Send a message to notify node has started running\n\t  * @return Returns `true` if message sending was successful. `false` otherwise\n\t  */\n\tvirtual bool sendStartAnouncement () = 0;\n\n\t/**\n\t  * @brief Saves output module configuration\n\t  * @return Returns `true` if save was successful. `false` otherwise\n\t  */\n\tvirtual bool saveConfig () = 0;\n\n\t/**\n\t  * @brief Sends a JSON encoded message to lower layer\n\t  * @return Returns `true` if message sending was successful. `false` otherwise\n\t  */\n\tbool sendJson (DynamicJsonDocument& json) {\n\t\tint len = measureMsgPack (json) + 1;\n\t\tuint8_t* buffer = (uint8_t*)malloc (len);\n\t\tlen = serializeMsgPack (json, (char*)buffer, len);\n\n\t\tsize_t strLen = measureJson (json) + 1;\n\t\tchar* strBuffer = (char*)calloc (sizeof (uint8_t), strLen);\n\n\t\t/*Serial.printf (\"Trying to send: %s\\n\", printHexBuffer (\n\t\t\tbuffer, len));*/\n\t\tserializeJson (json, strBuffer, strLen);\n\t\tDEBUG_INFO (\"Trying to send: %s\", strBuffer);\n\t\tbool result = false;\n\t\tif (sendData)\n            result = sendData (buffer, len, MSG_PACK, DATA_TYPE);\n\t\tif (!result) {\n\t\t\tDEBUG_WARN (\"---- Error sending data\");\n\t\t} else {\n\t\t\tDEBUG_INFO (\"---- Data sent\");\n        }\n        if (buffer) {\n            free (buffer);        \n        }\n        if (strBuffer) {\n            free (strBuffer);\n        }\n\t\treturn result;\n    }\n\n#if SUPPORT_HA_DISCOVERY    \n    void addHACall (haDiscovery_call_t HACall) {\n        haCallQueue.push (HACall);\n    }\n\n    bool sendHADiscovery (uint8_t* data, size_t len) {\n        if (!data || !len) {\n            DEBUG_WARN (\"Empty HA message\");\n            return false;\n        }\n        bool result = false;\n        if (sendData)\n            result = sendData (data, len, MSG_PACK, HA_DISC_TYPE);\n        if (!result) {\n            DEBUG_WARN (\"---- Error sending data\");\n        } else {\n            DEBUG_INFO (\"---- Data sent\");\n        }\n        return result;\n    }\n#endif\n};\n\n#endif // _ENIGMAIOTJSONCONTROLLER_h\n\n"
  },
  {
    "path": "src/EnigmaIoTconfig.h",
    "content": "/**\n  * @file EnigmaIoTconfig.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Parameter configuration\n  */\n\n#ifndef _CONFIG_h\n#define _CONFIG_h\n\n#include \"Arduino.h\"\n#include \"EnigmaIoTconfigAdvanced.h\"\n\n// Global configuration. Physical layer settings\nstatic const uint8_t ENIGMAIOT_PROT_VERS[3] = { 0,9,8 }; ///< @brief EnitmaIoT Version\nstatic const uint8_t DEFAULT_CHANNEL = 3; ///< @brief WiFi channel to be used on ESP-NOW\nstatic const uint32_t FLASH_LED_TIME = 30; ///< @brief Time that led keeps on during flash in ms\nstatic const int RESET_PIN_DURATION = 5000; ///< @brief Number of milliseconds that reset pin has to be grounded to produce a configuration reset\n#define TZINFO \"CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00\" ///< @brief Time zone\n#define NTP_SERVER_1 \"pool.ntp.org\"\n#define NTP_SERVER_2 \"time.nist.gov\"\n\n// Gateway configuration\nstatic const unsigned int MAX_KEY_VALIDITY = 172800000U; ///< @brief After this time (in ms) a node is unregistered. Setting this to 0 means imfinite\nstatic const unsigned int MAX_NODE_INACTIVITY = 86400000U; ///< @brief After this time (in ms) a node is marked as gone. Setting this to 0 means imfinite\nstatic const size_t MAX_MQTT_QUEUE_SIZE = 3; ///< @brief Maximum number of MQTT messages to be sent\n#define ENABLE_STATUS_MESSAGES 1 ///< @brief Enable sending status message after every data message\nstatic const int RATE_AVE_ORDER = 5; ///< @brief Message rate filter order\nstatic const int MAX_INPUT_QUEUE_SIZE = 3; ///< @brief Input queue size for EnigmaIOT messages. Acts as a buffer to be able to handle messages during high load\n#ifndef NUM_NODES\nstatic const int NUM_NODES = 35; ///< @brief Maximum number of nodes that this gateway can handle\n#endif //NUM_NODES\n#ifndef CONNECT_TO_WIFI_AP\n#define CONNECT_TO_WIFI_AP 1 ///< @brief In projects where gateway should not be connected to WiFi (for instance a data logger to SD) it may be useful to disable WiFi setting this to 0. Set it to 1 otherwise\n#endif //CONNECT_TO_WIFI_AP\n\n// Node configuration\nstatic const int16_t RECONNECTION_PERIOD = 1500; ///< @brief Time to retry Gateway connection\nstatic const uint16_t DOWNLINK_WAIT_TIME = 350; ///< @brief Time to wait for downlink message before sleep. Setting less than 180 ms causes ESP-NOW errors due to lack of ACK processing\nstatic const uint32_t DEFAULT_SLEEP_TIME = 10; ///< @brief Default sleep time if it was not set\nstatic const time_t IDENTIFY_TIMEOUT = 10000; ///< @brief How long LED will be flashing during identification\n#ifndef TIME_SYNC_PERIOD\nstatic const uint32_t TIME_SYNC_PERIOD = 30000; ///< @brief Period of clock synchronization request\n#endif // TIME_SYNC_PERIOD\nstatic const unsigned int QUICK_SYNC_TIME = 5000; ///< @brief Period of clock synchronization request in case of resync is needed \n#ifndef PRE_REG_DELAY\nstatic const uint32_t PRE_REG_DELAY = 5000; ///< @brief Time to wait before registration so that other nodes have time to communicate. Real delay is a random lower than this value.\n#endif // PRE_REG_DELAY\nstatic const uint32_t POST_REG_DELAY = 1500; ///< @brief Time to wait before sending data after registration so that other nodes have time to finish their registration. Real delay is a random lower than this value.\nstatic const uint8_t COMM_ERRORS_BEFORE_SCAN = 2; ///< @brief Node will search for a gateway if this number of communication errors have happened.\n\n//Web API\n#define ENABLE_WEB_API 1 ///< @brief Enable Web API support on gateway\n\n//Debug\n#ifndef DEBUG_ESP_PORT\n#define DEBUG_ESP_PORT Serial ///< @brief Stream to output debug info. It will normally be `Serial`\n#endif // DEBUG_ESP_PORT\n#ifndef DEBUG_LEVEL\n// DON'T ENABLE DEBUG IF YOU CAN ONLY DO OTA UPDATE. YOU MAY BE UNABLE TO DO OTA UPDATE ANYMORE UNTIL YOU FLASH THE NODE THROUGH WIRE\n#define DEBUG_LEVEL WARN ///< @brief Possible values VERBOSE, DBG, INFO, WARN, ERROR, NONE\n#endif //DEBUG_LEVEL\n\n#endif\n"
  },
  {
    "path": "src/EnigmaIoTconfigAdvanced.h",
    "content": "/**\n  * @file EnigmaIoTconfigAdvanced.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Parameter configuration\n  */\n\n /****************************************************************************\n  DO NOT MODIFY THESE SETTINGS UNLESS YOU KNOW WHAT YOU ARE DOING\n  ---------------------------------------------------------------\n  NO MODIFIQUES ESTOS AJUSTES SI NO SABES LO QUE ESTÁS HACIENDO\n  ****************************************************************************/\n\n#ifndef _CONFIG_ADVANCED_h\n#define _CONFIG_ADVANCED_h\n\n#include \"Arduino.h\"\n\n// Global configuration. Physical layer settings\nstatic const uint8_t MAX_MESSAGE_LENGTH = 250; ///< @brief Maximum payload size on ESP-NOW\nstatic const uint8_t MAX_DATA_PAYLOAD_LENGTH = 214; ///< @brief Maximum EnigmaIOT user data payload size\nstatic const size_t ENIGMAIOT_ADDR_LEN = 6; ///< @brief Address size. Mac address = 6 bytes\nstatic const uint8_t NETWORK_NAME_LENGTH = 21; ///< @brief Maximum number of characters of network name\nstatic const uint8_t NODE_NAME_LENGTH = 33; ///< @brief Maximum number of characters of node name\nstatic const uint8_t BROADCAST_ADDRESS[] = { 0xff,0xff,0xff,0xff,0xff,0xff }; ///< @brief Broadcast address\nstatic const char BROADCAST_NONE_NAME[] = \"broadcast\"; ///< @brief Name to reference broadcast node\nstatic const uint8_t COMMS_QUEUE_SIZE = 5;\n\n// Gateway configuration\nstatic const int OTA_GW_TIMEOUT = 11000; ///< @brief OTA mode timeout. In OTA mode all data messages are ignored\n#ifndef DISCONNECT_ON_DATA_ERROR\nstatic const bool DISCONNECT_ON_DATA_ERROR = true; ///< @brief Activates node invalidation in case of data error\n#endif //DISCONNECT_ON_DATA_ERROR\n#ifndef ENABLE_REST_API\n#define ENABLE_REST_API 1 ///< @brief Set to 1 to enable REST API\n#endif // ENABLE_REST_API\n#ifndef SUPPORT_HA_DISCOVERY\n#define SUPPORT_HA_DISCOVERY 1  ///< @brief Set to 1 to enable HomeAssistant autodiscovery support\n#if SUPPORT_HA_DISCOVERY\nstatic const char HA_DISCOVERY_PREFIX[] = \"homeassistant\"; ///< @brief Used to build HomeAssistant discovery message topic\n#endif // SUPPORT_HA_DISCOVERY\n#endif // SUPPORT_HA_DISCOVERY\n\n// Node configuration\nstatic const uint32_t OTA_TIMEOUT_TIME = 10000; ///< @brief Timeout between OTA messages. In milliseconds\nstatic const int MIN_SYNC_ACCURACY = 5000; ///< @brief If calculated offset absolute value is higher than this value resync is done more often. us units\nstatic const int MAX_DATA_PAYLOAD_SIZE = 214; ///< @brief Maximun payload size for data packets\n#ifndef CHECK_COMM_ERRORS\nstatic const bool CHECK_COMM_ERRORS = true; ///< @brief Try to reconnect in case of communication errors\n#endif // CHECK_COMM_ERRORS\nstatic const uint32_t RTC_ADDRESS = 8; ///< @brief RTC memory address where to store context. Modify it if you need place to store your own data during deep sleep. Take care not to overwrite above that address. It is 8 to give space for FailSafeMode library\n#ifndef USE_FLASH_INSTEAD_RTC\n#define USE_FLASH_INSTEAD_RTC 0 ///< @brief Use flash instead RTC for temporary context data. ATTENTION: This allows connection to survive power off cycles but may damage flash memory persistently.\n#endif // USE_FLASH_INSTEAD_RTC\n#ifndef HA_FIRST_DISCOVERY_DELAY\n#define HA_FIRST_DISCOVERY_DELAY 5000\n#endif // HA_FIRST_DISCOVERY_DELAY\n#ifndef HA_NEXT_DISCOVERY_DELAY\n#define HA_NEXT_DISCOVERY_DELAY 500\n#endif // HA_NEXT_DISCOVERY_DELAY\n#ifndef HA_FIRST_DISCOVERY_DELAY_SLEEPY\n#define HA_FIRST_DISCOVERY_DELAY_SLEEPY 10\n#endif // HA_FIRST_DISCOVERY_DELAY\n#ifndef HA_NEXT_DISCOVERY_DELAY_SLEEPY\n#define HA_NEXT_DISCOVERY_DELAY_SLEEPY 10\n#endif // HA_NEXT_DISCOVERY_DELAY\n\n//Crypto configuration\nconst uint8_t KEY_LENGTH = 32; ///< @brief Key length used by selected crypto algorythm. The only tested value is 32. Change it only if you know what you are doing\nconst uint8_t IV_LENGTH = 12; ///< @brief Initalization vector length used by selected crypto algorythm\nconst uint8_t TAG_LENGTH = 16; ///< @brief Authentication tag length. For Poly1305 it is always 16\nconst uint8_t AAD_LENGTH = 8; ///< @brief Number of bytes from last part of key that will be used for additional authenticated data\n#define CYPHER_TYPE ChaChaPoly\n\n//Web API\nconst int WEB_API_PORT = 80; ///< @brief TCP port where Web API will listen through\n\n//File system\n#if defined ESP32\n#define FILESYSTEM SPIFFS\n#include <SPIFFS.h>\n#elif defined ESP8266\n    #ifndef USE_LITTLE_FS\n    #define USE_LITTLE_FS 1 ///< Set to 0 to use SPIFFS or 1 to use LittleFS (recommended)\n    #endif // USE_LITTLE_FS\n#if USE_LITTLE_FS\n#include <FS.h>\n#include <LittleFS.h>\n#define FILESYSTEM LittleFS\n#else\n#define FILESYSTEM SPIFFS\n#endif // USE_LITTLE_FS\n#endif\n\n#endif\n"
  },
  {
    "path": "src/Filter.cpp",
    "content": "/**\n  * @file Filter.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Filter to process message rate or other values\n  */\n\n#include \"Filter.h\"\n#include \"EnigmaIOTdebug.h\"\n\nfloat FilterClass::addValue (float value) {\n\tswitch (_filterType) {\n\tcase AVERAGE_FILTER:\n\t\treturn aveFilter (value);\n\t\tbreak;\n\tcase MEDIAN_FILTER:\n\t\treturn medianFilter (value);\n\t\tbreak;\n\tdefault:\n\t\treturn value;\n\t}\n}\n\nfloat FilterClass::addWeigth (float coeff) {\n\tfloat sumWeight = 0;\n\n\tfor (int i = _order - 1; i > 0; i--) {\n\t\t_weightValues[i] = _weightValues[i - 1];\n\t}\n\t_weightValues[0] = coeff;\n\n\tfor (int i = 0; i < _order; i++) {\n\t\tsumWeight += _weightValues[i];\n\t}\n\n\t//DEBUG_VERBOSE (\"SumWeight: %f\", sumWeight);\n\n\treturn sumWeight;\n}\n\n\nfloat FilterClass::aveFilter (float value) {\n\tfloat sumValue = 0;\n\tfloat sumWeight = 0;\n\tfloat procValue;\n\tint left, right;\n\n\tfor (int i = 0; i < _order - 1; i++) {\n\t\t_rawValues[i] = _rawValues[i + 1];\n\t}\n\t_rawValues[_order - 1] = value;\n\n\tDEBUG_VERBOSE (\"Value: %f\\n\", value);\n\n\tDEBUG_VERBOSE (\"Raw values:\");\n\tfor (int i = 0; i < _order; i++) {\n\t\tDEBUG_VERBOSE (\" %f\", _rawValues[i]);\n\t}\n\n\tDEBUG_VERBOSE (\"Coeffs:\");\n\tfor (int i = 0; i < _order; i++) {\n\t\tDEBUG_VERBOSE (\" %f\", _weightValues[i]);\n\t}\n\n\tif (_index < _order) {\n\t\t_index++;\n\t\tleft = _order - _index;\n\t\tright = _order - 1;\n\t} \telse {\n\t\tleft = 0;\n\t\tright = _order - 1;\n\t}\n\tDEBUG_VERBOSE (\"Index: %d , left: %d , right: %d\\n\", _index, left, right);\n\n\tfor (int i = left; i <= right; i++) {\n\t\tsumValue += _rawValues[i] * _weightValues[i];\n\t\tsumWeight += _weightValues[i];\n\t\t//DBG_OUTPUT_PORT.printf(\"Raw value %d: %f\\n\", (i + 1), _rawValues[_order - (i+1)]);\n\t}\n\tDEBUG_VERBOSE (\"Sum: %f\", sumValue);\n\tDEBUG_VERBOSE (\" SumWeight: %f\\n\", sumWeight);\n\n\tprocValue = sumValue / sumWeight;\n\n\tDEBUG_VERBOSE (\"Average: %f\\n\", procValue);\n\n\treturn procValue;\n}\n\nint FilterClass::divide (float* array, int start, int end) {\n\tint left;\n\tint right;\n\tfloat pivot;\n\tfloat temp;\n\n\tpivot = array[start];\n\tleft = start;\n\tright = end;\n\n\t// While indexes do not cross\n\twhile (left < right) {\n\t\twhile (array[right] > pivot) {\n\t\t\tright--;\n\t\t}\n\n\t\twhile ((left < right) && (array[left] <= pivot)) {\n\t\t\tleft++;\n\t\t}\n\n\t\t// If indexes have not crossed yet we continue doing exchanges\n\t\tif (left < right) {\n\t\t\ttemp = array[left];\n\t\t\tarray[left] = array[right];\n\t\t\tarray[right] = temp;\n\t\t}\n\t}\n\n\t// Indexes have crossed. We put the pivot on place\n\ttemp = array[right];\n\tarray[right] = array[start];\n\tarray[start] = temp;\n\n\t// NEw pivot position\n\treturn right;\n}\n\nvoid FilterClass::clear () {\n\tfor (int i = 0; i < _order; i++) {\n\t\t_rawValues[i] = 0;\n\t\t_orderedValues[i] = 0;\n\t\t//_weightValues[i] = 1;\n\t}\n\t_index = 0;\n}\n\nFilterClass::~FilterClass () {\n\tfree (_rawValues);\n\tfree (_orderedValues);\n\tfree (_weightValues);\n}\n\nvoid FilterClass::quicksort (float* array, int start, int end) {\n\tfloat pivot;\n\n\tif (start < end) {\n\t\tpivot = divide (array, start, end);\n\n\t\t// Ordeno la lista de los menores\n\t\tquicksort (array, start, pivot - 1);\n\n\t\t// Ordeno la lista de los mayores\n\t\tquicksort (array, pivot + 1, end);\n\t}\n}\n\nfloat FilterClass::medianFilter (float value) {\n\tfloat procValue;\n\tint medianIdx;\n\tint left, right, tempidx;\n\tbool even;\n\n\tif (_index < _order) {\n\t\t_index++;\n\t\tleft = _order - _index;\n\t\tright = _order - 1;\n\t\teven = ((right - left) % 2) == 1;\n\t\tDEBUG_VERBOSE (\"%d: \", (right - left) % 2);\n\t\tif (even) {\n\t\t\ttempidx = (right - left - 1) / 2;\n\t\t\tDEBUG_VERBOSE (\"even\\n\");\n\t\t} \t\telse {\n\t\t\ttempidx = (right - left) / 2;\n\t\t\tDEBUG_VERBOSE (\"odd\\n\");\n\t\t}\n\t\tmedianIdx = right - _index + 1 + tempidx;\n\t} \telse {\n\t\tleft = 0;\n\t\tright = _order - 1;\n\t\teven = (_order % 2) == 0;\n\t\tif (even)\n\t\t\ttempidx = (right - 1) / 2;\n\t\telse\n\t\t\ttempidx = right / 2;\n\t\tmedianIdx = right - _index + 1 + tempidx;\n\t}\n\tDEBUG_VERBOSE (\"Index: %d , left: %d , right: %d , even: %s , tempidx: %d , medianidx: %d\\n\", _index, left, right, (even ? \"even\" : \"odd\"), tempidx, medianIdx);\n\n\t// Shift raw values\n\tfor (int i = 0; i < _order - 1; i++) {\n\t\t_rawValues[i] = _rawValues[i + 1];\n\t}\n\t// Add new raw value\n\t_rawValues[_order - 1] = value;\n\n\tDEBUG_VERBOSE (\"Raw values:\");\n\tfor (int i = 0; i < _order; i++) {\n\t\tDEBUG_VERBOSE (\" %f\", _rawValues[i]);\n\t}\n\n\t// copy to array before ordering\n\tfor (int i = 0; i < _order; i++) {\n\t\t_orderedValues[i] = _rawValues[i];\n\t}\n\n\t// order values\n\tquicksort (_orderedValues, left, right);\n\n\tDEBUG_VERBOSE (\"Ordered values:\");\n\tfor (int i = 0; i < _order; i++) {\n\t\tDEBUG_VERBOSE (\" %f\", _orderedValues[i]);\n\t}\n\n\t// select median value\n\tif (!even) {\n\t\tprocValue = _orderedValues[medianIdx];\n\t} \telse { // there is no center value\n\t\tprocValue = (_orderedValues[medianIdx] + _orderedValues[medianIdx + 1]) / 2.0F;\n\t}\n\n\tDEBUG_VERBOSE (\"Median: %f\\n\", procValue);\n\treturn procValue; // return mid value\n}\n\nFilterClass::FilterClass (FilterType_t type, uint8_t order) {\n\t_filterType = type;\n\n\tif (order < MAX_ORDER)\n\t\tif (order > 1)\n\t\t\t_order = order;\n\t\telse\n\t\t\t_order = MIN_ORDER;\n\telse\n\t\t_order = MAX_ORDER;\n\n\t_rawValues = (float*)malloc (_order * sizeof (float));\n\tfor (int i = 0; i < _order; i++) {\n\t\t_rawValues[i] = 0;\n\t}\n\n\t_orderedValues = (float*)malloc (_order * sizeof (float));\n\tfor (int i = 0; i < _order; i++) {\n\t\t_orderedValues[i] = 0;\n\t}\n\n\t_weightValues = (float*)malloc (_order * sizeof (float));\n\tfor (int i = 0; i < _order; i++) {\n\t\t_weightValues[i] = 1;\n\t}\n\n}\n\n"
  },
  {
    "path": "src/Filter.h",
    "content": "/**\n  * @file Filter.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Filter to process message rate or other values\n  */\n\n#ifndef _FILTER_h\n#define _FILTER_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n#define MAX_ORDER 20\n#define MIN_ORDER 2\n\n/**\n  * @brief Type of filter\n  */\ntypedef enum {\n\tMEDIAN_FILTER, /**< Median filter */\n\tAVERAGE_FILTER /**< Average filter */\n} FilterType_t;\n\nclass FilterClass {\nprotected:\n\tFilterType_t _filterType; ///< @brief Filter type from FilterType_t\n\tuint8_t _order; ///< @brief Filter order. Numbre of samples to store for calculations\n\tfloat* _rawValues; ///< @brief Raw values store\n\tfloat* _orderedValues; ///< @brief Values ordered for median calculation\n\tfloat* _weightValues; ///< @brief Weight values for average calculation. By default all them have value of 1 for arithmetic average\n\tuint _index = 0;///< @brief Used to point latest entered value while number of values less than order\n\n\t/**\n\t * @brief Average filter calculation of next value\n\t * @param value Next value to do calculation with\n\t * @return Returns calculated average (weighted or unweighted)\n\t */\n\tfloat aveFilter (float value);\n\n\t/**\n\t * @brief Divide function to be used on Quick Sort\n\t * @param array Input array\n\t * @param start Start index\n\t * @param end End index\n\t * @return Returns new pivot position\n\t */\n\tint divide (float* array, int start, int end);\n\n\t/**\n\t * @brief Sorting function that uses QuickSort algorythm\n\t * @param array Input array\n\t * @param start Start index\n\t * @param end End index\n\t */\n\tvoid quicksort (float* array, int start, int end);\n\n\t/**\n\t * @brief Median filter calculation of next value\n\t * @param value Next value to do calculation with\n\t * @return Returns calculated median\n\t */\n\tfloat medianFilter (float value);\n\npublic:\n\t/**\n\t * @brief Creates a new filter class\n\t * @param type Filter type from FilterType_t\n\t * @param order Filter order\n\t */\n\tFilterClass (FilterType_t type, uint8_t order);\n\n\t/**\n\t * @brief Adds a new weighting value. It is pushed on the array so latest value will be used for older data\n\t * @param coeff Next weighting coefficient\n\t * @return Sum of all weighting values\n\t */\n\tfloat addWeigth (float coeff);\n\n\t/**\n\t * @brief Pushes a new value for calculation. Until the buffer is filled up to filter order, only first valid values are used in calculation\n\t * @param value Next value\n\t * @return Weighted average value\n\t */\n\tfloat addValue (float value);\n\n\t/**\n\t * @brief Resets state of the filter to an initial value\n\t */\n\tvoid clear ();\n\n\t/**\n\t * @brief Frees up dynamic memory\n\t */\n\t~FilterClass ();\n};\n\n#endif\n\n"
  },
  {
    "path": "src/GatewayAPI.cpp",
    "content": "/**\n  * @file GatewayAPI.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief API web server to control EnigmaIOT Gateway\n  */\n\n#include \"GatewayAPI.h\"\n#include <functional>\n\nusing namespace std;\nusing namespace placeholders;\n\nconst char* getNodeNumberUri = \"/api/gw/nodenumber\";\nconst char* getMaxNodesUri = \"/api/gw/maxnodes\";\nconst char* getNodesUri = \"/api/gw/nodes\";\nconst char* getNodeUri = \"/api/node/node\";\nconst char* getGwInfoUri = \"/api/gw/info\";\nconst char* getGwRestartUri = \"/api/gw/restart\";\nconst char* getGwResettUri = \"/api/gw/reset\";\nconst char* getNodeRestartUri = \"/api/node/restart\";\nconst char* nodeIdParam = \"nodeid\";\nconst char* nodeNameParam = \"nodename\";\nconst char* nodeAddrParam = \"nodeaddr\";\nconst char* confirmParam = \"confirm\";\n\nvoid GatewayAPI::begin () {\n\t//if (!gw) {\n\t//\treturn;\n\t//}\n\t//gateway = gw;\n\tserver = new AsyncWebServer (WEB_API_PORT);\n\tserver->on (getNodeNumberUri, HTTP_GET, std::bind (&GatewayAPI::getNodeNumber, this, _1));\n\tserver->on (getMaxNodesUri, HTTP_GET, std::bind (&GatewayAPI::getMaxNodes, this, _1));\n\tserver->on (getNodesUri, HTTP_GET, std::bind (&GatewayAPI::getNodes, this, _1));\n\tserver->on (getNodeUri, HTTP_GET | HTTP_DELETE, std::bind (&GatewayAPI::nodeOp, this, _1));\n\tserver->on (getGwInfoUri, HTTP_GET, std::bind (&GatewayAPI::getGwInfo, this, _1));\n\tserver->on (getGwRestartUri, HTTP_PUT, std::bind (&GatewayAPI::restartGw, this, _1));\n    server->on (getGwResettUri, HTTP_PUT, std::bind (&GatewayAPI::resetGw, this, _1));\n\tserver->on (getNodeRestartUri, HTTP_PUT, std::bind (&GatewayAPI::restartNode, this, _1));\n\tserver->onNotFound (std::bind (&GatewayAPI::onNotFound, this, _1));\n\tserver->begin ();\n}\n\nvoid GatewayAPI::getNodeNumber (AsyncWebServerRequest* request) {\n\tchar response[25];\n\n\tsnprintf (response, 25, \"{\\\"nodeNumber\\\":%d}\", EnigmaIOTGateway.getActiveNodesNumber ());\n\tDEBUG_INFO (\"Response: %s\", response);\n\trequest->send (200, \"application/json\", response);\n}\n\nchar* GatewayAPI::buildGwInfo (char* gwInfo, size_t len) {\n\tDEBUG_INFO (\"Build Gateway Info\");\n\t//resultCode = 200;\n\t//time_t currentMillis = millis ();\n    snprintf (gwInfo, len, \"{\\\"version\\\":\\\"%d.%d.%d\\\",\\\"network\\\":\\\"%s\\\",\\\"addresses\\\":{\\\"AP\\\":\\\"%s\\\",\\\"STA\\\":\\\"%s\\\"},\"\n              \"\\\"channel\\\":%d,\\\"ap\\\":\\\"%s\\\",\\\"bssid\\\":\\\"%s\\\",\\\"rssi\\\":%d,\"\n#ifdef ESP32\n              \"\\\"txpower\\\":%.1f,\"\n#endif\n              \"\\\"dns\\\":\\\"%s\\\",\\\"mem\\\":%d}\",\n              ENIGMAIOT_PROT_VERS[0], ENIGMAIOT_PROT_VERS[1], ENIGMAIOT_PROT_VERS[2],\n              EnigmaIOTGateway.getNetworkName (),\n              WiFi.macAddress ().c_str (), WiFi.softAPmacAddress ().c_str (),\n              WiFi.channel (), WiFi.SSID ().c_str (), WiFi.BSSIDstr ().c_str (), WiFi.RSSI (),\n#ifdef ESP32\n              (float)(WiFi.getTxPower ()) / 4,\n#endif\n              WiFi.dnsIP ().toString ().c_str (),\n              ESP.getFreeHeap ()\n\t);\n\tDEBUG_DBG (\"GwInfo: %s\", gwInfo);\n\treturn gwInfo;\n}\n\nvoid GatewayAPI::getGwInfo (AsyncWebServerRequest* request) {\n\tint resultCode = 404;\n\tchar response[RESPONSE_SIZE];\n\tconst char* strTemp = buildGwInfo (response, RESPONSE_SIZE);\n\tif (strTemp) {\n\t\tresultCode = 200;\n\t}\n\tif (resultCode == 404) {\n        snprintf (response, RESPONSE_SIZE, \"{\\\"result\\\":\\\"not found\\\"}\");\n\t}\n\tDEBUG_DBG (\"Response: %d --> %s\", resultCode, response);\n\trequest->send (resultCode, \"application/json\", response);\n}\n\nNode* GatewayAPI::getNodeFromParam (AsyncWebServerRequest* request) {\n\tNode* node = NULL;\n\tint params = request->params ();\n\tint nodeIndex = -1;\n\n\tfor (int i = 0; i < params; i++) {\n\t\tAsyncWebParameter* p = request->getParam (i);\n\t\tif (p->name () == nodeIdParam) {\n\t\t\tif (isNumber (p->value ())) {\n\t\t\t\tnodeIndex = atoi (p->value ().c_str ());\n\t\t\t\tDEBUG_INFO (\"Node to process is %d\", nodeIndex);\n\t\t\t\tnode = EnigmaIOTGateway.nodelist.getNodeFromID (nodeIndex);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (p->name () == nodeNameParam) {\n\t\t\tif (strcmp (p->value ().c_str (), BROADCAST_NONE_NAME)) {\n\t\t\t\tnode = EnigmaIOTGateway.nodelist.getNodeFromName (p->value ().c_str ());\n\t\t\t\tDEBUG_INFO (\"Node to process is %s\", node ? node->getNodeName () : \"NULL\");\n\t\t\t} else {\n\t\t\t\tDEBUG_INFO (\"Wrong node name %s\", p->value ().c_str ());\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tif (p->name () == nodeAddrParam) {\n\t\t\tuint8_t addr[ENIGMAIOT_ADDR_LEN];\n\t\t\tuint8_t* addrResult = str2mac (p->value ().c_str (), addr);\n\t\t\tif (addrResult) {\n\t\t\t\tif (memcmp (addr, BROADCAST_ADDRESS, ENIGMAIOT_ADDR_LEN)) {\n\t\t\t\t\tnode = EnigmaIOTGateway.nodelist.getNodeFromMAC (addr);\n\t\t\t\t\tDEBUG_INFO (\"Node to process is %s\", p ? p->value ().c_str () : \"NULL\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tDEBUG_DBG (\"Parameter %s = %s\", p->name ().c_str (), p ? p->value ().c_str () : \"NULL\");\n\t}\n\n\tDEBUG_DBG (\"NodeId = %d, node: %p\", nodeIndex, node);\n\n\tif (node) {\n\t\tif (node->isRegistered ()) {\n\t\t\treturn node;\n\t\t}\n\t}\n\treturn node;\n}\n\nconst char* GatewayAPI::deleteNode (Node* node, int& resultCode) {\n\tif (node) {\n\t\tDEBUG_DBG (\"Node %d is %p\", node->getNodeId (), node);\n\t\tif (node->isRegistered ()) {\n\t\t\tDEBUG_INFO (\"Node %d is registered\", node->getNodeId ());\n\t\t\tresultCode = 200;\n\t\t\tEnigmaIOTGateway.invalidateKey (node, KICKED);\n            return \"{\\\"result\\\":\\\"ok\\\"}\";\n\t\t} else {\n\t\t\tDEBUG_INFO (\"Node %d is not registered\", node->getNodeId ());\n\t\t}\n\t}\n\treturn NULL;\n}\n\nchar* GatewayAPI::getNodeInfo (Node* node, int& resultCode, char* nodeInfo, size_t len) {\n\tif (node) {\n\t\tDEBUG_DBG (\"Node %d is %p\", node->getNodeId (), node);\n\t\tif (node->isRegistered ()) {\n\t\t\tDEBUG_INFO (\"Node %d is registered\", node->getNodeId ());\n\t\t\tresultCode = 200;\n\t\t\ttime_t currentMillis = millis ();\n            time_t keyValidFrom = currentMillis - node->getKeyValidFrom ();\n            time_t lastMessageTime = currentMillis - node->getLastMessageTime ();\n            uint8_t* version = node->getVersion ();\n            uint16_t nodeid = node->getNodeId ();\n            uint8_t *macaddr = node->getMacAddress ();\n            signed int rssi = node->getRSSI ();\n            size_t index;\n            \n            index = snprintf (nodeInfo, len,\n                              \"{\\\"version\\\":\\\"%d.%d.%d\\\",\",\n\t\t\t\t\t  version[0], version[1], version[2]\n            );\n            index = index + snprintf (nodeInfo + index, len - index,\n                                      \"\\\"node_id\\\":%d,\",\n                                      nodeid);\n            index = index + snprintf (nodeInfo + index, len - index,\n                                      \"\\\"address\\\":\\\"\" MACSTR \"\\\",\",\n                                      MAC2STR (macaddr));\n            index = index + snprintf (nodeInfo + index, len - index,\n                                      \"\\\"keyValidSince\\\":%lld,\",\n                                      (long long int) keyValidFrom);\n            index = index + snprintf (nodeInfo + index, len - index,\n                                      \"\\\"lastMessageTime\\\":%lld,\",\n                                      (long long int) lastMessageTime);\n            index = index + snprintf (nodeInfo + index, len - index,\n                                      \"\\\"sleepy\\\":%s,\",\n                                      node->getSleepy () ? \"True\" : \"False\");\n            index = index + snprintf (nodeInfo + index, len - index,\n                                      \"\\\"Broadcast\\\":%s,\",\n                                      node->broadcastIsEnabled () ? \"True\" : \"False\");\n            index = index + snprintf (nodeInfo + index, len - index,\n                                      \"\\\"TimeSync\\\":%s,\",\n                                      node->useTimeSync () ? \"True\" : \"False\");\n            index = index + snprintf (nodeInfo + index, len - index,\n                                      \"\\\"rssi\\\":%d,\",\n                                      rssi);\n            index = index + snprintf (nodeInfo + index, len - index,\n                                      \"\\\"packetsHour\\\":%f,\",\n                                      node->packetsHour);\n            index = index + snprintf (nodeInfo + index, len - index,\n                                      \"\\\"per\\\":%f\",\n                                      node->per);\n            char* nodeName = node->getNodeName ();\n            if (nodeName && strlen (nodeName)) {\n                index = index + snprintf (nodeInfo + index, len - index, \",\\\"Name\\\":\\\"%s\\\"\", nodeName);\n            }\n            snprintf (nodeInfo + index, len - index, \"}\");\n            DEBUG_DBG (\"NodeInfo: %s\", nodeInfo);\n\t\t\treturn nodeInfo;\n\t\t} else {\n\t\t\tDEBUG_INFO (\"Node %d is not registered\", node->getNodeId ());\n\t\t}\n\t}\n\treturn NULL;\n}\n\nbool GatewayAPI::restartNodeRequest (Node* node) {\n\treturn EnigmaIOTGateway.sendDownstream (node->getMacAddress (), NULL, 0, RESTART_NODE);\n}\n\nvoid GatewayAPI::restartNode (AsyncWebServerRequest* request) {\n\tNode* node;\n\tint resultCode = 404;\n\tchar response[RESPONSE_SIZE];\n\n\tnode = getNodeFromParam (request);\n\n\tDEBUG_WARN (\"Send restart command to node %p\", node);\n\n\tbool result = restartNodeRequest (node);\n\tif (result) {\n\t\tsnprintf (response, 30, \"{\\\"node_restart\\\":\\\"processed\\\"}\");\n\t\tresultCode = 200;\n\t}\n\tif (resultCode == 404) {\n\t\tsnprintf (response, 25, \"{\\\"result\\\":\\\"not found\\\"}\");\n\t}\n\tDEBUG_WARN (\"Response: %d --> %s\", resultCode, response);\n\trequest->send (resultCode, \"application/json\", response);\n}\n\nvoid GatewayAPI::nodeOp (AsyncWebServerRequest* request) {\n\tNode* node;\n\tint resultCode = 404;\n\tchar response[RESPONSE_SIZE];\n\n\tnode = getNodeFromParam (request);\n\n\tWebRequestMethodComposite method = request->method ();\n\tDEBUG_INFO (\"Method: %s\", methodToString (request->method ()).c_str ());\n\n\tif (method == HTTP_DELETE) {\n\t\tDEBUG_INFO (\"Delete node %p\", node);\n\t\tconst char* strTemp = deleteNode (node, resultCode);\n\t\tif (strTemp) {\n\t\t\tstrncpy (response, strTemp, RESPONSE_SIZE);\n\t\t}\n\t} else if (method == HTTP_GET) {\n\t\tDEBUG_INFO (\"Info node %p\", node);\n\t\tconst char* strTemp = getNodeInfo (node, resultCode, response, RESPONSE_SIZE);\n\t\tDEBUG_DBG (\"strTemp = %p\", strTemp);\n\t\tif (!strTemp) {\n\t\t\t//strncpy (response, strTemp, 200);\n\t\t\tresultCode = 404;\n\t\t}\n\t}\n\tif (resultCode == 404) {\n\t\tsnprintf (response, 25, \"{\\\"result\\\":\\\"not found\\\"}\");\n\t}\n\tDEBUG_DBG (\"Response: %d --> %s\", resultCode, response);\n\trequest->send (resultCode, \"application/json\", response);\n}\n\nvoid GatewayAPI::getMaxNodes (AsyncWebServerRequest* request) {\n\tchar response[25];\n\n\tsnprintf (response, 25, \"{\\\"maxNodes\\\":%d}\", NUM_NODES);\n\tDEBUG_INFO (\"Response: %s\", response);\n\trequest->send (200, \"application/json\", response);\n}\n\nvoid GatewayAPI::restartGw (AsyncWebServerRequest* request) {\n\tchar response[30];\n\tbool confirm = false;\n\tint resultCode = 404;\n\n\tint params = request->params ();\n\n\tfor (int i = 0; i < params; i++) {\n\t\tAsyncWebParameter* p = request->getParam (i);\n\t\tif (p->name () == confirmParam) {\n\t\t\tif (p->value () == \"1\") {\n\t\t\t\tconfirm = true;\n\t\t\t\tresultCode = 200;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (confirm) {\n\t\tsnprintf (response, 30, \"{\\\"gw_restart\\\":\\\"processed\\\"}\");\n\t\trequest->send (resultCode, \"application/json\", response);\n\t} else {\n\t\tsnprintf (response, 25, \"{\\\"gw_restart\\\":\\\"fail\\\"}\");\n\t\trequest->send (resultCode, \"application/json\", response);\n\t}\n\n\tDEBUG_INFO (\"Response: %s\", response);\n\n\tif (confirm && EnigmaIOTGateway.notifyRestartRequested) {\n\t\tEnigmaIOTGateway.notifyRestartRequested ();\n\t}\n}\n\nvoid GatewayAPI::resetGw (AsyncWebServerRequest* request) {\n    char response[30];\n    bool confirm = false;\n    int resultCode = 404;\n\n    int params = request->params ();\n\n    for (int i = 0; i < params; i++) {\n        AsyncWebParameter* p = request->getParam (i);\n        if (p->name () == confirmParam) {\n            if (p->value () == \"1\") {\n                confirm = true;\n                resultCode = 200;\n                break;\n            }\n        }\n    }\n\n    if (confirm) {\n        snprintf (response, 30, \"{\\\"gw_reset\\\":\\\"processed\\\"}\");\n        request->send (resultCode, \"application/json\", response);\n    } else {\n        snprintf (response, 25, \"{\\\"gw_reset\\\":\\\"fail\\\"}\");\n        request->send (resultCode, \"application/json\", response);\n    }\n\n    DEBUG_INFO (\"Response: %s\", response);\n    \n    EnigmaIOTGateway.doResetConfig ();\n\n}\n\n\nvoid GatewayAPI::getNodes (AsyncWebServerRequest* request) {\n\tNode* node = NULL;\n\n\tAsyncResponseStream* response = request->beginResponseStream (\"application/json\");\n\tresponse->setCode (200);\n\n\tresponse->print (\"{\\\"nodes\\\":[\");\n\tdo {\n\t\tbool first = (node == NULL);\n\t\tnode = EnigmaIOTGateway.nodelist.getNextActiveNode (node);\n\t\tif (node && !first) {\n\t\t\tDEBUG_DBG (\"First is %s, node is %p\", first ? \"true\" : \"false\", node);\n\t\t\tresponse->print (',');\n\t\t}\n\t\tif (node) {\n\t\t\tDEBUG_DBG (\"LastNode: %u, node: %p\", node->getNodeId (), node);\n\t\t}\n\t\tif (node) {\n\t\t\tDEBUG_DBG (\"Got node. NodeId -> %u\", node->getNodeId ());\n\t\t\tresponse->printf (\"{\\\"nodeId\\\":%u,\\\"address\\\":\\\"\" MACSTR \"\\\"\",\n\t\t\t\t\t\t\t  node->getNodeId (),\n                              MAC2STR (node->getMacAddress ()));\n            char* nodeName = node->getNodeName ();\n            if (nodeName && strlen (nodeName)) {\n                response->printf (\", \\\"name\\\":\\\"%s\\\"\", node->getNodeName ());            \n            }\n            response->print (\"}\");\n        }\n\t} while (node != NULL);\n\tresponse->print (\"]}\");\n\trequest->send (response);\n}\n\nString methodToString (WebRequestMethodComposite method) {\n\tswitch (method) {\n\tcase HTTP_GET:\n\t\treturn String (\"GET\");\n\tcase HTTP_POST:\n\t\treturn String (\"POST\");\n\tcase HTTP_DELETE:\n\t\treturn String (\"DELETE\");\n\tcase HTTP_PUT:\n\t\treturn String (\"PUT\");\n\tcase HTTP_PATCH:\n\t\treturn String (\"PATCH\");\n\tcase HTTP_HEAD:\n\t\treturn String (\"HEAD\");\n\tcase HTTP_OPTIONS:\n\t\treturn String (\"OPTIONS\");\n\t}\n\treturn \"\";\n}\n\nvoid GatewayAPI::onNotFound (AsyncWebServerRequest* request) {\n\tDEBUG_WARN (\"404 Not found: %s\", request->url ().c_str ());\n\tDEBUG_WARN (\"Method: %s\", methodToString (request->method ()).c_str ());\n\tint params = request->params ();\n\tfor (int i = 0; i < params; i++) {\n#if DEBUG_LEVEL >= INFO\n\t\tAsyncWebParameter* p = request->getParam (i);\n\t\tDEBUG_INFO (\"Parameter %s = %s\", p->name ().c_str (), p->value ().c_str ());\n#endif\n\t}\n\trequest->send (404, \"text/plain\", \"Not Found\");\n}\n\nGatewayAPI GwAPI;"
  },
  {
    "path": "src/GatewayAPI.h",
    "content": "/**\n  * @file GatewayAPI.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief API web server to control EnigmaIOT Gateway\n  */\n\n#ifndef GATEWAY_API_h\n#define GATEWAY_API_h\n\n#include <EnigmaIOTGateway.h>\n#include <ESPAsyncWebServer.h>\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\nconst size_t RESPONSE_SIZE = 350;  ///< @brief Maximum API response size\n\nString methodToString (WebRequestMethodComposite method);\n\nclass GatewayAPI {\nprotected:\n\tAsyncWebServer* server; ///< @brief Web server instance\n\t//EnigmaIOTGatewayClass* gateway;\n\n    /**\n     * @brief Processes node number request\n     * @param request Node number request\n     */\n\tvoid getNodeNumber (AsyncWebServerRequest* request);\n    \n    /**\n     * @brief Processes max node number request\n     * @param request Max node number request\n     */\n\tvoid getMaxNodes (AsyncWebServerRequest* request);\n    \n    /**\n     * @brief Processes node list request\n     * @param request Node list request\n     */\n\tvoid getNodes (AsyncWebServerRequest* request);\n    \n    /**\n     * @brief Processes node information request\n     * @param request Node information request\n     */\n\tvoid nodeOp (AsyncWebServerRequest* request);\n    \n    /**\n     * @brief Processes gateway information request\n     * @param request Gateway information request\n     */\n\tvoid getGwInfo (AsyncWebServerRequest* request);\n    \n    /**\n     * @brief Processes gateway restart request\n     * @param request Gateway restart request\n     */\n\tvoid restartGw (AsyncWebServerRequest* request);\n    \n    /**\n     * @brief Processes gateway configuration reset request\n     * @param request Gateway configuration reset request\n     */\n    void resetGw (AsyncWebServerRequest* request);\n\n    \n    /**\n     * @brief Processes node information request\n     * @param request Node information request\n     */\n\tvoid restartNode (AsyncWebServerRequest* request);\n\t// TODO: Reset node\n\t// TODO: Reset Gw\n\n    /**\n     * @brief Processes unknown entry points or methods\n     * @param request Request\n     */\n\tvoid onNotFound (AsyncWebServerRequest* request);\n\n    /**\n     * @brief Gets node reference from request parameters\n     * @param request Request with node parameter (NodeID, Name or MAC address)\n     */\n\tNode* getNodeFromParam (AsyncWebServerRequest* request);\n\n    /**\n     * @brief Processes node deletion request\n     * @param node Node to delete\n     * @param resultCode Result code\n     */\n\tconst char* deleteNode (Node* node, int& resultCode);\n    \n    /**\n     * @brief Builds node info\n     * @param node Node to get info from\n     * @param resultCode Result code\n     * @param nodeInfo Node information JSON element\n     * @param len JSON length\n     */\n\tchar* getNodeInfo (Node* node, int& resultCode, char* nodeInfo, size_t len);\n    \n    /**\n     * @brief Builds gateway info\n     * @param gwInfo Gateway information JSON\n     * @param len JSON length\n     */\n\tchar* buildGwInfo (char* gwInfo, size_t len);\n     \n    /**\n     * @brief Sends restart node message\n     * @param node Node te send restart to\n     */    \n\tbool restartNodeRequest (Node* node);\n\npublic:\n    \n    /**\n     * @brief Starts REST API web server\n     */\n\tvoid begin ();\n};\n\nextern GatewayAPI GwAPI; ///< @brief API instance\n\n#endif // GATEWAY_API_h"
  },
  {
    "path": "src/GwOutput_generic.h",
    "content": "/**\n  * @file GwOutput_generic.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Generic Gateway output module template\n  *\n  * This is the interface that output module should implement to be used as Gateway Output\n  */\n\n#ifndef _GWOUT_GEN_h\n#define _GWOUT_GEN_h\n\n#include <EnigmaIOTGateway.h>\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\ntypedef enum GwOutput_data_type {\n\tdata,\n\tlostmessages,\n\tstatus\n} GwOutput_data_type_t;\n\n#include <functional>\ntypedef std::function<void (uint8_t* address, char* nodeName, control_message_type_t msgType, char* data, unsigned int len)> onDlData_t;\n\nclass GatewayOutput_generic {\nprotected:\n\tEnigmaIOTGatewayClass* enigmaIotGateway; ///< @brief Pointer to EnigmaIOT gateway instance\n\tonDlData_t downlinkCb; ///< @brief downlink processing function handle\n\n\t/**\n\t  * @brief Saves output module configuration\n\t  * @return Returns `true` if save was successful. `false` otherwise\n\t  */\n\tvirtual bool saveConfig () = 0;\n\npublic:\n\tString netName; ///< @brief EnigmaIOT network name\n\tString clientId; ///< @brief MQTT clientId\n\tString gwTopic; ///< @brief MQTT topic for gateway\n\n\t//virtual int send () = 0;\n\t//virtual void onReveive () = 0;\n\n\t/**\n\t  * @brief Called when wifi manager starts config portal\n\t  * @param enigmaIotGw Pointer to EnigmaIOT gateway instance\n\t  */\n\tvirtual void configManagerStart (EnigmaIOTGatewayClass* enigmaIotGw) = 0;\n\n\t/**\n\t  * @brief Called when wifi manager exits config portal\n\t  * @param status `true` if configuration was successful\n\t  */\n\tvirtual void configManagerExit (bool status) = 0;\n\n\t/**\n\t  * @brief Starts output module\n\t  * @return Returns `true` if successful. `false` otherwise\n\t  */\n\tvirtual bool begin () = 0;\n\n\t/**\n\t  * @brief Loads output module configuration\n\t  * @return Returns `true` if load was successful. `false` otherwise\n\t  */\n\tvirtual bool loadConfig () = 0;\n\n\t /**\n\t  * @brief Send control data from nodes\n\t  * @param address Node Address\n\t  * @param data Message data buffer\n\t  * @param length Data buffer length\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tvirtual bool outputControlSend (char* address, uint8_t* data, size_t length) = 0;\n\n\t /**\n\t  * @brief Send new node notification\n\t  * @param address Node Address\n\t  * @param node_id Node Id\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tvirtual bool newNodeSend (char* address, uint16_t node_id) = 0;\n\n\t /**\n\t  * @brief Send node disconnection notification\n\t  * @param address Node Address\n\t  * @param reason Disconnection reason code\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tvirtual bool nodeDisconnectedSend (char* address, gwInvalidateReason_t reason) = 0;\n\n\t /**\n\t  * @brief Send data from nodes\n\t  * @param address Node Address\n\t  * @param data Message data buffer\n\t  * @param length Data buffer length\n\t  * @param type Type of message\n\t  * @return Returns `true` if sending was successful. `false` otherwise\n\t  */\n\tvirtual bool outputDataSend (char* address, char* data, size_t length, GwOutput_data_type_t type = data) = 0;\n\n\t /**\n\t  * @brief Should be called often for module management\n\t  */\n\tvirtual void loop () = 0;\n\n\t /**\n\t  * @brief Set data processing function\n\t  * @param cb Function handle\n\t  */\n\tvoid setDlCallback (onDlData_t cb) {\n\t\tdownlinkCb = cb;\n\t}\n};\n\n#endif // _GWOUT_GEN_h"
  },
  {
    "path": "src/NodeList.cpp",
    "content": "/**\n  * @file NodeList.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief EnigmaIoT sensor node management structures\n  */\n#include \"NodeList.h\"\n#include \"helperFunctions.h\"\n\nvoid Node::setEncryptionKey (const uint8_t* key) {\n\tif (key) {\n\t\tmemcpy (this->key, key, KEY_LENGTH);\n\t}\n}\n\nnode_t Node::getNodeData () {\n\tnode_t thisNode;\n\n\tmemcpy (thisNode.key, key, KEY_LENGTH);\n\tthisNode.keyValid = keyValid;\n\tthisNode.keyValidFrom = keyValidFrom;\n\tmemcpy (thisNode.mac, mac, 6);\n\tthisNode.nodeId = nodeId;\n\tthisNode.lastMessageCounter = lastMessageCounter;\n\tthisNode.status = status;\n\tmemcpy (thisNode.nodeName, getNodeName (), NODE_NAME_LENGTH);\n\n\treturn thisNode;\n}\n\nvoid Node::printToSerial (Stream* port) {\n\tport->println ();\n\tport->printf (\"Node: %d\\n\", nodeId);\n\tchar macstr[ENIGMAIOT_ADDR_LEN * 3];\n\tmac2str (mac, macstr);\n\tport->printf (\"\\tMAC Address: %s\\n\", macstr);\n\tport->printf (\"\\tLast counter: %u\\n\", lastMessageCounter);\n\tport->printf (\"\\tKey valid from: %lu ms ago\\n\", (millis () - keyValidFrom));\n\tport->printf (\"\\tKey: %s\\n\", keyValid ? \"Valid\" : \"Invalid\");\n\tport->print (\"\\tStatus: \");\n\tswitch (status) {\n\tcase UNREGISTERED:\n\t\tport->println (\"Unregistered\");\n\t\tbreak;\n\tcase INIT:\n\t\tport->println (\"Initializing\");\n\t\tbreak;\n\tcase SLEEP:\n\t\tport->println (\"Going to sleep\");\n\t\tbreak;\n\tcase WAIT_FOR_SERVER_HELLO:\n\t\tport->println (\"Wait for server hello\");\n\t\tbreak;\n\tcase WAIT_FOR_DOWNLINK:\n\t\tport->println (\"Wait for Downlik\");\n\t\tbreak;\n\tcase REGISTERED:\n\t\tport->println (\"Registered. Wait for messages\");\n\t\tbreak;\n\tdefault:\n\t\tport->println (status);\n\t}\n\tport->println ();\n}\n\nvoid Node::initRateFilter () {\n\tfloat weight = 1;\n\n\trateFilter = new FilterClass (AVERAGE_FILTER, RATE_AVE_ORDER);\n\tfor (int i = 0; i < RATE_AVE_ORDER; i++) {\n\t\trateFilter->addWeigth (weight);\n\t\tweight = weight / 2;\n\t}\n\n}\n\nNode::Node () :\n\tkeyValid (false),\n\tstatus (UNREGISTERED) {\n\tinitRateFilter ();\n}\n\nNode::Node (node_t nodeData) :\n\tkeyValid (nodeData.keyValid),\n\tstatus (nodeData.status),\n\tlastMessageCounter (nodeData.lastMessageCounter),\n\tnodeId (nodeData.nodeId),\n\tkeyValidFrom (nodeData.keyValidFrom),\n\tsleepyNode (nodeData.sleepyNode)\n\t//packetNumber (0),\n\t//packetErrors (0),\n\t//per (0.0)\n{\n\tmemcpy (key, nodeData.key, sizeof (uint16_t));\n\tmemcpy (mac, nodeData.mac, 6);\n\n\tinitRateFilter ();\n}\n\nvoid Node::updatePacketsRate (float value) {\n\tpacketsHour = rateFilter->addValue (value);\n}\n\n\nvoid Node::reset () {\n\tDEBUG_DBG (\"Reset node\");\n\t//memset (mac, 0, 6);\n\tmemset (key, 0, KEY_LENGTH);\n\tmemset (nodeName, 0, NODE_NAME_LENGTH);\n\tkeyValid = false;\n\tlastMessageCounter = 0;\n\tlastControlCounter = 0;\n\tlastDownlinkMsgCounter = 0;\n\tkeyValidFrom = 0;\n    status = UNREGISTERED;\n    rssi = 0;\n    enigmaIOTVersion[0] = 0;\n\tenigmaIOTVersion[1] = 0;\n\tenigmaIOTVersion[2] = 0;\n\t//broadcastEnabled = false;\n\tbroadcastKeyRequested = false;\n\tif (rateFilter) {\n\t\tDEBUG_DBG (\"Reset packet rate\");\n\t\trateFilter->clear ();\n\t}\n\t//sleepyNode = true;\n}\n\nNodeList::NodeList () {\n\tfor (int i = 0; i < NUM_NODES; i++) {\n\t\tnodes[i].nodeId = i;\n\t}\n}\n\nNode* NodeList::getNodeFromID (uint16_t nodeId) {\n\tif (nodeId >= NUM_NODES)\n\t\treturn NULL;\n\n\treturn &(nodes[nodeId]);\n}\n\nNode* NodeList::getNodeFromMAC (const uint8_t* mac) {\n\tuint16_t index = 0;\n\n\tif (!memcmp (broadcastNode.getEncriptionKey (), mac, ENIGMAIOT_ADDR_LEN)) {\n\t\treturn &broadcastNode;\n\t}\n\n\twhile (index < NUM_NODES) {\n\t\tif (!memcmp (nodes[index].mac, mac, ENIGMAIOT_ADDR_LEN)) {\n\t\t\tif (nodes[index].status != UNREGISTERED) {\n\t\t\t\treturn &(nodes[index]);\n\t\t\t}\n\t\t}\n\t\tindex++;\n\t}\n\n\treturn NULL;\n}\n\nvoid NodeList::initBroadcastNode () {\n\t//broadcastNode = new Node ();\n\t//node_t node;\n\n\t//uint8_t broadcastAddress[ENIGMAIOT_ADDR_LEN];\n\t//memcpy (broadcastAddress, BROADCAST_ADDRESS, ENIGMAIOT_ADDR_LEN);\n\tbroadcastNode.setMacAddress (BROADCAST_ADDRESS);\n\tbroadcastNode.setNodeId (0xffff);\n\tbroadcastNode.setStatus (REGISTERED);\n\tbroadcastNode.setSleepy (false);\n\tbroadcastNode.setNodeName (BROADCAST_NONE_NAME);\n}\n\nNode* NodeList::getNodeFromName (const char* name) {\n\tuint16_t index = 0;\n\n\t// Check if address is an address as an string\n\tuint8_t netAddr[ENIGMAIOT_ADDR_LEN];\n\tif (str2mac (name, netAddr)) {\n\t\treturn getNodeFromMAC (netAddr);\n\t}\n\n\t// check if destination is broadcast\n\tif (!strncmp (name, broadcastNode.getNodeName (), NODE_NAME_LENGTH)) {\n\t\tDEBUG_DBG (\"Address '%s' is broadcast node\", name);\n\t\treturn &broadcastNode;\n\t}\n\n\twhile (index < NUM_NODES) {\n\t\tif (!strncmp (nodes[index].nodeName, name, NODE_NAME_LENGTH)) {\n\t\t\tif (nodes[index].status != UNREGISTERED) {\n\t\t\t\treturn &(nodes[index]);\n\t\t\t}\n\t\t}\n\t\tindex++;\n\t}\n\n\treturn NULL;\n}\n\nint8_t NodeList::checkNodeName (const char* name, const uint8_t* address) {\n\t//bool found = false;\n\n\tif (strlen (name) > NODE_NAME_LENGTH - 1) {\n\t\tDEBUG_ERROR (\"Name too long %s\", name);\n\t\treturn TOO_LONG; // Enmpty name\n\t}\n\n\tif (!strlen (name)) {\n\t\tDEBUG_ERROR (\"Empty name\", name);\n\t\treturn EMPTY_NAME; // Too long name\n\t}\n\n\tfor (int i = 0; i < NUM_NODES; i++) {\n\t\t// if node is not registered and has this node name\n\t\tDEBUG_DBG (\"Node %d status is %d\", i, nodes[i].status);\n\t\tif (nodes[i].status != UNREGISTERED) {\n\t\t\tchar* currentNodeNamme = nodes[i].getNodeName ();\n\t\t\tDEBUG_DBG (\"Node %d name is %s\", i, currentNodeNamme ? currentNodeNamme : \"NULL\");\n\t\t\tif (currentNodeNamme && !strncmp (currentNodeNamme, name, NODE_NAME_LENGTH)) {\n\t\t\t\t// if addresses addresses are different\n\t\t\t\t//char addrStr[ENIGMAIOT_ADDR_LEN * 3];\n\t\t\t\tDEBUG_INFO (\"Found node name %s in Node List with address %s\", name, mac2str (address));\n\t\t\t\tif (memcmp (nodes[i].getMacAddress (), address, ENIGMAIOT_ADDR_LEN)) {\n\t\t\t\t\tDEBUG_ERROR (\"Duplicated name %s\", name);\n\t\t\t\t\treturn ALREADY_USED; // Already used\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn NAME_OK; // Name was not used\n}\n\nNode* NodeList::findEmptyNode () {\n\tuint16_t index = 0;\n\n\twhile (index < NUM_NODES) {\n\t\tif (nodes[index].status != UNREGISTERED) {\n\t\t\treturn &(nodes[index]);\n\t\t}\n\t\tindex++;\n\t}\n\n\treturn NULL;\n}\n\nuint16_t NodeList::countActiveNodes () {\n\tuint16_t counter = 0;\n\n\tfor (int i = 0; i < NUM_NODES; i++) {\n\t\tif (nodes[i].status != UNREGISTERED) {\n\t\t\tcounter++;\n\t\t}\n\t}\n\treturn counter;\n}\n\nbool NodeList::unregisterNode (uint16_t nodeId) {\n\tif (nodeId < NUM_NODES) {\n\t\tnodes[nodeId].reset ();\n\n\t\tif (nodes[nodeId].status != UNREGISTERED) {\n\t\t\tnodes[nodeId].status = UNREGISTERED;\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nbool NodeList::unregisterNode (const uint8_t* mac) {\n\tNode* node = getNodeFromMAC (mac);\n\tif (node) {\n\t\tnode->reset ();\n\t\tnode->status = UNREGISTERED;\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n}\n\nbool NodeList::unregisterNode (Node* node) {\n\tif (node) {\n\t\tnode->reset ();\n\n\t\tif (nodes[node->nodeId].status != UNREGISTERED) {\n\t\t\tnodes[node->nodeId].status = UNREGISTERED;\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n}\n\nNode* NodeList::getNextActiveNode (uint16_t nodeId) {\n\tif (nodeId == 0xFFFF) {\n\t\tif (nodes[0].status != UNREGISTERED) {\n\t\t\treturn &(nodes[0]);\n\t\t}\n\t}\n\tfor (int i = nodeId + 1; i < NUM_NODES; i++) {\n\t\tif (nodes[i].status != UNREGISTERED) {\n\t\t\treturn &(nodes[i]);\n\t\t}\n\t}\n\treturn NULL;\n}\n\nNode* NodeList::getNextActiveNode (Node* node) {\n\tif (!node) {\n\t\tif (nodes[0].status != UNREGISTERED) {\n\t\t\treturn &(nodes[0]);\n\t\t}\n\t\tnode = &(nodes[0]);\n\t}\n\tfor (int i = node->nodeId + 1; i < NUM_NODES; i++) {\n\t\tif (nodes[i].status != UNREGISTERED) {\n\t\t\treturn &(nodes[i]);\n\t\t}\n\t}\n\treturn NULL;\n}\n\nNode* NodeList::getNewNode (const uint8_t* mac) {\n\tNode* node = getNodeFromMAC (mac);\n\tif (node) {\n\t\treturn node;\n\t} else {\n\t\tfor (int i = 0; i < NUM_NODES; i++) {\n\t\t\tif (nodes[i].status == UNREGISTERED) {\n\t\t\t\tnodes[i].setMacAddress (const_cast<uint8_t*>(mac));\n\t\t\t\tnodes[i].reset ();\n\t\t\t\treturn &(nodes[i]);\n\t\t\t}\n\t\t}\n\t}\n\treturn NULL;\n}\n\nvoid NodeList::printToSerial (Stream* port) {\n\tfor (int i = 0; i < NUM_NODES; i++) {\n\t\tif (nodes[i].status != UNREGISTERED) {\n\t\t\tnodes[i].printToSerial (port);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/NodeList.h",
    "content": "/**\n  * @file NodeList.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief EnigmaIoT sensor node management structures\n  */\n\n#ifndef _NODELIST_h\n#define _NODELIST_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n\t#include \"Arduino.h\"\n#else\n\t#include \"WProgram.h\"\n#endif\n#include \"EnigmaIoTconfig.h\"\n#include \"Filter.h\"\n\n/**\n  * @brief State definition for nodes\n  */\nenum node_status {\n    UNREGISTERED, /**< Node is not registered. This is te initial state of every node */\n    INIT, /**< Node is starting registration by ClientHello message */\n    WAIT_FOR_SERVER_HELLO, /**< Node sent ClientHello message, now it is waiting for ServerHello */\n    WAIT_FOR_DOWNLINK, /**< Node sent a data message, now it is waiting for downlink data */\n    REGISTERED, /**< Node is registered and its key is valid */\n    SLEEP /**< Node is in sleep mode */\n};\n\ntypedef enum {\n    NAME_OK = 0,\n    ALREADY_USED = -1,\n    EMPTY_NAME = -2,\n    TOO_LONG = -3\n}nodeNameStatus_t;\n\ntypedef enum node_status status_t; ///< @brief Node state\n\ntypedef enum {\n    RESTART_AFTER_OTA = 1,\n    OTA_ERROR_RESTART = 2,\n    RESTART_REQUESTED = 3,\n    CONFIG_RESET = 4,\n    USER_RESET = 5,\n    IRRELEVANT = 10,\n    UNKNOWN_REASON = 0\n}restartReason_t;\n\ntypedef enum control_message_type {\n    VERSION = 0x01,\n    VERSION_ANS = 0x81,\n    SLEEP_GET = 0x02,\n    SLEEP_SET = 0x03,\n    SLEEP_ANS = 0x82,\n    IDENTIFY = 0x04,\n    RESET = 0x05,\n    RESET_ANS = 0x85,\n    RSSI_GET = 0x06,\n    RSSI_ANS = 0x86,\n    NAME_GET = 0x07,\n    NAME_ANS = 0x08,\n    NAME_SET = 0x87,\n    RESTART_NODE = 0x09,\n    RESTART_CONFIRM = 0x89,\n    BRCAST_KEY = 0x10,\n\tOTA = 0xEF,\n\tOTA_ANS = 0xFF,\n\tUSERDATA_GET = 0x00,\n\tUSERDATA_SET = 0x20,\n    INVALID = 0xF0\n\t//USERDATA_ANS = 0x90\n} control_message_type_t;\n\ntypedef enum ota_status {\n\t  OTA_STARTED = 0,\n\t  OTA_START_ERROR = 1,\n\t  OTA_CHECK_OK = 2,\n\t  OTA_CHECK_FAIL = 3,\n\t  OTA_OUT_OF_SEQUENCE =4 ,\n\t  OTA_TIMEOUT = 5,\n\t  OTA_FINISHED = 6\n} ota_status_t;\n\n/**\n  * @brief Struct that define node fields. Used for long term storage needs\n  */\nstruct node_instance {\n    uint8_t mac[ENIGMAIOT_ADDR_LEN]; ///< @brief Node address\n    uint16_t nodeId; ///< @brief Node identifier asigned by gateway\n    uint8_t key[32]; ///< @brief Shared key\n    uint16_t lastMessageCounter; ///< @brief Last message counter state for specific Node\n    uint16_t lastControlCounter; ///< @brief Last control message counter state for specific Node\n    uint16_t lastDownlinkMsgCounter; ///< @brief Last downlink message counter state for specific Node\n    time_t keyValidFrom; ///< @brief Last time that Node and Gateway agreed a key\n    time_t lastMessageTime; ///< @brief Last time a message was received by Node\n    status_t status = UNREGISTERED; ///< @brief Node state\n    bool keyValid = false; ///< @brief Node shared key valid\n    bool sleepyNode = true; ///< @brief Node sleepy definition\n    char nodeName[NODE_NAME_LENGTH]; ///< @brief Node name. Use as a human friendly name to avoid use of numeric address\n};\n\ntypedef struct node_instance node_t;\n\n/**\n  * @brief Class definition for a single sensor Node\n  */\nclass Node {\npublic:\n    /**\n      * @brief Plain constructor\n      * @return Returns a new unregistered Node instance\n      */\n    Node ();\n\n    /**\n      * @brief Constructor that initializes data from another Node data\n      * @param nodeData `node_instance` struct that contains initalization values for new Node\n      * @return Returns a new Node instance with same data as given `node_instance` struct\n      */\n    explicit Node (node_t nodeData);\n\n    /**\n      * @brief Gets address from Node\n      * @return Returns a pointer to Node address\n      */\n    uint8_t *getMacAddress () {\n        return mac;\n    }\n\n    /**\n      * @brief Gets Node identifier\n      * @return Returns Node identifier\n      */\n    uint16_t getNodeId () {\n        return nodeId;\n    }\n\n    /**\n      * @brief Sets a new Node identifier\n      * @param nodeId New nodeId value\n      */\n    void setNodeId (uint16_t nodeId) {\n        this->nodeId = nodeId;\n    }\n\n    /**\n      * @brief Gets Node name\n      * @return Returns Node name\n      */\n    char* getNodeName () {\n        if (strlen (nodeName)) {\n            return nodeName;\n        } else {\n            return NULL;\n        }\n    }\n\n    /**\n      * @brief Sets Node name\n      * @param name Custom node name. This should be unique in the network\n      */\n    void setNodeName (const char* name) {\n        memset (nodeName, 0, NODE_NAME_LENGTH);\n        strncpy (nodeName, name, NODE_NAME_LENGTH);\n    }\n\n    /**\n      * @brief Gets Node encryption key\n      * @return Returns a pointer to Node encryption key\n      */\n    uint8_t *getEncriptionKey () {\n        return key;\n    }\n\n    /**\n      * @brief Sets encryption key\n      * @param key New key\n      */\n    void setEncryptionKey (const uint8_t* key);\n\n    /**\n      * @brief Gets last time that key was agreed with gateway\n      * @return Time in milliseconds of last key agreement\n      */\n    time_t getKeyValidFrom () {\n        return keyValidFrom;\n    }\n\n    /**\n      * @brief Sets time when key was agreed with gateway\n      * @param keyValidFrom Time on key agreement\n      */\n    void setKeyValidFrom (time_t keyValidFrom) {\n        this->keyValidFrom = keyValidFrom;\n    }\n\n    /**\n      * @brief Gets last time that node sent a message\n      * @return Time in milliseconds of last received node message\n      */\n    time_t getLastMessageTime () {\n        return lastMessageTime;\n    }\n\n    /**\n      * @brief Sets current moment as last node message time\n      */\n    void setLastMessageTime () {\n        lastMessageTime = millis ();\n    }\n\n    /**\n      * @brief Gets counter for last received message from node\n      * @return Message counter\n      */\n    uint16_t getLastMessageCounter () {\n        return lastMessageCounter;\n    }\n\n    /**\n      * @brief Gets counter for last received control message from node\n      * @return Message counter\n      */\n    uint16_t getLastControlCounter () {\n        return lastControlCounter;\n    }\n\n    /**\n      * @brief Gets counter for last downlink message from gateway\n      * @return Message counter\n      */\n    uint16_t getLastDownlinkMsgCounter () {\n        return lastDownlinkMsgCounter;\n    }\n\n    /**\n      * @brief Sets counter for last received message from node\n      * @param counter Message counter\n      */\n    void setLastMessageCounter (uint16_t counter) {\n        lastMessageCounter = counter;\n    }\n\n    /**\n      * @brief Sets counter for last received control message from node\n      * @param counter Message counter\n      */\n    void setLastControlCounter (uint16_t counter) {\n        lastControlCounter = counter;\n    }\n\n    /**\n      * @brief Sets counter for last downlink message from gateway\n      * @param counter Message counter\n      */\n    void setLastDownlinkMsgCounter (uint16_t counter) {\n        lastDownlinkMsgCounter = counter;\n    }\n\n    /**\n      * @brief Sets node address\n      * @param macAddress Node address\n      */\n    void setMacAddress (const uint8_t *macAddress) {\n        if (macAddress) {\n            memcpy (mac, macAddress, 6);\n        }\n    }\n\n    /**\n      * @brief Gets shared key validity for this node\n      * @return `true` if node shared key is valid. `false` otherwise\n      */\n    bool isKeyValid () {\n        return keyValid;\n    }\n\n    /**\n      * @brief Sets shared key validity for this node\n      * @param status node key validity\n      */\n    void setKeyValid (bool status) {\n        keyValid = status;\n    }\n\n    /**\n      * @brief Gets registration state of this node\n      * @return `true` if node is registered on gateway. `false` otherwise\n      */\n    bool isRegistered () {\n        return status == REGISTERED;\n    }\n\n    /**\n      * @brief Gets status for finite state machine that represents node\n      * @return Node status\n      */\n    status_t getStatus () {\n        return status;\n    }\n\n    /**\n      * @brief Sets status for finite state machine that represents node\n      * @param status Node status\n      */\n    void setStatus (status_t status) {\n        this->status = status;\n    }\n\n    /**\n      * @brief Gets a struct that represents node object. May be used for node serialization\n      * @return Node struct\n      */\n    node_t getNodeData ();\n\n    /**\n      * @brief Dumps node data to the given stream, Serial by default. This method may be used for debugging\n      * @param port Stream to print data to\n      */\n    void printToSerial (Stream *port = &Serial);\n\n    /**\n      * @brief Resets all node fields to a default initial and not registered state\n      */\n    void reset ();\n\n    /**\n      * @brief Sets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sleep\n      * after sending a message. In this case it will wait for a short while for a downlink message from gateway\n      * @param sleepy `true` if node sleeps after sending a message and wait for downlink. `false` if downlink may happen in any moment\n      */\n    void setSleepy (bool sleepy) {\n        if (initAsSleepy) {\n            sleepyNode = sleepy;\n        } else {\n            sleepyNode = false;\n        }\n    }\n\n\t/**\n\t  * @brief Records if node started as a sleepy node or not. If it did not started so it will never accept sleep time changes\n\t  * @param sleepy `true` if node started as sleepy. `false` otherwise\n\t  */\n    void setInitAsSleepy (bool sleepy) {\n        initAsSleepy = sleepy;\n    }\n\n\t/**\n\t  * @brief Gets initial sleepy mode\n\t  * @return `true` if node started as sleepy. `false` otherwise\n\t  */\n    bool getInitAsSleepy () {\n        return initAsSleepy;\n    }\n\n    /**\n      * @brief Gets node working mode regarding battery saving strategy. If node is sleepy it will turn into deep sleep\n      * after sending a message. In this case it will wait for a short while for a downlink message from gateway\n      * @return `true` if node sleeps after sending a message and wait for downlink. `false` if downlink may happen in any moment\n      */\n    bool getSleepy () {\n        return sleepyNode;\n    }\n\n    /**\n      * @brief Returns if node broadcast mode is enabled. In that case, node is able to send and receive encrypted broadcast\n      * messages. If this is enabled this will be notified to gateway so that it sends broadcast key.\n      * Notice this mode is optional and does not disable the ability to send normal messages.\n      * @return `true` if node has broadcast mode enabled.\n      */\n    bool broadcastIsEnabled () {\n#ifndef DISABLE_BRCAST\n        return broadcastEnabled;\n#else\n        return false;\n#endif\n    }\n\n    /**\n      * @brief Enables node broadcast mode. Node will request broadcast key to Gateway. When it is received node will be able to send\n      * and receive encrypted broadcast messages. \n      * @param broadcast `true` to enable broadcast mode on this node.\n      */\n    void enableBroadcast (bool broadcast) {\n#ifndef DISABLE_BRCAST\n        broadcastEnabled = broadcast;\n#endif\n    }\n\n    /**\n      * @brief Mark node to be waiting for broadcast key\n      * @param request `true` to mark node as waiting.\n      */\n    void setBroadcastKeyRequested (bool request) {\n        broadcastKeyRequested = request;\n    }\n\n    /**\n      * @brief Checks if node is waiting for broadcast key\n      * @return `true` if node is waiting.\n      */\n    bool isBroadcastKeyRequested () {\n        return broadcastKeyRequested;\n    }\n\n    /**\n      * @brief Adds a new message rate value for filter calculation\n      * @param value Next value for calculation\n      */\n    void updatePacketsRate (float value);\n\n    /**\n      * @brief Gets last RSSI measurement of Gateway\n      * @return RSSI power of Gateway signal\n      */\n    signed int getRSSI () {\n        return rssi;\n    }\n\n    /**\n      * @brief Stores last RSSI measurement of Gateway\n      * @param rssi RSSI power of Gateway signal\n      */\n    void setRSSI (signed int rssi) {\n        this->rssi = rssi;\n    }\n    \n    /**\n      * @brief Gets node info to check if it has requested time sync ever\n      * @return true or false\n      */\n    bool useTimeSync () {\n        return askedTimeSync;\n    }\n    \n    /**\n      * @brief Mark node as time sync enabled\n      */\n    void setTimeSyncEnabled () {\n        askedTimeSync = true;\n    }\n\n    /**\n      * @brief Gets node EnigmaIOT version\n      * @return EnigmaIOT protocol version in a uint8_t array of 3 elements\n      */\n    uint8_t* getVersion () {\n        return enigmaIOTVersion;\n    }\n\n     /**\n      * @brief Sets node EnigmaIOT version\n      * @param major Major protocol version. In 0.9.6, this should be 0\n      * @param minor Minor protocol version. In 0.9.6, this should be 9\n      * @param incremental Incremental protocol version. In 0.9.6, this should be 6\n      */\n    void setVersion (uint8_t major, uint8_t minor, uint8_t incremental) {\n        enigmaIOTVersion[0] = major;\n        enigmaIOTVersion[1] = minor;\n        enigmaIOTVersion[2] = incremental;\n    }\n\n    uint8_t queuedMessage[MAX_MESSAGE_LENGTH]; ///< @brief Message queued for sending to node in case of sleepy mode\n    size_t qMessageLength;  ///< @brief Queued message length\n    bool qMessagePending = false; ///< @brief `True` if message should be sent just after next data message\n\n    uint32_t packetNumber = 0; ///< @brief Number of packets received from node to gateway\n    uint32_t packetErrors = 0; ///< @brief Number of errored packets\n    double per = 0;  ///< @brief Current packet error rate of a specific node\n    double packetsHour = 0; ///< @brief Packet rate for a specific nope\n    //int64_t t1, t2, t3, t4;  ///< @brief Timestaps to calculate clock offset\n\nprotected:\n//#define KEYLENGTH 32\n    bool keyValid; ///< @brief Node shared key valid\n    status_t status; ///< @brief Current node status. See `enum node_status`\n    uint16_t lastMessageCounter; ///< @brief Last message counter state for specific Node\n    uint16_t lastControlCounter; ///< @brief Last message counter state for specific Node\n    uint16_t lastDownlinkMsgCounter; ///< @brief Last downlink message counter state for specific Node\n    uint16_t nodeId; ///< @brief Node identifier asigned by gateway\n    timer_t keyValidFrom; ///< @brief Last time that Node and Gateway agreed a key\n    bool sleepyNode = true; ///< @brief Node sleepy definition\n    bool broadcastEnabled = false; ///< @brief Node is able to send broadcast messages\n    bool broadcastKeyRequested = false; ///< @brief Node is waiting for broadcast key\n    bool initAsSleepy; ///< @brief Stores initial sleepy node. If this is false, this node does not accept sleep time changes\n    bool askedTimeSync = false; ////< @brief Gateway marks this true to track if a node uses timeSync\n    uint8_t mac[ENIGMAIOT_ADDR_LEN]; ///< @brief Node address\n    uint8_t key[KEY_LENGTH]; ///< @brief Shared key\n    timer_t lastMessageTime; ///< @brief Node state\n    FilterClass* rateFilter; ///< @brief Filter for message rate smoothing\n    char nodeName[NODE_NAME_LENGTH]; ///< @brief Node name. Use as a human friendly name to avoid use of numeric address\n    signed int rssi; ///< @brief Stores last RSSI measurement\n    uint8_t enigmaIOTVersion[3]; ///< @brief Protocol version, filled when a version message is received\n\n     /**\n      * @brief Starts smoothing filter\n      */\n    void initRateFilter ();\n\n    friend class NodeList;\n};\n\n\nclass NodeList {\npublic:\n\n    /**\n      * @brief Node list constructor\n      */\n    NodeList ();\n\n    /**\n      * @brief Gets node that correspond with given nodeId\n      * @param nodeId NodeId to search for\n      * @return Node instance that has given nodeId. NULL if it was not found\n      */\n    Node *getNodeFromID (uint16_t nodeId);\n\n    /**\n      * @brief Gets node that correspond with given address\n      * @param mac address to search for\n      * @return Node instance that has given address. NULL if it was not found\n      */\n    Node *getNodeFromMAC (const uint8_t* mac);\n\n     /**\n      * @brief Gets node that correspond with given node name\n      * @param name Node name to search for\n      * @return Node instance that has given name. NULL if it was not found\n      */\n    Node* getNodeFromName (const char* name);\n    \n    /**\n      * @brief Check Node name for duplicate\n      * @param name Custom node name\n      * @param address Address of node which is being tried to set name\n      * @return Error code to show name correctness. 0 = OK, -1 = Name already used, -2 = Name is too long, -3 = Name is empty\n      */\n    int8_t checkNodeName (const char* name, const uint8_t* address);\n\n    /**\n      * @brief Searches for a free place for a new Node instance\n      * @return Node instance to hold new instance\n      */\n    Node *findEmptyNode ();\n    \n     /**\n      * @brief Gets the number of active nodes (registered or registering)\n      * @return Number of active nodes\n      */\n    uint16_t countActiveNodes ();\n    \n    /**\n      * @brief Frees up a node and marks it as available\n      * @param nodeId NodeId to free up\n      * @return 'True' if it was deleted. 'False' if nodeId was not found\n      */\n    bool unregisterNode (uint16_t nodeId);\n    \n    /**\n      * @brief Frees up a node and marks it as available\n      * @param mac Address to free up\n      * @return 'True' if it was deleted. 'False' if address was not found\n      */\n    bool unregisterNode (const uint8_t* mac);\n    \n    /**\n      * @brief Frees up a node using a pointer to it\n      * @param node Pointer to node instance\n      * @return 'True' if it was deleted. 'False' if it was already deleted\n      */\n    bool unregisterNode (Node *node);\n\n    /**\n      * @brief Gets next active node by nodeId\n      * @param nodeId NodeId of the node to find\n      * @return Pointer to node or NULL if it was not found\n      */\n    Node *getNextActiveNode (uint16_t nodeId);\n\n    /**\n      * @brief Gets next active node by instance where to get nodeId\n      * @param node Node which have the nodeId to find\n      * @return Pointer to node or NULL if it was not found\n      */\n    Node *getNextActiveNode (Node* node);\n\n     /**\n      * @brief Finds a node that correspond with given address of creates a new one if it does not exist\n      * @param mac address to search for\n      * @return Node instance. NULL if it Node store is full\n      */\n    Node *getNewNode (const uint8_t* mac);\n\n      /**\n      * @brief Dumps node list data to a Stream object\n      * @param port Stram port\n      */\n    void printToSerial (Stream *port);\n\n    /**\n     * @brief Gets broadcas node instance\n     * @return Broadcas node instance\n     */\n    Node* getBroadcastNode () {\n        return &broadcastNode;\n    }\n\n    /**\n     * @brief Init broadcast node data\n     */\n    void initBroadcastNode ();\n\n    /**\n     * @brief Ask for last broadcast message counter state\n     * @return last broadcast message counter\n     */\n    uint16_t getLastBroadcastMsgCounter () {\n        return lastBroadcastMsgCounter;\n    }\n\n    /**\n     * @brief Increments last broadcast message counter stata by one\n     */\n    void incLastBroadcastMsgCounter () {\n        lastBroadcastMsgCounter++;\n    }\n\nprotected:\n    Node nodes[NUM_NODES]; ///< @brief Static Node array that holds maximum number of supported nodes \n    Node broadcastNode; ///< @brief Node instance that holds data used for broadcast messages. This does not represent any individual node\n    uint16_t lastBroadcastMsgCounter; ///< @brief Last broadcast message counter state for all nodes, both for data and control messages\n\n};\n\n\n#endif\n\n"
  },
  {
    "path": "src/cryptModule.cpp",
    "content": "/**\n  * @file cryptModule.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions\n  *\n  * Uses [Arduino CryptoLib](https://rweather.github.io/arduinolibs/crypto.html) library\n  */\n\n#include \"cryptModule.h\"\n#include <Curve25519.h>\n#include <ChaChaPoly.h>\n#include <Poly1305.h>\n#include <SHA256.h>\n#include \"helperFunctions.h\"\n\nCYPHER_TYPE cipher;\n\nuint8_t* CryptModule::getSHA256 (uint8_t* buffer, uint8_t length) {\n\tconst uint8_t HASH_LEN = 32;\n\n\tuint8_t key[HASH_LEN];\n\n\tif (length < HASH_LEN) {\n\t\tDEBUG_ERROR (\"Too small buffer. Should be 32 bytes\");\n\t\treturn NULL;\n\t}\n\n\tSHA256 hash;\n\n\t// hash.reset (); // Not needed, implicit to constructor\n\thash.update ((void*)buffer, length);\n\thash.finalize (key, HASH_LEN);\n\thash.clear ();\n\n\t/*br_sha256_context* shaContext = new br_sha256_context ();\n\tbr_sha256_init (shaContext);\n\tbr_sha224_update (shaContext, (void*)buffer, length);\n\tbr_sha256_out (shaContext, key);\n\tdelete shaContext;*/\n\n\tif (length > HASH_LEN) {\n\t\tlength = HASH_LEN;\n\t}\n\n\tmemcpy (buffer, key, length);\n\n\treturn buffer;\n}\n\nbool CryptModule::decryptBuffer (const uint8_t* data, size_t length,\n\t\t\t\t\t\t\t\t const uint8_t* iv, uint8_t ivlen, const uint8_t* key, uint8_t keylen,\n\t\t\t\t\t\t\t\t const uint8_t* aad, uint8_t aadLen, const uint8_t* tag, uint8_t tagLen) {\n\tif (key && iv && data) {\n\n\t\tDEBUG_VERBOSE (\"IV: %s\", printHexBuffer (iv, ivlen));\n\t\tDEBUG_VERBOSE (\"Key: %s\", printHexBuffer (key, keylen));\n\t\tDEBUG_VERBOSE (\"AAD: %s\", printHexBuffer (aad, aadLen));\n\t\tcipher.clear ();\n\n\t\tif (cipher.setKey (key, keylen)) {\n\t\t\tif (cipher.setIV ((uint8_t*)iv, ivlen)) {\n\t\t\t\tcipher.addAuthData ((uint8_t*)aad, aadLen);\n\t\t\t\tcipher.decrypt ((uint8_t*)data, (uint8_t*)data, length);\n\t\t\t\tbool ok = cipher.checkTag ((uint8_t*)tag, tagLen);\n\t\t\t\tcipher.clear ();\n\t\t\t\tDEBUG_VERBOSE (\"Tag: %s\", printHexBuffer (tag, tagLen));\n\t\t\t\tif (!ok) {\n\t\t\t\t\tDEBUG_ERROR (\"Data authentication error\");\n\t\t\t\t}\n\t\t\t\treturn ok;\n\t\t\t} else {\n\t\t\t\tDEBUG_ERROR (\"Error setting IV\");\n\t\t\t}\n\t\t} else {\n\t\t\tDEBUG_ERROR (\"Error setting key\");\n\t\t}\n\t} else {\n\t\tDEBUG_ERROR (\"Error in key or IV\");\n\t}\n\n\treturn false;\n}\n\nbool CryptModule::encryptBuffer (const uint8_t* data, size_t length,\n\t\t\t\t\t\t\t\t const uint8_t* iv, uint8_t ivlen, const uint8_t* key, uint8_t keylen,\n\t\t\t\t\t\t\t\t const uint8_t* aad, uint8_t aadLen, const uint8_t* tag, uint8_t tagLen) {\n\n\tif (key && iv && data) {\n\n\t\tDEBUG_VERBOSE (\"IV: %s\", printHexBuffer (iv, ivlen));\n\t\tDEBUG_VERBOSE (\"Key: %s\", printHexBuffer (key, keylen));\n\t\tDEBUG_VERBOSE (\"AAD: %s\", printHexBuffer (aad, aadLen));\n\t\tcipher.clear ();\n\n\t\tif (cipher.setKey ((uint8_t*)key, keylen)) {\n\t\t\tif (cipher.setIV ((uint8_t*)iv, ivlen)) {\n\t\t\t\tcipher.addAuthData ((uint8_t*)aad, aadLen);\n\t\t\t\tcipher.encrypt ((uint8_t*)data, (uint8_t*)data, length);\n\t\t\t\tcipher.computeTag ((uint8_t*)tag, tagLen);\n\t\t\t\tcipher.clear ();\n\t\t\t\tDEBUG_VERBOSE (\"Tag: %s\", printHexBuffer (tag, tagLen));\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tDEBUG_ERROR (\"Error setting IV\");\n\t\t\t}\n\t\t} else {\n\t\t\tDEBUG_ERROR (\"Error setting key\");\n\t\t}\n\t} else {\n\t\tDEBUG_ERROR (\"Error on input data for encryption\");\n\t}\n\n\treturn false;\n\n}\n\nuint32_t CryptModule::random () {\n#ifdef ESP8266\n\treturn *(volatile uint32_t*)RANDOM_32;\n#elif defined ESP32\n\treturn esp_random ();\n#endif\n}\n\nuint8_t* CryptModule::random (const uint8_t* buf, size_t len) {\n\tif (buf) {\n\t\tfor (unsigned int i = 0; i < len; i += sizeof (uint32_t)) {\n\t\t\tuint32_t rnd = random ();\n\t\t\tif (i < len - (len % sizeof (int32_t))) {\n\t\t\t\tmemcpy (const_cast<uint8_t*>(buf) + i, &rnd, sizeof (uint32_t));\n\t\t\t} else {\n\t\t\t\tmemcpy (const_cast<uint8_t*>(buf) + i, &rnd, len % sizeof (int32_t));\n\t\t\t}\n\t\t}\n\t}\n\treturn const_cast<uint8_t*>(buf);\n}\n\nvoid CryptModule::getDH1 () {\n\tCurve25519::dh1 (publicDHKey, privateDHKey);\n\tDEBUG_VERBOSE (\"Public key: %s\", printHexBuffer (publicDHKey, KEY_LENGTH));\n\n\tDEBUG_VERBOSE (\"Private key: %s\", printHexBuffer (privateDHKey, KEY_LENGTH));\n}\n\nbool CryptModule::getDH2 (const uint8_t* remotePubKey) {\n\tDEBUG_VERBOSE (\"Remote public key: %s\", printHexBuffer (const_cast<uint8_t*>(remotePubKey), KEY_LENGTH));\n\tDEBUG_VERBOSE (\"Private key: %s\", printHexBuffer (privateDHKey, KEY_LENGTH));\n\n\tif (!Curve25519::dh2 (const_cast<uint8_t*>(remotePubKey), privateDHKey)) {\n\t\tDEBUG_WARN (\"DH2 error\");\n\t\treturn false;\n\t}\n\tmemset (publicDHKey, 0, KEY_LENGTH); // delete public key from memory\n\n\treturn true;\n}\n\n/*size_t CryptModule::getBlockSize ()\n{\n\tCYPHER_TYPE cipher;\n\treturn cipher.blockSize();\n}*/\n\nCryptModule Crypto;\n"
  },
  {
    "path": "src/cryptModule.h",
    "content": "/**\n  * @file cryptModule.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Crypto library that implements EnigmaIoT encryption, decryption and key agreement fuctions\n  *\n  * Uses [Arduino CryptoLib](https://rweather.github.io/arduinolibs/crypto.html) library\n  */\n\n#ifndef _CRYPTMODULE_h\n#define _CRYPTMODULE_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n#include \"EnigmaIoTconfig.h\"\n\n#define CRYPTMODULE_DEBUG_TAG \"CryptModule\"\n\n#ifdef ESP8266\n#define RANDOM_32 0x3FF20E44\n#endif\n\nconst uint8_t RANDOM_LENGTH = sizeof (uint32_t); ///< @brief Length of random number generator values\nconst uint8_t CRC_LENGTH = sizeof (uint32_t); ///< @brief Length of CRC\n\n/**\n  * @brief EnigmaIoT Crypto module. Wraps Arduino CryptoLib classes and methods\n  *\n  * Uses [Arduino CryptoLib](https://rweather.github.io/arduinolibs/crypto.html) library\n  */\nclass CryptModule {\npublic:\n\t/**\n\t  * @brief Gets a random number\n\t  * @return Returns a random number\n\t  */\n\tstatic uint32_t random ();\n\n\tstatic uint32_t random (uint32_t max, uint32_t min = 0) {\n\t\tuint32_t _max, _min;\n\n\t\tif (max > min) {\n\t\t\t_max = max;\n\t\t\t_min = min;\n\t\t} else {\n\t\t\t_max = min;\n\t\t\t_min = max;\n\t\t}\n        if (_max != _min) {\n            return _min + (random () % (_max - _min));\n        } else {\n            return _min;\n        }\n\t}\n\n\t/**\n\t  * @brief Fills a buffer with random values\n\t  * @param buf Pointer to the buffer to fill\n\t  * @param len Buffer length in number of bytes\n\t  * @return Returns the same buffer used as input, filled with random data\n\t  */\n\tstatic uint8_t* random (const uint8_t* buf, size_t len);\n\n\t/**\n\t  * @brief Decrypts a buffer using a shared key\n\t  * @param data Buffer to decrypt. It will be used as input and output\n\t  * @param length Buffer length in number of bytes\n\t  * @param iv Initialization Vector used to encrypt this data\n\t  * @param ivlen IV length\n\t  * @param key Shared key used to encrypt data\n\t  * @param keylen Key length\n\t  * @param aad Additional Authentication Data for Poly1305\n\t  * @param aadLen Additional Authentication Data length\n\t  * @param tag Buffer to store authentication tag calculated by Poly1305\n\t  * @param tagLen Additional Authentication Tag length\n\t  * @return True if decryption and tag checking was correct\n\t  */\n\tstatic bool decryptBuffer (const uint8_t* data, size_t length,\n\t\t\t\t\t\t\t   const uint8_t* iv, uint8_t ivlen, const uint8_t* key, uint8_t keylen,\n\t\t\t\t\t\t\t   const uint8_t* aad, uint8_t aadLen, const uint8_t* tag, uint8_t tagLen);\n\n\t/**\n\t  * @brief Generates a SHA256 hash from input\n\t  * @param buffer Buffer with data to hash. Hash will be stored here\n\t  * @param length Buffer length in number of bytes. It should be 32 at least\n\t  * @return Returns buffer pointer\n\t  */\n\tstatic uint8_t* getSHA256 (uint8_t* buffer, uint8_t length);\n\n\t/**\n\t  * @brief Decrypts a buffer using a shared key\n\t  * @param data Buffer to decrypt. It will be used as input and output\n\t  * @param length Buffer length in number of bytes\n\t  * @param iv Initialization Vector used to encrypt this data\n\t  * @param ivlen IV length\n\t  * @param key Shared key used to encrypt data\n\t  * @param keylen Key length\n\t  * @param aad Additional Authentication Data for Poly1305\n\t  * @param aadLen Additional Authentication Data length\n\t  * @param tag Buffer to store authentication tag calculated by Poly1305\n\t  * @param tagLen Additional Authentication Tag length\n\t  * @return True if encryption and tag generation was correct\n\t  */\n\tstatic bool encryptBuffer (const uint8_t* data, size_t length,\n\t\t\t\t\t\t\t   const uint8_t* iv, uint8_t ivlen, const uint8_t* key, uint8_t keylen,\n\t\t\t\t\t\t\t   const uint8_t* aad, uint8_t aadLen, const uint8_t* tag, uint8_t tagLen);\n\n\t/**\n\t  * @brief Starts first stage of Diffie Hellman key agreement algorithm\n\t  */\n\tvoid getDH1 ();\n\n\t/**\n\t  * @brief Starts second stage of Diffie Hellman key agreement algorithm and calculate shares key\n\t  * @param remotePubKey Public key got from the other peer\n\t  * @return `true` if calculation worked normally, `false` otherwise.\n\t  */\n\tbool getDH2 (const uint8_t* remotePubKey);\n\n\t/**\n\t  * @brief Gets own private key used on Diffie Hellman algorithm\n\t  * @return Pointer to private key\n\t  */\n\tuint8_t* getPrivDHKey () {\n\t\treturn privateDHKey;\n\t}\n\n\t/**\n\t  * @brief Gets own public key used on Diffie Hellman algorithm\n\t  * @return Pointer to public key\n\t  */\n\tuint8_t* getPubDHKey () {\n\t\treturn publicDHKey;\n\t}\n\nprotected:\n\tuint8_t privateDHKey[KEY_LENGTH]; ///< @brief Temporary private key store used during key agreement\n\tuint8_t publicDHKey[KEY_LENGTH];  ///< @brief Temporary public key store used during key agreement\n};\n\nextern CryptModule Crypto; ///< @brief Singleton Crypto class instance\n\n#endif\n\n"
  },
  {
    "path": "src/espnow_hal.cpp",
    "content": "/**\n  * @file espnow_hal.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms\n  */\n\n#include \"espnow_hal.h\"\nextern \"C\" {\n#ifdef ESP8266\n#include <espnow.h>\n#elif defined ESP32\n#include <esp_now.h>\n#include <esp_wifi.h>\n#endif\n}\n\ntypedef struct {\n    uint16_t frame_head;\n    uint16_t duration;\n    uint8_t destination_address[6];\n    uint8_t source_address[6];\n    uint8_t broadcast_address[6];\n    uint16_t sequence_control;\n\n    uint8_t category_code;\n    uint8_t organization_identifier[3]; // 0x18fe34\n    uint8_t random_values[4];\n    struct {\n        uint8_t element_id;                 // 0xdd\n        uint8_t lenght;                     //\n        uint8_t organization_identifier[3]; // 0x18fe34\n        uint8_t type;                       // 4\n        uint8_t version;\n        uint8_t body[0];\n    } vendor_specific_content;\n} __attribute__ ((packed)) espnow_frame_format_t;\n\n#ifdef ESP8266\n\ntypedef struct {\n    signed rssi : 8;\n    unsigned rate : 4;\n    unsigned is_group : 1;\n    unsigned : 1;\n    unsigned sig_mode : 2;\n    unsigned legacy_length : 12;\n    unsigned damatch0 : 1;\n    unsigned damatch1 : 1;\n    unsigned bssidmatch0 : 1;\n    unsigned bssidmatch1 : 1;\n    unsigned MCS : 7;\n    unsigned CWB : 1;\n    unsigned HT_length : 16;\n    unsigned Smoothing : 1;\n    unsigned Not_Sounding : 1;\n    unsigned : 1;\n    unsigned Aggregation : 1;\n    unsigned STBC : 2;\n    unsigned FEC_CODING : 1;\n    unsigned SGI : 1;\n    unsigned rxend_state : 8;\n    unsigned ampdu_cnt : 8;\n    unsigned channel : 4;\n    unsigned : 12;\n} wifi_pkt_rx_ctrl_t;\n\ntypedef struct {\n    wifi_pkt_rx_ctrl_t rx_ctrl;\n    uint8_t payload[0]; /* ieee80211 packet buff */\n} wifi_promiscuous_pkt_t;\n#endif\n\nEspnow_halClass Espnow_hal;\n\npeerType_t _peerType;\n\nvoid Espnow_halClass::initComms (peerType_t peerType) {\n\tif (esp_now_init ()) {\n\t\tESP.restart ();\n\t\tdelay (1);\n\t}\n\tif (peerType == COMM_NODE) {\n#ifdef ESP8266\n\t\tesp_now_set_self_role (ESP_NOW_ROLE_CONTROLLER);\n\t\tesp_now_add_peer (gateway, ESP_NOW_ROLE_SLAVE, channel, NULL, 0);\n#elif defined ESP32\n\t\t// esp_now_peer_info_t networkGw;\n\t\t// memcpy (networkGw.peer_addr, gateway, COMMS_HAL_ADDR_LEN);\n\t\t// networkGw.channel = channel;\n        // networkGw.ifidx = WIFI_IF_STA;\n\t\t// networkGw.encrypt = false;\n        //esp_err_t result = esp_now_add_peer (&networkGw);\n\t\t//DEBUG_INFO (\"Gateway peer Added in channel %d. Result = %s\", channel, esp_err_to_name (result));\n\t\tDEBUG_DBG (\"WIFI channel is %d\", WiFi.channel ());\n#endif\n\t}\n#ifdef ESP8266\n\telse {\n\t\tesp_now_set_self_role (ESP_NOW_ROLE_SLAVE);\n\t}\n#endif\n\n\tesp_now_register_recv_cb (reinterpret_cast<esp_now_recv_cb_t>(rx_cb));\n    esp_now_register_send_cb (reinterpret_cast<esp_now_send_cb_t>(tx_cb));\n\n#ifdef ESP32\n    xTaskCreateUniversal (runHandle, \"espnow_loop\", 2048, NULL, 1, &espnowLoopTask, CONFIG_ARDUINO_RUNNING_CORE);\n#else\n    os_timer_setfn (&espnowLoopTask, runHandle, NULL);\n    os_timer_arm (&espnowLoopTask, 20, true);\n    // timer1_attachInterrupt (runHandle);\n    // timer1_enable (TIM_DIV16, TIM_EDGE, TIM_LOOP);\n    // timer1_write (25000); //5000 us\n#endif\n}\n\nvoid ICACHE_FLASH_ATTR Espnow_halClass::rx_cb (uint8_t* mac_addr, uint8_t* data, uint8_t len) {\n    //espnow_frame_format_t* espnow_data = (espnow_frame_format_t*)(data - sizeof (espnow_frame_format_t));\n    wifi_promiscuous_pkt_t* promiscuous_pkt = (wifi_promiscuous_pkt_t*)(data - sizeof (wifi_pkt_rx_ctrl_t) - sizeof (espnow_frame_format_t));\n    wifi_pkt_rx_ctrl_t* rx_ctrl = &promiscuous_pkt->rx_ctrl;\n    \n    if (Espnow_hal.dataRcvd) {\n        Espnow_hal.dataRcvd (mac_addr, data, len, rx_ctrl->rssi - 98); // rssi should be in dBm but it has added almost 100 dB. Do not know why\n\t}\n}\n\nvoid ICACHE_FLASH_ATTR Espnow_halClass::tx_cb (uint8_t* mac_addr, uint8_t status) {\n    Espnow_hal.readyToSend = true;\n    DEBUG_DBG (\"Ready to send: true\");\n\tif (Espnow_hal.sentResult) {\n\t\tEspnow_hal.sentResult (mac_addr, status);\n\t}\n}\n\nvoid Espnow_halClass::begin (uint8_t* gateway, uint8_t channel, peerType_t peerType) {\n\t_ownPeerType = peerType;\n\t_peerType = peerType;\n\tDEBUG_INFO (\"Starting ESP-NOW as %s\", _peerType == COMM_GATEWAY ? \"gateway\" : \"node\");\n\tif (peerType == COMM_NODE) {\n\t\tDEBUG_DBG (\"Gateway address is \" MACSTR, MAC2STR (gateway));\n\t\tmemcpy (this->gateway, gateway, COMMS_HAL_ADDR_LEN);\n\t\tthis->channel = channel;\n\t}\n\tinitComms (peerType);\n\tif (_ownPeerType == COMM_NODE) {\n\t\taddPeer (BROADCAST_ADDRESS);\n\t}\n}\n\nbool Espnow_halClass::addPeer (const uint8_t* da) {\n#ifdef ESP32\n\tesp_now_peer_info_t peer;\n\tmemcpy (peer.peer_addr, da, COMMS_HAL_ADDR_LEN);\n\tuint8_t ch;\n\twifi_second_chan_t secondCh;\n\tesp_wifi_get_channel (&ch, &secondCh);\n\tpeer.channel = ch;\n    if (_ownPeerType == COMM_NODE) {\n        peer.ifidx = WIFI_IF_STA;\n    } else {\n        peer.ifidx = WIFI_IF_AP;\n    }\n\tpeer.encrypt = false;\n\tesp_err_t error = esp_now_add_peer (&peer);\n\tDEBUG_DBG (\"Peer %s added on channel %u. Result 0x%X %s\", mac2str (da), ch, error, esp_err_to_name (error));\n\treturn error == ESP_OK;\n#else \n\treturn true;\n#endif\n}\n\nvoid Espnow_halClass::stop () {\n    DEBUG_INFO (\"-------------> ESP-NOW STOP\");\n\tesp_now_unregister_recv_cb ();\n    esp_now_unregister_send_cb ();\n    esp_now_deinit ();\n}\n\nint32_t Espnow_halClass::send (uint8_t* da, uint8_t* data, int len) {\n    comms_queue_item_t message;\n\n    if (!da || !data || !len) {\n        DEBUG_WARN (\"Parameters error\");\n        return -1;\n    }\n    \n    if (len > MAX_MESSAGE_LENGTH) {\n        DEBUG_WARN (\"Length error\");\n        return -1;\n    }\n\n    if (out_queue.size () >= COMMS_QUEUE_SIZE) {\n        out_queue.pop ();\n    }\n\n    memcpy (message.dstAddress, da, ENIGMAIOT_ADDR_LEN);\n    message.payload_len = len;\n    memcpy (message.payload, data, len);\n    \n    if (out_queue.push (&message)) {\n        DEBUG_DBG (\"%d Comms messages queued. Type: 0x%02X Len: %d\", out_queue.size (), data[0], len);\n        return 0;\n    } else {\n        DEBUG_WARN (\"Error queuing Comms message 0x%02X to %s\", data[0], mac2str (da));\n        return -1;\n    }\n}\n\ncomms_queue_item_t* Espnow_halClass::getCommsQueue () {\n    if (out_queue.size ()) {\n        DEBUG_DBG (\"Comms message got from queue\");\n        return out_queue.front ();\n    }\n    return nullptr;\n}\n\nvoid Espnow_halClass::popCommsQueue () {\n    if (out_queue.size ()) {\n        comms_queue_item_t* message;\n\n        message = out_queue.front ();\n        if (message) {\n            message->payload_len = 0;\n        }\n        out_queue.pop ();\n        DEBUG_DBG (\"Comms message pop. Queue size %d\", out_queue.size ());\n    }\n}\n\nint32_t Espnow_halClass::sendEspNowMessage (comms_queue_item_t* message) {\n    int32_t error;\n\n    if (!message) {\n        return -1;\n    }\n    if (!(message->payload_len) || (message->payload_len > MAX_MESSAGE_LENGTH)) {\n        return -1;\n    }\n    \n\tDEBUG_DBG (\"ESP-NOW message to %s\", mac2str(message->dstAddress));\n#ifdef ESP32\n\t//if (_ownPeerType == COMM_GATEWAY) {\n        addPeer (message->dstAddress);\n        DEBUG_DBG (\"Peer added\");\n    //}\n#endif\n\n    DEBUG_DBG (\"Ready to send: false\");\n    readyToSend = false;\n    error = esp_now_send (message->dstAddress, message->payload, message->payload_len);\n#ifdef ESP32\n    DEBUG_DBG (\"esp now send result = %s\", esp_err_to_name(error));\n\t//if (_ownPeerType == COMM_GATEWAY) {\n        error = esp_now_del_peer (message->dstAddress); // TODO: test\n        DEBUG_DBG (\"Peer deleted. Result %s\", esp_err_to_name(error));\n\t//}\n#endif\n\treturn error;\n}\n\nvoid Espnow_halClass::onDataRcvd (comms_hal_rcvd_data dataRcvd) {\n\tthis->dataRcvd = dataRcvd;\n}\n\nvoid Espnow_halClass::onDataSent (comms_hal_sent_data sentResult) {\n\tthis->sentResult = sentResult;\n}\n\nvoid Espnow_halClass::handle () {\n    if (readyToSend) {\n        //DEBUG_WARN (\"Process queue: Elements: %d\", out_queue.size ());\n        if (!out_queue.empty ()) {\n            comms_queue_item_t* message;\n            message = getCommsQueue ();\n            if (message) {\n                if (!sendEspNowMessage (message)) {\n                    DEBUG_DBG (\"Message to %s sent. Type: 0x%02X. Len: %u\", mac2str (message->dstAddress), (message->payload)[0], message->payload_len);\n                } else {\n                    DEBUG_WARN (\"Error sendign message to %s. Type: 0x%02X. Len: %u\", mac2str (message->dstAddress), (message->payload)[0], message->payload_len);\n                }\n                popCommsQueue ();\n            }\n        }\n    }\n}\n\nvoid Espnow_halClass::runHandle (void* param) {\n#ifdef ESP32\n    for (;;) {\n#endif\n        Espnow_hal.handle ();\n#ifdef ESP32\n        vTaskDelay (1 / portTICK_PERIOD_MS);\n    }\n#endif\n}\n"
  },
  {
    "path": "src/espnow_hal.h",
    "content": "/**\n  * @file espnow_hal.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief ESP-NOW communication system abstraction layer. To be used on ESP8266 or ESP32 platforms\n  */\n\n#ifndef _ESPNOW_HAL_h\n#define _ESPNOW_HAL_h\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n\n#if defined(ESP8266)\n#include <ESP8266WiFi.h>\n#elif defined(ESP32)\n#include <WiFi.h>\n#include <esp_now.h>\n#endif\n#include \"Comms_hal.h\"\n#include \"helperFunctions.h\"\n#include \"EnigmaIOTRingBuffer.h\"\n\n/**\n  * @brief Definition for ESP-NOW hardware abstraction layer\n  */\nclass Espnow_halClass : public Comms_halClass {\npublic:\n\tstatic const size_t COMMS_HAL_MAX_MESSAGE_LENGTH = 250; ///< @brief Maximum message length for ESP-NOW\n\tstatic const uint8_t COMMS_HAL_ADDR_LEN = 6; ///< @brief Address length for ESP-NOW. Correspond to mac address\n\nprotected:\n\n    EnigmaIOTRingBuffer<comms_queue_item_t> out_queue;\n    bool readyToSend = true;\n#ifdef ESP32\n    TaskHandle_t espnowLoopTask;\n#else // ESP8266\n    ETSTimer espnowLoopTask;\n#endif\n\n\t/**\n\t  * @brief Communication subsistem initialization\n\t  * @param peerType Role that peer plays into the system, sensor node or gateway.\n\t  */\n\tvoid initComms (peerType_t peerType) override;\n\n\t/**\n\t  * @brief Adds a peer to esp-now peer list\n\t  * @param da Peer address to be added to peer list\n\t  */\n    bool addPeer (const uint8_t* da);\n\n\t/**\n\t  * @brief Function that processes incoming messages and passes them to upper layer\n\t  * @param mac_addr Destination address to send the message to\n\t  * @param data Data buffer that contain the message to be sent\n\t  * @param len Data length in number of bytes\n\t  */\n\tstatic void ICACHE_FLASH_ATTR rx_cb (uint8_t* mac_addr, uint8_t* data, uint8_t len);\n\n\t/**\n\t  * @brief Function that gets sending status\n\t  * @param mac_addr Destination address to send the message to\n\t  * @param status Sending status\n\t  */\n    static void ICACHE_FLASH_ATTR tx_cb (uint8_t* mac_addr, uint8_t status);\n\n    int32_t sendEspNowMessage (comms_queue_item_t* message);\n    comms_queue_item_t* getCommsQueue ();\n    void popCommsQueue ();\n\npublic:\n    /**\n     * @brief Class constructor\n     */\n    Espnow_halClass () :\n        out_queue (COMMS_QUEUE_SIZE) {}\n\n    \n   /**\n\t * @brief Setup communication environment and establish the connection from node to gateway\n\t * @param gateway Address of gateway. It may be `NULL` in case this is used in the own gateway\n\t * @param channel Establishes a channel for the communication. Its use depends on actual communications subsystem\n\t * @param peerType Role that peer plays into the system, sensor node or gateway.\n\t */\n    void begin (uint8_t* gateway, uint8_t channel = 0, peerType_t peerType = COMM_NODE) override;\n\n\t/**\n\t * @brief Terminates communication and closes all connectrions\n\t */\n\tvoid stop () override;\n\n\t/**\n\t  * @brief Sends data to the other peer\n\t  * @param da Destination address to send the message to\n\t  * @param data Data buffer that contain the message to be sent\n\t  * @param len Data length in number of bytes\n\t  * @return Returns sending status. 0 for success, 1 to indicate an error.\n\t  */\n    int32_t send (uint8_t* da, uint8_t* data, int len) override;\n\n\t/**\n\t  * @brief Attach a callback function to be run on every received message\n\t  * @param dataRcvd Pointer to the callback function\n\t  */\n    void onDataRcvd (comms_hal_rcvd_data dataRcvd) override;\n\n\t/**\n\t  * @brief Attach a callback function to be run after sending a message to receive its status\n\t  * @param dataRcvd Pointer to the callback function\n\t  */\n    void onDataSent (comms_hal_sent_data dataRcvd) override;\n\n\t/**\n\t  * @brief Get address length used on ESP-NOW subsystem\n\t  * @return Always returns the sice of 802.11 MAC address, equals to 6\n\t  */\n    uint8_t getAddressLength () override {\n\t\treturn COMMS_HAL_ADDR_LEN;\n\t}\n\n\t/**\n\t  * @brief Get maximum message length on ESP-NOW subsystem\n\t  * @return Always returns a value equal to 250\n\t  */\n\tsize_t getMaxMessageLength () {\n\t\treturn COMMS_HAL_MAX_MESSAGE_LENGTH;\n    }\n\n    /**\n      * @brief Enables or disables transmission of queued messages. Used to disable communication during wifi scan\n      * @param enable `true` to enable transmission, `false` to disable it\n      */\n    void enableTransmit (bool enable) override {\n        DEBUG_DBG (\"Send esp-now task %s\", enable ? \"enabled\" : \"disabled\");\n        if (enable) {\n#ifdef ESP8266\n            os_timer_arm (&espnowLoopTask, 20, true);\n            //timer1_enable (TIM_DIV16, TIM_EDGE, TIM_LOOP);\n#else\n            if (espnowLoopTask) {\n                vTaskResume (espnowLoopTask);\n            }\n#endif\n        } else {\n#ifdef ESP8266\n            os_timer_disarm (&espnowLoopTask);\n            //timer1_disable ();\n#else\n            if (espnowLoopTask) {\n                vTaskSuspend (espnowLoopTask);\n            }\n#endif\n        }\n    } \n\n    /**\n      * @brief Sends next message in the queue\n      */\n    void handle () override;\n\n    /**\n      * @brief Static function that calls handle inside task\n      */\n    static void runHandle (void* param);\n\n};\n\nextern Espnow_halClass Espnow_hal; ///< @brief Singleton instance of ESP-NOW class\n\n#endif\n\n"
  },
  {
    "path": "src/haBinarySensor.cpp",
    "content": "/**\n  * @file haBinarySensor.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Home Assistant binary sensor integration \n  */\n\n#include \"haBinarySensor.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\nvoid HABinarySensor::setDeviceClass (haBinarySensorClass_t devClass) {\n    if (devClass > bs_none) {\n        // DEBUG_WARN (\"Set device class to %d\", devClass);\n        (*entityConfig)[ha_device_class] = devClass;\n    }\n}\n\nvoid HABinarySensor::setPayloadOn (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_payload_on] = payload;\n    }\n}\n\nvoid HABinarySensor::setPayloadOff (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_payload_off] = payload;\n    }\n}\n\nvoid HABinarySensor::setPayloadOn (int payload) {\n    (*entityConfig)[ha_payload_on] = payload;\n}\n\nvoid HABinarySensor::setPayloadOff (int payload) {\n    (*entityConfig)[ha_payload_off] = payload;\n}\n\nvoid HABinarySensor::setValueField (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_value_key] = payload;\n    }\n}\n\nvoid HABinarySensor::setValueTemplate (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_value_template] = payload;\n    }\n}\n\nvoid HABinarySensor::setOffDelay (uint payload) {\n    (*entityConfig)[ha_off_delay] = payload;\n}\n\n/* Discovery JSON template for binary sensor\n{\n  \"pl_on\":<cmd_payload_on>,\n  \"pl_off\":<cmd_payload_off>,\n  \"val\":<value_field>,\n  \"exp_aft\":<expire_time>,\n  \"dev_cla\":<device_class>\n  \"nmsfx\":<name_suffix>\n}\n\n{\n  \"name\":<node_name>_<name_suffix>,\n  \"unique_id\":<node_name>_<name_suffix>,\n  \"device_class\":<device_class>,\n  \"state_topic\":\"<network_name>/<node_name>/data\",\n  \"payload_on\":<cmd_payload_on>,\n  \"payload_off\":<cmd_payload_off>,\n  \"value_template\":\"{{value_json.<value_field>}}\",\n  \"expire_after\":<expire_time>\n}\n*/\n\nsize_t HABinarySensor::getDiscoveryJson (char* buffer, size_t buflen, const char* nodeName, const char* networkName, DynamicJsonDocument* inputJSON) {\n    //DynamicJsonDocument inputJSON (1024);\n    DynamicJsonDocument outputJSON (1024);\n\n    //deserializeMsgPack (inputJSON, msgPack, len);\n\n    if (!nodeName || !networkName || !inputJSON /*!msgPack || !len*/) {\n        DEBUG_WARN (\"Whrong parameters\");\n        return 0;\n    }\n\n    if (inputJSON->containsKey (ha_name_sufix)) {\n        outputJSON[\"name\"] = String (nodeName) + \"_\" + (*inputJSON)[ha_name_sufix].as<String> ();\n    } else {\n        outputJSON[\"name\"] = nodeName;    \n    }\n    if (inputJSON->containsKey (ha_name_sufix)) {\n        outputJSON[\"unique_id\"] = String (nodeName) + \"_\" + (*inputJSON)[ha_name_sufix].as<String> ();\n    } else {\n        outputJSON[\"unique_id\"] = nodeName;\n    }\n    outputJSON[\"state_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n    if (inputJSON->containsKey (ha_device_class)) {\n        outputJSON[\"device_class\"] = deviceClassStr ((*inputJSON)[ha_device_class]);\n    }\n    if (inputJSON->containsKey (ha_payload_on)) {\n        outputJSON[\"payload_on\"] = (*inputJSON)[ha_payload_on];\n    }\n    if (inputJSON->containsKey (ha_payload_off)) {\n        outputJSON[\"payload_off\"] = (*inputJSON)[ha_payload_off];\n    }\n    if (inputJSON->containsKey (ha_value_template)) {\n        String templ = ((*inputJSON)[ha_value_template]).as<String> ();\n        templ.replace (\"***\", nodeName);\n        outputJSON[\"value_template\"].set<String> (templ);\n    } else if (inputJSON->containsKey (ha_value_key) && (*inputJSON)[ha_value_key].is<String> ()) {\n        outputJSON[\"value_template\"] = String (\"{{value_json.\") + (*inputJSON)[ha_value_key].as<String> () + String (\"}}\");\n    } else {\n        outputJSON[\"value_template\"] = \"{{value_json.value}}\";\n    }\n    if (inputJSON->containsKey (ha_expiration) && (*inputJSON)[ha_expiration].is<int> ()) {\n        outputJSON[\"expire_after\"] = (*inputJSON)[ha_expiration].as<int> ();\n    }\n    if (inputJSON->containsKey (ha_off_delay) && (*inputJSON)[ha_off_delay].is<int> ()) {\n        outputJSON[\"off_delay\"] = (*inputJSON)[ha_off_delay].as<int> ();\n    }\n    if (inputJSON->containsKey (ha_allow_attrib) && (*inputJSON)[ha_allow_attrib].as<bool> ()) {\n        outputJSON[\"json_attributes_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n        outputJSON[\"json_attributes_template\"] = \"{{value_json | tojson}}\";\n    }\n\n    size_t jsonLen = measureJson (outputJSON);\n\n    if (jsonLen > buflen) {\n        DEBUG_WARN (\"Too small buffer. Required %u Has %u\", jsonLen, buflen);\n        return 0;\n    }\n\n    //buffer[jsonLen - 1] = '\\0';\n    serializeJson (outputJSON, buffer, 1024);\n\n    return jsonLen;\n}\n\nString HABinarySensor::deviceClassStr (haBinarySensorClass_t sensorClass) {\n    switch (sensorClass) {\n    case bs_battery:\n        return \"battery\";\n    case bs_battery_charging:\n        return \"battery_charging\";\n    case bs_cold:\n        return \"cold\";\n    case bs_connectivity:\n        return \"connectivity\";\n    case bs_door:\n        return \"door\";\n    case bs_garage_door:\n        return \"garage_door\";\n    case bs_gas:\n        return \"gas\";\n    case bs_heat:\n        return \"heat\";\n    case bs_light:\n        return \"light\";\n    case bs_lock:\n        return \"lock\";\n    case bs_moisture:\n        return \"moisture\";\n    case bs_motion:\n        return \"motion\";\n    case bs_moving:\n        return \"moving\";\n    case bs_occupancy:\n        return \"occupancy\";\n    case bs_opening:\n        return \"opening\";\n    case bs_plug:\n        return \"plug\";\n    case bs_power:\n        return \"power\";\n    case bs_presence:\n        return \"presence\";\n    case bs_problem:\n        return \"problem\";\n    case bs_safety:\n        return \"safety\";\n    case bs_smoke:\n        return \"smoke\";\n    case bs_sound:\n        return \"sound\";\n    case bs_vibration:\n        return \"vibration\";\n    case bs_window:\n        return \"window\";\n    default:\n        return \"\";\n    }\n}\n#endif"
  },
  {
    "path": "src/haBinarySensor.h",
    "content": "/**\n  * @file haBinarySensor.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Home Assistant binary sensor integration \n  */\n\n#ifndef _BINARY_SENSOR_h\n#define _BINARY_SENSOR_h\n\n#include \"haEntity.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\n\n/**\n * The mqtt binary sensor platform uses an MQTT message received to set the binary sensor’s state to on or off.\n * The state will be updated only after a new message is published on state_topic matching payload_on or payload_off.\n * If these messages are published with the retain flag set, the binary sensor will receive an instant state update\n * after subscription and Home Assistant will display the correct state on startup. Otherwise, the initial state\n * displayed in Home Assistant will be unknown.\n *\n * Stateless devices such as buttons, remote controls etc are better represented by MQTT device triggers than by binary sensors.\n *\n * https://www.home-assistant.io/integrations/binary_sensor.mqtt/\n *\n * An example of binary sensor discovery message may be like this:\n *\n * Topic:\n *    homeassistant/binary_sensor/thermostat/config\n *\n * Payload:\n *\n * {\n *   \"name\":\"thermostat\",   // string (optional, default: MQTT Binary Sensor) The name of the binary sensor.\n *   \"unique_id\":\"thermostat\",   // string (optional) An ID that uniquely identifies this sensor.\n *                               // If two sensors have the same unique ID, Home Assistant will raise an exception.\n *   \"state_topic\":\"EnigmaIOT/thermostat/data\",    // string REQUIRED. The MQTT topic subscribed to receive sensor’s state.\n *   \"payload_on\":\"ON\",  // string (optional, default: ON) The string that represents the on state.\n *                       // It will be compared to the message in the state_topic (see value_template for details)\n *   \"payload_off\":\"OFF\",  // string (optional, default: OFF) The string that represents the off state.\n *                         // It will be compared to the message in the state_topic (see value_template for details)\n *   \"value_template\":\"{{value_json.activation}}\",  // Defines a template that returns a string to be compared to payload_on/payload_off\n *                                                  // or an empty string, in which case the MQTT message will be removed.\n *                                                  // Available variables: entity_id.\n *                                                  // Remove this option when ‘payload_on’ and ‘payload_off’ are sufficient to match\n *                                                  // your payloads (i.e no pre-processing of original message is required).\n *   \"expire_after\":30,  // Defines the number of seconds after the sensor’s state expires, if it’s not updated.\n *                       // After expiry, the sensor’s state becomes unavailable.\n *   \"device_class\":\"heat\"  // Sets the class of the device, changing the device state and icon that is displayed on the frontend.\n * }\n * \n * Template message for binary sensor is this\n *\n *  Topic:\n *    homeassistant/binary_sensor/<node_name>/config\n *\n * Payload\n * {\n *   \"name\":<node_name>_<name_suffix>,\n *   \"unique_id\":<node_name>_<name_suffix>,\n *   \"device_class\":<device_class>,\n *   \"state_topic\":\"<network_name>/<node_name>/data\",\n *   \"payload_on\":<cmd_payload_on>,\n *   \"payload_off\":<cmd_payload_off>,\n *   \"value_template\":\"{{value_json.<value_field>}}\",\n *   \"expire_after\":<expire_time>\n * }\n *\n * Message template to gateway is like this\n *\n * {\n *   \"pl_on\":<cmd_payload_on>,\n *   \"pl_off\":<cmd_payload_off>,\n *   \"val\":<value_field>,\n *   \"exp_aft\":<expire_time>,\n *   \"dev_cla\":<device_class>,\n *   \"nmsfx\":<name_suffix>\n * }\n *\n *  If any of the optional values (like \"pl_on\" or \"pl_off\") is not set its key will not be sent into message\n */\n\nclass HABinarySensor : public HAEntity {\npublic:\n    /**\n     * @brief Binary sensor constructor\n     */\n    HABinarySensor () {\n        capacity = JSON_OBJECT_SIZE (10) + 250;\n        entityConfig = new DynamicJsonDocument (capacity);\n        deviceType = BINARY_SENSOR;\n        (*entityConfig)[ha_device_type] = deviceType;\n    };\n\n    /**\n     * @brief Define binary sensor class as `haBinarySensorClass_t`\n     * @param devClass Device class\n     */\n    void setDeviceClass (haBinarySensorClass_t devClass);\n    \n    /**\n     * @brief Defines the string that represents the **on state**. It will be compared to the message in the **state_topic** (see value_template for details)\n     *          https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_on\n     * @param payload ON state string\n     */\n    void setPayloadOn (const char* payload);\n\n    /**\n     * @brief Defines the string that represents the **off state**. It will be compared to the message in the **state_topic** (see value_template for details)\n     *          https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_off\n     * @param payload OFF state string\n     */\n    void setPayloadOff (const char* payload);\n\n    /**\n     * @brief Defines a number that represents the **on state**. It will be compared to the message in the **state_topic** (see value_template for details)\n     *          https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_on\n     * @param payload ON state value\n     */\n    void setPayloadOn (int payload);\n\n    /**\n     * @brief Defines a number that represents the **off state**. It will be compared to the message in the **state_topic** (see value_template for details)\n     *          https://www.home-assistant.io/integrations/binary_sensor.mqtt/#payload_off\n     * @param payload OFF state value\n     */\n    void setPayloadOff (int payload);\n\n    /**\n     * @brief Defines a template that returns a string to be compared to payload_on/payload_off or an empty string, in which case the MQTT message will be removed.\n     *          Available variables: entity_id. Remove this option when ‘payload_on’ and ‘payload_off’ are sufficient to match your payloads (i.e no pre-processing of original message is required)\n     *          When setting this, `setValueTemplate ()` should not be called\n     *          https://www.home-assistant.io/integrations/binary_sensor.mqtt/#value_template\n     * @param payload ON state value\n     */\n    void setValueField (const char* payload);\n\n    /**\n     * @brief Defines a template that defines binary sensor value. When setting this you should not call `setValueField ()`\n     *          https://www.home-assistant.io/integrations/binary_sensor.mqtt/#value_template\n     * @param payload Value template definition\n     */\n    void setValueTemplate (const char* payload);\n\n    /**\n     * @brief For sensors that only send on state updates (like PIRs), this sets a delay in seconds after which the sensor’s state will be updated back to off.\n     *          https://www.home-assistant.io/integrations/binary_sensor.mqtt/#off_delay\n     * @param payload Off delay in seconds\n     */\n    void setOffDelay (uint payload);\n\n   \n    /**\n     * @brief Allows Gateway to get Home Assistant discovery message using Binary Sensor template\n     * @param buffer Buffer to hold message string\n     * @param buflen Buffer size\n     * @param nodeName Originating node name\n     * @param networkName EnigmaIOT network name\n     * @param inputJSON JSON object sent by node with needed data to fill template in\n     * @return Discovery message payload\n     */\n    static size_t getDiscoveryJson (char* buffer, size_t buflen, const char* nodeName, const char* networkName, DynamicJsonDocument* inputJSON);\n\n    /**\n     * @brief Gets binary sensor class name from `haBinarySensorClass_t`\n     *          https://www.home-assistant.io/integrations/binary_sensor/#device-class\n     * @param sensorClass Binary sensor class code\n     */\n    static String deviceClassStr (haBinarySensorClass_t sensorClass);\n\n    /**\n     * @brief Defines the number of seconds after the sensor’s state expires, if it’s not updated. After expiry, the sensor’s state becomes unavailable.\n     *          https://www.home-assistant.io/integrations/binary_sensor.mqtt/#expire_after\n     * @param seconds Expiration time in seconds\n     */\n    void addExpiration (uint seconds) {\n        if (seconds > 0) {\n            (*entityConfig)[ha_expiration] = seconds;\n        }\n    }\n\n\n};\n#endif // SUPPORT_HA_DISCOVERY\n\n#endif // _BINARY_SENSOR_h"
  },
  {
    "path": "src/haCover.cpp",
    "content": "/**\n  * @file haCover.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Home Assistant cover and shade integration \n  */\n\n#include \"haCover.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\nvoid HACover::setDeviceClass (haCoverClass_t devClass) {\n    if (devClass > cover_none) {\n        // DEBUG_WARN (\"Set device class to %d\", devClass);\n        (*entityConfig)[ha_device_class] = devClass;\n    }\n}\n\nvoid HACover::setPayloadOpen (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_payload_open] = payload;\n    }\n}\n\nvoid HACover::setPayloadClose (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_payload_close] = payload;\n    }\n}\n\nvoid HACover::setPayloadStop (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_payload_stop] = payload;\n    }\n}\n\nvoid HACover::setPayloadGoto (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_payload_goto] = payload;\n    }\n}\n\nvoid HACover::setStateOpen (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_state_open] = payload;\n    }\n}\n\nvoid HACover::setStateOpening (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_state_opening] = payload;\n    }\n}\n\nvoid HACover::setStateClosed (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_state_closed] = payload;\n    }\n}\n\nvoid HACover::setStateClosing (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_state_closing] = payload;\n    }\n}\n\nvoid HACover::setStateStopped (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_state_stopped] = payload;\n    }\n}\n\n/* Discovery JSON template for Cover\n{\n    \"dev_cla\":<device_class>,\n    \"pl_cls\":<pl_cls>>,\n    \"pl_open\":<pl_open>,\n    \"pl_stop\":<pl_stop>,\n    \"pl_goto\":<pl_goto>,\n    \"pos_open\":<pos_open>,\n    \"pos_clsd\":<pos_clsd>,\n    \"set_pos_tpl\":<pl_goto>,\n    \"stat_clsd\":<stat_clsd>,\n    \"stat_closing\":<stat_closing>,\n    \"stat_open\":<stat_open>,\n    \"stat_opening\":<stat_opening>,\n    \"stat_stopped\":<stat_stopped>,\n}\n{\n    \"name\":<node_name>,\n    \"unique_id\":<node_name>,\n    \"command_topic\":<network_name>/<node_name>/set/data,\n    \"device_class\":<device_class>,\n    \"json_attributes_topic\":\"<network_name>/<node_name>/data\",\n    \"json_attributes_template\":\"{{value_json}}\",\n    \"payload_close\":\"{\\\"cmd\\\":<pl_cls>}\",\n    \"payload_open\":\"{\\\"cmd\\\":<pl_open>}\",\n    \"payload_stop\":\"{\\\"cmd\\\":<pl_stop>}\",\n    \"position_topic\":\"<network_name>/<node_name>/data\",\n    \"position_template\":\"{{value_json.pos}}\",\n    \"set_position_topic\":\"<network_name>/<node_name>/set/data,\n    \"set_position_template\":\"{\\\"cmd\\\":<pl_goto>,\\\"pos\\\":{{position|int}}}\",\n    \"state_closed\":<stat_clsd>,\n    \"state_closing\":<stat_closing>,\n    \"state_open\":<stat_open>,\n    \"state_opening\":<stat_opening>,\n    \"state_stopped\":<stat_stopped>,\n    \"state_topic\":\"<network_name>/<node_name>/data\",\n    \"value_template\":\"{{value_json.state}}\",\n}\n*/\n\nsize_t HACover::getDiscoveryJson (char* buffer, size_t buflen, const char* nodeName, const char* networkName, DynamicJsonDocument* inputJSON) {\n    //DynamicJsonDocument inputJSON (1024);\n    DynamicJsonDocument outputJSON (1300);\n\n    //deserializeMsgPack (inputJSON, msgPack, len);\n\n    if (!nodeName || !networkName || !inputJSON /*!msgPack || !len*/) {\n        DEBUG_WARN (\"Whrong parameters\");\n        return 0;\n    }\n    \n    if (inputJSON->containsKey (ha_name_sufix)) {\n        outputJSON[\"name\"] = String (nodeName) + \"_\" + (*inputJSON)[ha_name_sufix].as<String> ();\n    } else {\n        outputJSON[\"name\"] = nodeName;\n    }\n    if (inputJSON->containsKey (ha_name_sufix)) {\n        outputJSON[\"unique_id\"] = String (nodeName) + \"_\" + (*inputJSON)[ha_name_sufix].as<String> ();\n    } else {\n        outputJSON[\"unique_id\"] = nodeName;\n    }\n    outputJSON[\"command_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n    if (inputJSON->containsKey (ha_device_class)) {\n        outputJSON[\"device_class\"] = deviceClassStr ((*inputJSON)[ha_device_class]);\n    }\n    if (inputJSON->containsKey (ha_payload_close)) {\n        outputJSON[\"payload_close\"] = (*inputJSON)[ha_payload_close];\n    }\n    if (inputJSON->containsKey (ha_payload_open)) {\n        outputJSON[\"payload_open\"] = (*inputJSON)[ha_payload_open];\n    }\n    if (inputJSON->containsKey (ha_payload_stop)) {\n        outputJSON[\"payload_stop\"] = (*inputJSON)[ha_payload_stop];\n    }\n    outputJSON[\"position_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n    outputJSON[\"position_template\"] = \"{{value_json.pos}}\";\n    outputJSON[\"set_position_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/set/data\";\n    String pl_goto = \"pos\";\n    if (inputJSON->containsKey (ha_payload_goto)) {\n        pl_goto = (*inputJSON)[ha_payload_goto].as<String> ();\n    }\n    outputJSON[\"set_position_template\"]= String(\"{\\\"cmd\\\":\") + pl_goto + String(\"\\\"pos\\\":{{position|int}}}\");\n    if (inputJSON->containsKey (ha_state_closed)) {\n        outputJSON[\"state_closed\"] = (*inputJSON)[ha_state_closed];\n    }\n    if (inputJSON->containsKey (ha_state_closing)) {\n        outputJSON[\"state_closing\"] = (*inputJSON)[ha_state_closing];\n    }\n    if (inputJSON->containsKey (ha_state_open)) {\n        outputJSON[\"state_open\"] = (*inputJSON)[ha_state_open];\n    }\n    if (inputJSON->containsKey (ha_state_opening)) {\n        outputJSON[\"state_opening\"] = (*inputJSON)[ha_state_opening];\n    }\n    if (inputJSON->containsKey (ha_state_stopped)) {\n        outputJSON[\"state_stopped\"] = (*inputJSON)[ha_state_stopped];\n    }\n    outputJSON[\"state_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n    outputJSON[\"value_template\"] = \"{{value_json.state}}\";\n\n    if (inputJSON->containsKey (ha_allow_attrib) && (*inputJSON)[ha_allow_attrib].as<bool> ()) {\n        outputJSON[\"json_attributes_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n        outputJSON[\"json_attributes_template\"] = \"{{value_json | tojson}}\";\n    }\n    \n    size_t jsonLen = measureJson (outputJSON);\n\n    if (jsonLen > buflen) {\n        DEBUG_WARN (\"Too small buffer. Required %u Has %u\", jsonLen, buflen);\n        return 0;\n    }\n\n    //buffer[jsonLen - 1] = '\\0';\n    serializeJson (outputJSON, buffer, 1024);\n\n    return jsonLen;\n}\n\nString HACover::deviceClassStr (haCoverClass_t sensorClass) {\n    switch (sensorClass) {\n    case cover_awning:\n        return \"awning\";\n    case cover_blind:\n        return \"blind\";\n    case cover_curtain:\n        return \"curtain\";\n    case cover_damper:\n        return \"damper\";\n    case cover_door:\n        return \"door\";\n    case cover_garage:\n        return \"garage\";\n    case cover_gate:\n        return \"gate\";\n    case cover_shade:\n        return \"shade\";\n    case cover_shutter:\n        return \"shutter\";\n    case cover_window:\n        return \"window\";\n    default:\n        return \"\";\n    }\n}\n#endif // SUPPORT_HA_DISCOVERY"
  },
  {
    "path": "src/haCover.h",
    "content": "/**\n  * @file haCover.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Home Assistant cover and shade integration \n  */\n\n#ifndef _HA_COVER_h\n#define _HA_COVER_h\n\n#include \"haEntity.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\n/**\n * A cover entity can be in states (open, opening, closed or closing).\n * If a state_topic is configured, the entity’s state will be updated only after an MQTT message is received on\n * state_topic matching state_open, state_opening, state_closed or state_closing. For covers that only report\n * 3 states (opening, closing, stopped), a state_stopped state can be configured to indicate that the device is\n * not moving. When this payload is received on the state_topic, and a position_topic is not configured, the\n * cover will be set to state closed if its state was closing and to state open otherwise. If a position_topic\n * is set, the cover’s position will be used to set the state to either open or closed state.\n * If the cover reports its position, a position_topic can be configured for receiving the position.\n * If no state_topic is configured, the cover’s state will be set to either open or closed when a position is received.\n *\n * https://www.home-assistant.io/integrations/cover.mqtt/\n *\n * An example of cover discovery message may be like this:\n *\n * Topic:\n *    homeassistant/cover/cover-bedroom/config\n *\n * Payload:\n *\n * {\n *   \"name\":\"cover-bedroom\",  // string (optional, default: MQTT Cover) The name of the cover.\n *   \"unique_id\":\"cover-bedroom\",  // string (optional) An ID that uniquely identifies this cover. If two covers have\n *                                 //   the same unique ID, Home Assistant will raise an exception.\n *   \"command_topic\":\"EnigmaIOT/cover-bedroom/set/data\",  // string (optional) The MQTT topic to publish commands to control the cover.\n *   \"device_class\":\"shade\",  // string (optional) Sets the class of the device, changing the device state and icon that is displayed on the frontend.\n *                            //   https://www.home-assistant.io/integrations/cover/\n *   \"json_attributes_topic\":\"EnigmaIOT/cover-bedroom/data\",  // string (optional) The MQTT topic subscribed to receive a JSON dictionary\n *                                                            //   payload and then set as sensor attributes. Usage example can be found in MQTT sensor documentation\n *   \"json_attributes_template\":\"{{value_json}}\",  // template (optional) Defines a template to extract the JSON dictionary from messages received\n *                                                 // on the json_attributes_topic. Usage example can be found in MQTT sensor documentation\n *   \"payload_close\":\"{\\\"cmd\\\":\\\"dd\\\"}\",  // string (optional, default: CLOSE) The command payload that closes the cover\n *   \"payload_open\":\"{\\\"cmd\\\":\\\"uu\\\"}\",   // string (optional, default: OPEN) The command payload that opens the cover.\n *   \"payload_stop\":\"{\\\"cmd\\\":\\\"stop\\\"}\",  // string (optional, default: STOP) The command payload that stops the cover.\n *   \"position_topic\":\"EnigmaIOT/cover-bedroom/data\",  // string (optional) The MQTT topic subscribed to receive cover position messages\n *   \"position_template\":\"{{value_json.pos}}\",  // string (optional) Defines a template that can be used to extract the payload for the position_topic topic\n *   \"set_position_topic\":\"EnigmaIOT/cover-bedroom/set/data,  // string (optional) The MQTT topic to publish position commands to.\n *                                                               //  You need to set position_topic as well if you want to use position topic.\n *                                                               //  Use template if position topic wants different values than within range position_closed - position_open.\n *                                                               //  If template is not defined and position_closed != 100 and position_open != 0 then proper position\n *                                                               //  value is calculated from percentage position\n *   \"set_position_template\":\"{\\\"cmd\\\":\\\"go\\\",\\\"pos\\\":{{position|int}}}\",  // string (optional) Defines a template to define the position to be sent to the\n *                                                                            //  set_position_topic topic. Incoming position value is available for use in the template ``.\n *                                                                            //  If no template is defined, the position (0-100) will be calculated according to\n *                                                                            //  position_open and `position_closed` values\n *   \"state_closed\":\"CLOSED\"\",  // string (optional, default: closed) The payload that represents the closed state\n *   \"state_closing\":\"CLOSING\",  // string (optional, default: closing) The payload that represents the closing state\n *   \"state_open\":\"OPEN\",  // string (optional, default: open) The payload that represents the open state\n *   \"state_opening\":\"OPENING\",  // string (optional, default: opening) The payload that represents the opening state\n *   \"state_stopped\":\"STOPPED\",  // string (optional, default: stopped) The payload that represents the stopped state (for covers that do not report open/closed state)\n *   \"state_topic\":\"EnigmaIOT/cover-bedroom/data\",  //  string (optional) The MQTT topic subscribed to receive cover state messages. State topic can only read (open, opening, closed, closing or stopped) state\n *   \"value_template\":\"{{value_json.state}}\",  // string (optional) Defines a template that can be used to extract the payload for the state_topic topic\n * }\n * \n * Template message for cover is this\n *\n *  Topic:\n *    homeassistant/cover/<node_name>_<name_suffix>/config\n *\n * Payload\n * {\n *   \"name\":<node_name>_<name_suffix>,\n *   \"unique_id\":<node_name>_<name_suffix>,\n *   \"command_topic\":<network_name>/<node_name>/set/data,\n *   \"device_class\":<device_class>,\n *   \"json_attributes_topic\":\"<network_name>/<node_name>/data\",\n *   \"json_attributes_template\":\"{{value_json}}\",\n *   \"payload_close\":\"{\\\"cmd\\\":<pl_cls>}\",\n *   \"payload_open\":\"{\\\"cmd\\\":<pl_open>}\",\n *   \"payload_stop\":\"{\\\"cmd\\\":<pl_stop>}\",\n *   \"position_topic\":\"<network_name>/<node_name>/data\",\n *   \"position_template\":\"{{value_json.pos}}\",\n *   \"set_position_topic\":\"<network_name>/<node_name>/set/data,\n *   \"set_position_template\":\"{\\\"cmd\\\":<pl_goto>,\\\"pos\\\":{{position|int}}}\",\n *   \"state_closed\":<stat_clsd>,\n *   \"state_closing\":<stat_closing>,\n *   \"state_open\":<stat_open>,\n *   \"state_opening\":<stat_opening>,\n *   \"state_stopped\":<stat_stopped>,\n *   \"state_topic\":\"<network_name>/<node_name>/data\",\n *   \"value_template\":\"{{value_json.state}}\",\n * }\n *\n * Message to gateway is like following\n *\n * {\n *   \"dev_cla\":<device_class>,\n *   \"pl_cls\":<pl_cls>>,\n *   \"pl_open\":<pl_open>,\n *   \"pl_stop\":<pl_stop>,\n *   \"pl_goto\":<pl_goto>,\n *   \"pos_open\":<pos_open>,\n *   \"pos_clsd\":<pos_clsd>,\n *   \"set_pos_tpl\":<pl_goto>,\n *   \"stat_clsd\":<stat_clsd>,\n *   \"stat_closing\":<stat_closing>,\n *   \"stat_open\":<stat_open>,\n *   \"stat_opening\":<stat_opening>,\n *   \"stat_stopped\":<stat_stopped>,\n * }\n *\n */\n\nclass HACover : public HAEntity {\n\npublic:\n\n    /**\n     * @brief Cover constructor\n     */\n    HACover () {\n        capacity = JSON_OBJECT_SIZE (10) + 250;\n        entityConfig = new DynamicJsonDocument (capacity);\n        deviceType = COVER;\n        (*entityConfig)[ha_device_type] = deviceType;\n    };\n\n    /**\n     * @brief Define cover class as `haCoverClass_t`\n     * @param devClass Device class\n     */\n    void setDeviceClass (haCoverClass_t devClass);\n    \n    /**\n     * @brief The command payload that opens the cover\n     *          https://www.home-assistant.io/integrations/cover.mqtt/#payload_open\n     * @param payload Open command string\n     */\n    void setPayloadOpen (const char* payload);\n\n    /**\n     * @brief The command payload that closes the cover\n     *          https://www.home-assistant.io/integrations/cover.mqtt/#payload_close\n     * @param payload Close command string\n     */\n    void setPayloadClose (const char* payload);\n\n    /**\n     * @brief The command payload that stops the cover\n     *          https://www.home-assistant.io/integrations/cover.mqtt/#payload_stop\n     * @param payload Stop command string\n     */\n    void setPayloadStop (const char* payload);\n\n    /**\n     * @brief The command that moves the cover to specific position\n     * @param payload Go to command string\n     */\n    void setPayloadGoto (const char* payload);\n\n    /**\n     * @brief The payload that represents the open state\n     *          https://www.home-assistant.io/integrations/cover.mqtt/#state_open\n     * @param payload Open state string\n     */\n    void setStateOpen (const char* payload);\n    \n    /**\n     * @brief The payload that represents the opening state\n     *          https://www.home-assistant.io/integrations/cover.mqtt/#state_opening\n     * @param payload Opening state string\n     */\n    void setStateOpening (const char* payload);\n    \n    /**\n     * @brief The payload that represents the closed state\n     *          https://www.home-assistant.io/integrations/cover.mqtt/#state_closed\n     * @param payload Closed state string\n     */\n    void setStateClosed (const char* payload);\n    \n    /**\n     * @brief The payload that represents the closing state\n     *          https://www.home-assistant.io/integrations/cover.mqtt/#state_closing\n     * @param payload Closing state string\n     */\n    void setStateClosing (const char* payload);\n    \n    /**\n     * @brief The payload that represents the stopped state\n     *          https://www.home-assistant.io/integrations/cover.mqtt/#state_stopped\n     * @param payload Stopped state string\n     */\n    void setStateStopped (const char* payload);\n\n    /**\n     * @brief Allows Gateway to get Home Assistant discovery message using Cover template\n     * @param buffer Buffer to hold message string\n     * @param buflen Buffer size\n     * @param nodeName Originating node name\n     * @param networkName EnigmaIOT network name\n     * @param inputJSON JSON object sent by node with needed data to fill template in\n     * @return Discovery message payload\n     */\n    static size_t getDiscoveryJson (char* buffer, size_t buflen, const char* nodeName, const char* networkName, DynamicJsonDocument* inputJSON);\n\n    /**\n     * @brief Gets binary sensor class name from `haCoverClass_t`\n     *          https://www.home-assistant.io/integrations/cover.mqtt/#device_class\n     * @param sensorClass Cover class code\n     */\n    static String deviceClassStr (haCoverClass_t sensorClass);\n\n};\n\n#endif // SUPPORT_HA_DISCOVERY\n\n#endif // _HA_COVER_h"
  },
  {
    "path": "src/haEntity.h",
    "content": "/**\n  * @file haEntity.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Defines an entity for Home Assistant autodiscovery\n  *\n  *        https://www.home-assistant.io/docs/mqtt/discovery/\n  */\n\n#ifndef _HA_ENTITY_h\n#define _HA_ENTITY_h\n\n#include <Arduino.h>\n#include \"EnigmaIoTconfig.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\n#include <ArduinoJson.h>\n#include <EnigmaIOTdebug.h>\n#include <helperFunctions.h>\n\nconstexpr auto ha_device_type = \"type\";\nconstexpr auto ha_device_class = \"dev_cla\";\nconstexpr auto ha_payload_on = \"pl_on\";\nconstexpr auto ha_payload_off = \"pl_off\";\nconstexpr auto ha_value_key = \"val\";\nconstexpr auto ha_value_template = \"val_tpl\";\nconstexpr auto ha_expiration = \"exp_aft\";\nconstexpr auto ha_payload_open = \"pl_open\";\nconstexpr auto ha_payload_close = \"pl_cls\";\nconstexpr auto ha_payload_stop = \"pl_stop\";\nconstexpr auto ha_set_position_template = \"set_pos_tpl\";\nconstexpr auto ha_position_open = \"pos_open\";\nconstexpr auto ha_position_closed = \"pos_clsd\";\nconstexpr auto ha_payload_goto = \"pl_goto\"; // custom\nconstexpr auto ha_payload = \"pl\";\nconstexpr auto ha_state_open = \"stat_open\";\nconstexpr auto ha_state_opening = \"stat_opening\";\nconstexpr auto ha_state_closed = \"stat_clsd\";\nconstexpr auto ha_state_closing = \"stat_closing\";\nconstexpr auto ha_state_stopped = \"stat_stopped\";\nconstexpr auto ha_state_on = \"stat_on\";\nconstexpr auto ha_state_off = \"stat_off\";\nconstexpr auto ha_off_delay = \"off_dly\";\nconstexpr auto ha_unit_of_measurement = \"unit_of_meas\";\nconstexpr auto ha_name_sufix = \"nmsfx\";\nconstexpr auto ha_allow_attrib = \"attr\";\nconstexpr auto ha_type = \"ttype\";\nconstexpr auto ha_subtype = \"tstype\";\n\n\ntypedef enum {\n    UNDEFINED,\n    ALARM_PANEL,\n    BINARY_SENSOR,\n    CAMERA,\n    COVER,\n    DEVICE_TRACKER,\n    DEVICE_TRIGGER,\n    FAN,\n    HVAC,\n    LIGHT,\n    LOCK,\n    SCENE,\n    SENSOR,\n    SWITCH,\n    TAG_SCANNER,\n    VACUUM\n} haDeviceType_t; ///< @brief HomeAssistant entity type\n\n\ntypedef enum {\n    bs_none,             // Generic on / off.This is the defaultand doesn’t need to be set.\n    bs_battery,          // on means low,                     off means normal\n    bs_battery_charging, // on means charging,                off means not charging\n    bs_cold,             // on means cold,                    off means normal\n    bs_connectivity,     // on means connected,               off means disconnected\n    bs_door,             // on means open,                    off means closed\n    bs_garage_door,      // on means open,                    off means closed\n    bs_gas,              // on means gas detected,            off means no gas (clear)\n    bs_heat,             // on means hot,                     off means normal\n    bs_light,            // on means light detected,          off means no light\n    bs_lock,             // on means open (unlocked),         off means closed (locked)\n    bs_moisture,         // on means moisture detected (wet), off means no moisture (dry)\n    bs_motion,           // on means motion detected,         off means no motion (clear)\n    bs_moving,           // on means moving,                  off means not moving (stopped)\n    bs_occupancy,        // on means occupied,                off means not occupied (clear)\n    bs_opening,          // on means open,                    off means closed\n    bs_plug,             // on means device is plugged in,    off means device is unplugged\n    bs_power,            // on means power detected,          off means no power\n    bs_presence,         // on means home,                    off means away\n    bs_problem,          // on means problem detected,        off means no problem (OK)\n    bs_safety,           // on means unsafe,                  off means safe\n    bs_smoke,            // on means smoke detected,          off means no smoke (clear)\n    bs_sound,            // on means sound detected,          off means no sound (clear)\n    bs_vibration,        // on means vibration detected,      off means no vibration (clear)\n    bs_window            // on means open,                    off means closed\n} haBinarySensorClass_t; ///< @brief HomeAssistant Binary Sensor class https://www.home-assistant.io/integrations/binary_sensor/#device-class\n\n\ntypedef enum {\n    cover_none,       // Generic cover. This is the default and doesn’t need to be set\n    cover_awning,     // Control of an awning, such as an exterior retractable window, door, or patio cover\n    cover_blind,      // Control of blinds, which are linked slats that expand or collapse to cover an opening or may be tilted to partially covering an opening, such as window blinds\n    cover_curtain,    // Control of curtains or drapes, which is often fabric hung above a window or door that can be drawn open\n    cover_damper,     // Control of a mechanical damper that reduces airflow, sound, or light\n    cover_door,       // Control of a door or gate that provides access to an area\n    cover_garage,     // Control of a garage door that provides access to a garage\n    cover_gate,       // Control of a gate. Gates are found outside of a structure and are typically part of a fence\n    cover_shade,      // Control of shades, which are a continuous plane of material or connected cells that expanded or collapsed over an opening, such as window shades\n    cover_shutter,    // Control of shutters, which are linked slats that swing out / in to covering an opening or may be tilted to partially cover an opening, such as indoor or exterior window shutters\n    cover_window      // Control of a physical window that opens and closes or may tilt\n} haCoverClass_t; ///< @brief HomeAssistant Cover class https://www.home-assistant.io/integrations/cover/#device-class\n\ntypedef enum {\n    sensor_none,            // Generic sensor. This is the default and doesn’t need to be set.\n    sensor_battery,         // Percentage of battery that is left.\n    sensor_current,         // Current in A.\n    sensor_energy,          // Energy in Wh or kWh.\n    sensor_humidity,        // Percentage of humidity in the air.\n    sensor_illuminance,     // The current light level in lx or lm.\n    sensor_signal_strength, // Signal strength in dB or dBm.\n    sensor_temperature,     // Temperature in °C or °F.\n    sensor_power,           // Power in W or kW.\n    sensor_power_factor,    // Power factor in % .\n    sensor_pressure,        // Pressure in hPa or mbar.\n    sensor_timestamp,       // Datetime object or timestamp string (ISO 8601).\n    sensor_voltage,         // Voltage in V.\n} haSensorClass_t;  ///< @brief HomeAssistant Sensor class https://www.home-assistant.io/integrations/sensor/#device-class\n\nclass HAEntity {\nprotected:\n    size_t capacity; ///< @brief JSON object memory reservation length\n    haDeviceType_t deviceType = UNDEFINED; ///< @brief HomeAssistant entity device type\n    // uint expiration = 0; ///< @brief Entity expiration parameter\n    //char name[20]; ///< @brief Entity name\n    DynamicJsonDocument* entityConfig; ///< @brief JSON object to be sent to gateway\n\n    /**\n     * @brief Default constructor. Needed for inheritance\n     */\n    HAEntity () {}\n\npublic:\n\n    /**\n     * @brief Gets entity anounce message to be sent over EnigmaIOT message\n     * @param bufferlen Buffer length. Needed legth can be got using `measureMessage ()`\n     * @param buffer Buffer to put the payload in\n     * @return Amount of data written to buffer\n     */\n    size_t getAnounceMessage (int bufferlen, uint8_t* buffer) {\n#if DEBUG_LEVEL >= WARN\n        char* output;\n        size_t json_len = measureJsonPretty (*entityConfig) + 1;\n        output = (char*)malloc (json_len);\n        serializeJsonPretty (*entityConfig, output, json_len);\n\n        DEBUG_DBG (\"JSON message\\n%s\", output);\n        free (output);\n#endif\n\n        \n        if (!buffer) {\n            DEBUG_WARN (\"Buffer is null\");\n            return 0;\n        }\n        //message = buffer;\n        int len = measureMsgPack (*entityConfig);\n\n        if (len > MAX_DATA_PAYLOAD_LENGTH) {\n            DEBUG_WARN (\"Too long message. Reduce HA anounce options\");\n            return 0;\n        }\n\n        if (bufferlen < len) {\n            DEBUG_WARN (\"Buffer is not big enough\");\n            return 0;\n        }\n\n        len = serializeMsgPack (*entityConfig, buffer, bufferlen);\n        DEBUG_DBG (\"Msg Pack size: %u\", len);\n\n        DEBUG_VERBOSE (\"%s\", printHexBuffer (buffer, len));\n\n        if (entityConfig) {\n            delete (entityConfig);\n            entityConfig = NULL;\n            DEBUG_DBG (\"Deleted JSON\");\n        }\n\n        return len;\n    }\n    \n    /**\n     * @brief Sets name suffix. Used for multi entity nodes\n     * @param payload Name suffix\n     */\n    void setNameSufix (const char* payload) {\n       if (payload) {\n           (*entityConfig)[ha_name_sufix] = payload;\n       }\n    }\n\n    /**\n     * @brief Enables registering entity attributes as a json object\n     */\n    void allowSendAttributes () {\n        (*entityConfig)[ha_allow_attrib] = true;\n    }\n\n    /**\n     * @brief Gets needed buffer size for discovery message\n     * @return Minimum buffer size\n     */\n    size_t measureMessage () {\n        return measureMsgPack (*entityConfig) + 1;\n    }\n\n    /**\n     * @brief Gets entity type string from haDeviceType_t value\n     *        https://www.home-assistant.io/docs/mqtt/discovery/\n     * @param entityType Entity code\n     * @return Entity string\n     */\n    static String deviceTypeStr (haDeviceType_t entityType) {\n        switch (entityType) {\n        case ALARM_PANEL:\n            return \"alarm_control_panel\";\n        case BINARY_SENSOR:\n            return \"binary_sensor\";\n        case CAMERA:\n            return \"camera\";\n        case COVER:\n            return \"cover\";\n        case DEVICE_TRACKER:\n            return \"device_tracker\";\n        case DEVICE_TRIGGER:\n            return \"device_automation\";\n        case FAN:\n            return \"fan\";\n        case HVAC:\n            return \"climate\";\n        case LIGHT:\n            return \"light\";\n        case LOCK:\n            return \"lock\";\n        case SCENE:\n            return \"scene\";\n        case SENSOR:\n            return \"sensor\";\n        case SWITCH:\n            return \"switch\";\n        case TAG_SCANNER:\n            return \"tag\";\n        case VACUUM:\n            return \"vacuum\";\n        default:\n            return \"\";\n        }\n    }\n\n    /*\n        Discovery configuration topic template\n        <hass_prefix>/<device_type>/<node_name>/config\n    */\n    /**\n     * @brief Allows Gateway to get discovery message MQTT topic\n     * @param hassPrefix HomeAssistant topic prefix. Usually it is \"homeassistant\"\n     * @param nodeName Name of the node\n     * @param entityType Entity type. Used to differentiate discovery message template\n     * @param nameSuffix This is used to allow a single node to have different HomeAssistant entities. For instance, a smart switch may behave\n     *                  as a power, voltage and current sensor too.\n     * @return MQTT topic\n     */\n    static String getDiscoveryTopic (const char* hassPrefix, const char* nodeName, haDeviceType_t entityType, const char* nameSuffix = NULL) {\n        String output;\n\n        if (!hassPrefix) {\n            DEBUG_WARN (\"Empty prefix\");\n            return \"\";\n        }\n        if (!nodeName) {\n            DEBUG_WARN (\"Empty node name\");\n            return \"\";\n        }\n\n        if (nameSuffix) {\n            output = String (hassPrefix) + \"/\" + deviceTypeStr (entityType) + \"/\" + String (nodeName) + \"_\" + String(nameSuffix) + \"/config\";\n        } else {\n            output = String (hassPrefix) + \"/\" + deviceTypeStr (entityType) + \"/\" + String (nodeName) + \"/config\";        \n        }\n\n        return output;\n    }\n\n\n};\n\n#endif // SUPPORT_HA_DISCOVERY\n\n#endif // _HA_ENTITY_h"
  },
  {
    "path": "src/haSensor.cpp",
    "content": "/**\n  * @file haSensor.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Home Assistant sensor integration\n  */\n\n#include \"haSensor.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\nvoid HASensor::setDeviceClass (haSensorClass_t devClass) {\n    if (devClass > sensor_none) {\n        // DEBUG_WARN (\"Set device class to %d\", devClass);\n        (*entityConfig)[ha_device_class] = devClass;\n    }\n}\n\nvoid HASensor::setExpireTime (uint payload) {\n    if (payload) {\n        (*entityConfig)[ha_expiration] = payload;\n    }\n}\n\nvoid HASensor::setUnitOfMeasurement (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_unit_of_measurement] = payload;\n    }\n}\n\nvoid HASensor::setValueField (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_value_key] = payload;\n    }\n}\n\nvoid HASensor::setValueTemplate (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_value_template] = payload;\n    }\n}\n\n/* Discovery JSON template for binary sensor\n{\n    \"dev_cla\":<device_class>,\n    \"exp_aft\":<expire_time>,\n    \"unit_of_meas\":<unit_of_measurement>,\n    \"val\":<value_field>,\n    \"nmsfx\":<name_suffix>\n}\n{\n    \"name\":<node_name>_<name_suffix>,\n    \"unique_id\":<node_name>_<name_suffix>,\n    \"device_class\": <device_class>,\n    \"expire_after\":<expire_time>,\n    \"json_attributes_template\":\"{{value_json | tojson}}\",\n    \"json_attributes_topic\":\"<network_name>/<node_name>/data\",\n    \"state_topic\":\"<network_name>/<node_name>/data\",\n    \"unit_of_measurement\":<unit_of_measurement>,\n    \"value_template\":\"{{value_json.<value_field>}}\"\n}\n*/\n\nsize_t HASensor::getDiscoveryJson (char* buffer, size_t buflen, const char* nodeName, const char* networkName, DynamicJsonDocument* inputJSON) {\n    //DynamicJsonDocument inputJSON (1024);\n    DynamicJsonDocument outputJSON (1300);\n\n    //deserializeMsgPack (inputJSON, msgPack, len);\n\n    if (!nodeName || !networkName || !inputJSON /*!msgPack || !len*/) {\n        DEBUG_WARN (\"Whrong parameters\");\n        return 0;\n    }\n    \n    if (inputJSON->containsKey (ha_name_sufix)) {\n        outputJSON[\"name\"] = String (nodeName) + \"_\" + (*inputJSON)[ha_name_sufix].as<String> ();\n    } else {\n        outputJSON[\"name\"] = nodeName;\n    }\n    if (inputJSON->containsKey (ha_name_sufix)) {\n        outputJSON[\"unique_id\"] = String (nodeName) + \"_\" + (*inputJSON)[ha_name_sufix].as<String> ();\n    } else {\n        outputJSON[\"unique_id\"] = nodeName;\n    }\n    if (inputJSON->containsKey (ha_device_class)) {\n        outputJSON[\"device_class\"] = deviceClassStr ((*inputJSON)[ha_device_class]);\n    }\n    if (inputJSON->containsKey (ha_expiration) && (*inputJSON)[ha_expiration].is<int> ()) {\n        outputJSON[\"expire_after\"] = (*inputJSON)[ha_expiration].as<int>();\n    }\n    outputJSON[\"state_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n    if (inputJSON->containsKey (ha_unit_of_measurement)) {\n        outputJSON[\"unit_of_measurement\"] = (*inputJSON)[ha_unit_of_measurement];\n    }\n    if (inputJSON->containsKey (ha_value_template)) {\n        String templ = ((*inputJSON)[ha_value_template]).as<String> ();\n        templ.replace (\"***\", nodeName);\n        outputJSON[\"value_template\"].set<String> (templ);\n    } else if (inputJSON->containsKey (ha_value_key)) {\n        outputJSON[\"value_template\"] = String (\"{{value_json.\") + (*inputJSON)[ha_value_key].as<String> () + String (\"}}\");\n    } else {\n        outputJSON[\"value_template\"] = \"{{value_json.value}}\";\n    }\n    if (inputJSON->containsKey (ha_allow_attrib) && (*inputJSON)[ha_allow_attrib].as<bool> ()) {\n        outputJSON[\"json_attributes_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n        outputJSON[\"json_attributes_template\"] = \"{{value_json | tojson}}\";\n    }\n\n    size_t jsonLen = measureJson (outputJSON);\n\n    if (jsonLen > buflen) {\n        DEBUG_WARN (\"Too small buffer. Required %u Has %u\", jsonLen, buflen);\n        return 0;\n    }\n\n    //buffer[jsonLen - 1] = '\\0';\n    serializeJson (outputJSON, buffer, 1024);\n\n    return jsonLen;\n}\n\nString HASensor::deviceClassStr (haSensorClass_t sensorClass) {\n    switch (sensorClass) {\n    case sensor_battery:\n        return \"battery\";\n    case sensor_current:\n        return \"current\";\n    case sensor_energy:\n        return \"energy\";\n    case sensor_humidity:\n        return \"humidity\";\n    case sensor_illuminance:\n        return \"illuminance\";\n    case sensor_signal_strength:\n        return \"signal_strength\";\n    case sensor_temperature:\n        return \"temperature\";\n    case sensor_power:\n        return \"power\";\n    case sensor_power_factor:\n        return \"power_factor\";\n    case sensor_pressure:\n        return \"pressure\";\n    case sensor_timestamp:\n        return \"timestamp\";\n    case sensor_voltage:\n        return \"voltage\";\n    default:\n        return \"\";\n    }\n}\n\n#endif // SUPPORT_HA_DISCOVERY\n"
  },
  {
    "path": "src/haSensor.h",
    "content": "/**\n  * @file haSensor.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Home Assistant sensor integration\n  */\n\n#ifndef _HA_SENSOR_h\n#define _HA_SENSOR_h\n\n#include \"haEntity.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\n/**\n * This mqtt sensor platform uses the MQTT message payload as the sensor value. If messages in this state_topic are published with RETAIN flag,\n * the sensor will receive an instant update with last known value. Otherwise, the initial state will be undefined.\n *\n * https://www.home-assistant.io/integrations/sensor.mqtt/\n *\n * An example of sensor discovery message may be like this:\n *\n * Topic:\n *    homeassistant/sensor/mains_power/config\n *\n * Payload:\n *\n * {\n *    \"name\":\"mains_power\",      // string (optional, default: MQTT Sensor). The name of the MQTT sensor\n *    \"unique_id\":\"mains_power\", // string (optional) An ID that uniquely identifies this sensor. If two sensors have the same unique ID,\n *                               //    Home Assistant will raise an exception\n *    \"device_class\":\"power\",    // device_class (optional, default: None). The type/class of the sensor to set the icon in the frontend\n *                               //   https://www.home-assistant.io/integrations/sensor/#device-class\n *    \"expire_after\":300,        // integer (optional, default: 0) Defines the number of seconds after the sensor’s state expires,\n *                               //   if it’s not updated. After expiry, the sensor’s state becomes unavailable\n *    \"json_attributes_template\":\"{{value_json | tojson}}\", // template (optional) Defines a template to extract the JSON dictionary\n *                                                          //   from messages received on the json_attributes_topic\n *    \"json_attributes_topic\":\"EnigmaIOT/mains/data\",       // string (optional) The MQTT topic subscribed to receive a JSON dictionary\n *                                                          //   payload and then set as sensor attributes. Implies force_update of the\n *                                                          //   current sensor state when a message is received on this topic\n *    \"state_topic\":\"EnigmaIOT/mains/data\",  // string REQUIRED. The MQTT topic subscribed to receive sensor values\n *    \"unit_of_measurement\":\"W\"\",            // string (optional). Defines the units of measurement of the sensor, if any\n *    \"value_template\":\"{{value_json.pow}}\"  // template (optional). Defines a template to extract the value\n * }\n *\n * Template message for sensor is this\n *\n *  Topic:\n *    homeassistant/sensor/<node_name>_<name_suffix>/config\n *\n * Payload\n *\n * ```\n *  {\n *    \"name\":<node_name>_<name_suffix>,\n *    \"unique_id\":<node_name>_<name_suffix>,\n *    \"device_class\": <device_class>,\n *    \"expire_after\":<expire_time>,\n *    \"json_attributes_template\":\"{{value_json | tojson}}\",\n *    \"json_attributes_topic\":\"<network_name>/<node_name>/data\",\n *    \"state_topic\":\"<network_name>/<node_name>/data\",\n *    \"unit_of_measurement\":<unit_of_measurement>,\n *    \"value_template\":\"{{value_json.<value_field>}}\"\n * }\n * ```\n *\n * Message to gateway is like following\n *\n * ```\n * {\n *    \"dev_cla\":<device_class>,\n *    \"exp_aft\":<expire_time>,\n *    \"unit_of_meas\":<unit_of_measurement>,\n *    \"val\":<value_field>,\n *    \"nmsfx\":<name_suffix>\n * }\n * ```\n */\n\nclass HASensor : public HAEntity {\n\npublic:\n    /**\n     * @brief Sensor constructor\n     */\n    HASensor () {\n        capacity = 1024; //JSON_OBJECT_SIZE (15) + 512;\n        entityConfig = new DynamicJsonDocument (capacity);\n        deviceType = SENSOR;\n        (*entityConfig)[ha_device_type] = deviceType;\n    };\n\n    /**\n     * @brief Define sensor class as `haSensorClass_t`\n     *          https://www.home-assistant.io/integrations/sensor.mqtt/#device_class\n     * @param devClass Device class\n     */\n    void setDeviceClass (haSensorClass_t devClass);\n\n    /**\n     * @brief Defines the number of seconds after the sensor’s state expires, if it’s not updated. After expiry, the sensor’s state becomes unavailable.\n     *          https://www.home-assistant.io/integrations/sensor.mqtt/#expire_after\n     * @param payload Expiration value in seconds\n     */\n    void setExpireTime (uint payload);\n\n    /**\n     * @brief Set unit of measure\n     *          https://www.home-assistant.io/integrations/sensor.mqtt/#unit_of_measurement\n     * @param payload Measure unit\n     */\n    void setUnitOfMeasurement (const char* payload);\n\n    /**\n     * @brief Defines a json key that defines sensor value. When setting this, `setValueTemplate ()` should not be called\n     *          https://www.home-assistant.io/integrations/sensor.mqtt/#value_template\n     * @param payload json key\n     */\n    void setValueField (const char* payload);\n\n    /**\n     * @brief Defines a template that defines sensor value. When setting this you should not call `setValueField ()`\n     *          https://www.home-assistant.io/integrations/sensor.mqtt/#value_template\n     * @param payload Value template definition\n     */\n    void setValueTemplate (const char* payload);\n\n    \n     /**\n     * @brief Allows Gateway to get Home Assistant discovery message using Sensor template\n     * @param buffer Buffer to hold message string\n     * @param buflen Buffer size\n     * @param nodeName Originating node name\n     * @param networkName EnigmaIOT network name\n     * @param inputJSON JSON object sent by node with needed data to fill template in\n     * @return Discovery message payload\n     */\n    static size_t getDiscoveryJson (char* buffer, size_t buflen, const char* nodeName, const char* networkName, DynamicJsonDocument* inputJSON);\n\n    /**\n     * @brief Gets sensor class name from `haSensorClass_t`\n     *          https://www.home-assistant.io/integrations/sensor.mqtt/#device_class\n     * @param sensorClass Binary sensor class code\n     */\n    static String deviceClassStr (haSensorClass_t sensorClass);\n\n};\n\n#endif // SUPPORT_HA_DISCOVERY\n\n#endif // _HA_COVER_h"
  },
  {
    "path": "src/haSwitch.cpp",
    "content": "/**\n  * @file haSwitch.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Home Assistant switch integration\n  */\n\n\n#include \"haSwitch.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\nvoid HASwitch::setPayloadOn (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_payload_on] = payload;\n    }\n}\n\nvoid HASwitch::setPayloadOff (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_payload_off] = payload;\n    }\n}\n\nvoid HASwitch::setPayloadOn (int payload) {\n    (*entityConfig)[ha_payload_on].set<int> (payload);\n}\n\nvoid HASwitch::setPayloadOff (int payload) {\n    (*entityConfig)[ha_payload_off].set<int> (payload);\n}\n\nvoid HASwitch::setStateOn (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_state_on] = payload;\n    }\n}\n\nvoid HASwitch::setStateOff (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_state_off] = payload;\n    }\n}\n\nvoid HASwitch::setStateOn (int payload) {\n    (*entityConfig)[ha_state_on].set<int> (payload);\n}\n\nvoid HASwitch::setStateOff (int payload) {\n    (*entityConfig)[ha_state_off].set<int>(payload);\n}\n\nvoid HASwitch::setValueField (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_value_key] = payload;\n    }\n}\n\n/* Discovery JSON template for binary sensor\n{\n    \"nmsfx\":<name_suffix>,\n    \"pl_on\":<cmd_payload_on>,\n    \"pl_off\":<cmd_payload_off>,\n    \"stat_on\":<state_on>,\n    \"stat_off\":<state_off>,\n    \"val\":<value_field>\n}\n\n{\n    \"name\":\"<node_name>_<name_suffix>\",\n    \"unique_id\":\"<node_name>_<name_suffix>\",\n    \"command_topic\":\"<network_name>/<node_name>/set/data\"\n    \"payload_off\":\"<cmd_payload_on>\",\n    \"payload_on\":\"<cmd_payload_off>\"\n    \"state_topic\":\"<network_name>/<node_name>/data\",\n    \"state_off\":\"<state_off>\",\n    \"state_on\":\"<state_on>\",\n    \"value_template\":\"{{value_json.<value_field>}}\"\n    \"json_attributes_template\":\"{{value_json | tojson}}\",\n    \"json_attributes_topic\":\"<network_name>/<node_name>/data\",\n}\n*/\n\nsize_t HASwitch::getDiscoveryJson (char* buffer, size_t buflen, const char* nodeName, const char* networkName, DynamicJsonDocument* inputJSON) {\n    //DynamicJsonDocument inputJSON (1024);\n    DynamicJsonDocument outputJSON (1024);\n\n    //deserializeMsgPack (inputJSON, msgPack, len);\n\n    if (!nodeName || !networkName || !inputJSON /*!msgPack || !len*/) {\n        DEBUG_WARN (\"Whrong parameters\");\n        return 0;\n    }\n\n    if (inputJSON->containsKey (ha_name_sufix)) {\n        outputJSON[\"name\"] = String (nodeName) + \"_\" + (*inputJSON)[ha_name_sufix].as<String> ();\n    } else {\n        outputJSON[\"name\"] = nodeName;    \n    }\n    if (inputJSON->containsKey (ha_name_sufix)) {\n        outputJSON[\"unique_id\"] = String (nodeName) + \"_\" + (*inputJSON)[ha_name_sufix].as<String> ();\n    } else {\n        outputJSON[\"unique_id\"] = nodeName;\n    }\n    outputJSON[\"command_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/set/data\";\n    if (inputJSON->containsKey (ha_payload_on)) {\n        outputJSON[\"payload_on\"] = (*inputJSON)[ha_payload_on];\n    }\n    if (inputJSON->containsKey (ha_payload_off)) {\n        outputJSON[\"payload_off\"] = (*inputJSON)[ha_payload_off];\n    }\n    outputJSON[\"state_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n    if (inputJSON->containsKey (ha_state_on)) {\n        outputJSON[\"state_on\"] = (*inputJSON)[ha_state_on];\n    }\n    if (inputJSON->containsKey (ha_state_off)) {\n        outputJSON[\"state_off\"] = (*inputJSON)[ha_state_off];\n    } \n    if (inputJSON->containsKey (ha_value_key) && (*inputJSON)[ha_value_key].is<String> ()) {\n        outputJSON[\"value_template\"] = String (\"{{value_json.\") + (*inputJSON)[ha_value_key].as<String> () + String (\"}}\");\n    }\n    if (inputJSON->containsKey (ha_allow_attrib) && (*inputJSON)[ha_allow_attrib].as<bool> ()) {\n        outputJSON[\"json_attributes_topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n        outputJSON[\"json_attributes_template\"] = \"{{value_json | tojson}}\";\n    }\n    \n    size_t jsonLen = measureJson (outputJSON);\n\n    if (jsonLen > buflen) {\n        DEBUG_WARN (\"Too small buffer. Required %u Has %u\", jsonLen, buflen);\n        return 0;\n    }\n\n    //buffer[jsonLen - 1] = '\\0';\n    serializeJson (outputJSON, buffer, 1024);\n\n    return jsonLen;\n}\n\n#endif // SUPPORT_HA_DISCOVERY\n"
  },
  {
    "path": "src/haSwitch.h",
    "content": "/**\n  * @file haSwitch.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Home Assistant switch integration\n  */\n\n#ifndef _SWITCH_h\n#define _SWITCH_h\n\n#include \"haEntity.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\n/**\n * The mqtt switch platform lets you control your MQTT enabled switches. In an ideal scenario, the MQTT device will have a state_topic to publish state changes.\n * If these messages are published with a RETAIN flag, the MQTT switch will receive an instant state update after subscription, and will start with the correct state.\n * Otherwise, the initial state of the switch will be false / off.\n *\n * When a state_topic is not available, the switch will work in optimistic mode. In this mode, the switch will immediately change state after every command.\n * Otherwise, the switch will wait for state confirmation from the device (message from state_topic).\n *\n * Optimistic mode can be forced, even if the state_topic is available. Try to enable it, if experiencing incorrect switch operation.\n *\n * https://www.home-assistant.io/integrations/switch.mqtt/\n *\n * An example of switch discovery message may be like this:\n *\n * Topic:\n *    homeassistant/switch/lights_switch/config\n *\n * Payload:\n *\n * {\n *    \"name\":\"light_switch\",                        // string (optional) The name of the device\n *    \"unique_id\":\"light_switch\",                   // string (optional) An ID that uniquely identifies this switch device. If two switches have the same unique ID,\n *                                                  //   Home Assistant will raise an exception\n *    \"command_topic\":\"EnigmaIOT/light/set/data\",   //  string (optional) The MQTT topic to publish commands to change the switch state\n *    \"payload_off\":\"{\\\"cmd\\\":\\\"swi\\\",\\\"swi\\\":0}\",  // string (optional, default: OFF) The payload that represents off state. If specified, will be used for both\n *                                                  //   comparing to the value in the state_topic (see value_template and state_off for details) and sending as off command to the command_topic\n *    \"payload_on\":\"{\\\"cmd\\\":\\\"swi\\\",\\\"swi\\\":1}\",   // string (optional, default: ON) The payload that represents on state. If specified, will be used for both comparing to the value in the\n *                                                  //   state_topic (see value_template and state_on for details) and sending as on command to the command_topic\n *    \"state_topic\":\"EnigmaIOT/light/data\",         // string (optional) The MQTT topic subscribed to receive state updates\n *    \"state_off\":0,                                // string (optional) The payload that represents the off state. Used when value that represents off state in the state_topic is different\n *                                                  //   from value that should be sent to the command_topic to turn the device off. Default: payload_off if defined, else OFF\n *    \"state_on\":1,                                 // string (optional) The payload that represents the on state. Used when value that represents on state in the state_topic is different\n *                                                  //   from value that should be sent to the command_topic to turn the device on. Default: payload_on if defined, else ON\n *    \"value_template\":\"{{value_json.swi}}\"         // string (optional) Defines a template to extract device’s state from the state_topic. To determine the switches’s state result of this\n *                                                  //   template will be compared to state_on and state_off\n *    \"json_attributes_template\":\"{{value_json | tojson}}\",  // template (optional) Defines a template to extract the JSON dictionary from messages received on the json_attributes_topic.\n *                                                           //   Usage example can be found in MQTT sensor documentation\n *    \"json_attributes_topic\":\"EnigmaIOT/light/data\",        // string (optional) The MQTT topic subscribed to receive a JSON dictionary payload and then set as sensor attributes.\n *                                                           //   Usage example can be found in MQTT sensor documentation\n * }\n *\n * Template message for switch is this\n *\n *  Topic:\n *    homeassistant/switch/<node_name>_<name_suffix>/config\n *\n * Payload\n *\n * ```\n *  {\n *    \"name\":\"<node_name>_<name_suffix>\",\n *    \"unique_id\":\"<node_name>_<name_suffix>\",\n *    \"command_topic\":\"<network_name>/<node_name>/set/data\"\n *    \"payload_off\":\"<cmd_payload_on>\",\n *    \"payload_on\":\"<cmd_payload_off>\"\n *    \"state_topic\":\"<network_name>/<node_name>/data\",\n *    \"state_off\":\"<state_off>\",\n *    \"state_on\":\"<state_on>\",\n *    \"value_template\":\"{{value_json.<value_field>}}\"\n *    \"json_attributes_template\":\"{{value_json | tojson}}\",\n *    \"json_attributes_topic\":\"<network_name>/<node_name>/data\",\n * }\n * ```\n *\n * Message to gateway is like following\n *\n * ```\n * {\n *    \"nmsfx\":<name_suffix>,\n *    \"pl_on\":<cmd_payload_on>,\n *    \"pl_off\":<cmd_payload_off>,\n *    \"stat_on\":<state_on>,\n *    \"stat_off\":<state_off>,\n *    \"val\":<value_field>\n * }\n * ```\n */\n\nclass HASwitch : public HAEntity {\n\npublic:\n    /**\n     * @brief Switch constructor\n     */\n    HASwitch () {\n        capacity = JSON_OBJECT_SIZE (10) + 250;\n        entityConfig = new DynamicJsonDocument (capacity);\n        deviceType = SWITCH;\n        (*entityConfig)[ha_device_type] = deviceType;\n    };\n\n    /**\n     * @brief The payload that represents on state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_on for details) and sending as on command to the command_topic\n     *          https://www.home-assistant.io/integrations/switch.mqtt/#payload_on\n     * @param payload ON state string\n     */\n    void setPayloadOn (const char* payload);\n\n    /**\n     * @brief The payload that represents off state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_off for details) and sending as on command to the command_topic\n     *          https://www.home-assistant.io/integrations/switch.mqtt/#payload_off\n     * @param payload ON state string\n     */\n    void setPayloadOff (const char* payload);\n\n    /**\n     * @brief The payload that represents on state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_on for details) and sending as on command to the command_topic\n     *          https://www.home-assistant.io/integrations/switch.mqtt/#payload_on\n     * @param payload ON state integer\n     */\n    void setPayloadOn (int payload);\n\n    /**\n     * @brief The payload that represents off state. If specified, will be used for both comparing to the value in the state_topic (see value_template and state_off for details) and sending as on command to the command_topic\n     *          https://www.home-assistant.io/integrations/switch.mqtt/#payload_off\n     * @param payload ON state string\n     */\n    void setPayloadOff (int payload);\n\n    /**\n     * @brief The payload that represents the on state. Used when value that represents on state in the state_topic is different from value that should be sent to the command_topic to turn the device on\n     *          https://www.home-assistant.io/integrations/switch.mqtt/#state_on\n     * @param payload ON state integer\n     */\n    void setStateOn (const char* payload);\n\n    /**\n     * @brief The payload that represents the off state. Used when value that represents off state in the state_topic is different from value that should be sent to the command_topic to turn the device off\n     *          https://www.home-assistant.io/integrations/switch.mqtt/#state_off\n     * @param payload ON state integer\n     */\n    void setStateOff (const char* payload);\n\n    /**\n     * @brief The payload that represents the on state. Used when value that represents on state in the state_topic is different from value that should be sent to the command_topic to turn the device on\n     *          https://www.home-assistant.io/integrations/switch.mqtt/#state_on\n     * @param payload ON state integer\n     */\n    void setStateOn (int payload);\n\n    /**\n     * @brief The payload that represents the off state. Used when value that represents off state in the state_topic is different from value that should be sent to the command_topic to turn the device off\n     *          https://www.home-assistant.io/integrations/switch.mqtt/#state_off\n     * @param payload ON state integer\n     */\n    void setStateOff (int payload);\n\n    /**\n     * @brief Defines a json key to extract device’s state from the state_topic. To determine the switches’s state result of this template will be compared to state_on and state_off\n     *          https://www.home-assistant.io/integrations/switch.mqtt/#value_template\n     * @param payload ON state value\n     */\n    void setValueField (const char* payload);\n\n    /**\n     * @brief Allows Gateway to get Home Assistant discovery message using Switch template\n     * @param buffer Buffer to hold message string\n     * @param buflen Buffer size\n     * @param nodeName Originating node name\n     * @param networkName EnigmaIOT network name\n     * @param inputJSON JSON object sent by node with needed data to fill template in\n     * @return Discovery message payload\n     */\n    static size_t getDiscoveryJson (char* buffer, size_t buflen, const char* nodeName, const char* networkName, DynamicJsonDocument* inputJSON);\n\n};\n\n#endif // SUPPORT_HA_DISCOVERY\n\n#endif // _SWITCH_h"
  },
  {
    "path": "src/haTrigger.cpp",
    "content": "/**\n  * @file haTrigger.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Home Assistant trigger integration\n  */\n  \n  #include \"haTrigger.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\nvoid HATrigger::setPayload (const char* payload) {\n    if (payload) {\n        (*entityConfig)[ha_payload] = payload;\n    }\n}\n\n/* Discovery JSON template for trigger\n{\n    \"pl\":<payload_value>,\n    \"type\":<type>,\n    \"stype\":<subtype>\n}\n\n{\n    \"automation_type\":\"trigger\",\n    \"topic\":\"<network_name>/<node_name>/data\",\n    \"payload\":<payload_value>,\n    \"type\":<type>,\n    \"subtype\":<subtype>,\n    \"device\":{\n        \"name\":<node_name>_<type>_<subtype>,\n        \"identifiers\":<node_name>_<type>_<subtype>\n    }\n}\n*/\n\nsize_t HATrigger::getDiscoveryJson (char* buffer, size_t buflen, const char* nodeName, const char* networkName, DynamicJsonDocument* inputJSON) {\n    //DynamicJsonDocument inputJSON (1024);\n    DynamicJsonDocument outputJSON (1024);\n    String type;\n    String subtype;\n\n    //deserializeMsgPack (inputJSON, msgPack, len);\n\n    if (!nodeName || !networkName || !inputJSON || !buffer/*!msgPack || !len*/) {\n        DEBUG_WARN (\"Whrong parameters\");\n        return 0;\n    }\n\n    outputJSON[\"automation_type\"] = \"trigger\";\n    outputJSON[\"topic\"] = String (networkName) + \"/\" + String (nodeName) + \"/data\";\n    \n    if (inputJSON->containsKey (ha_payload)) {\n        outputJSON[\"payload\"] = (*inputJSON)[ha_payload].as<String> ();\n    } \n    if (inputJSON->containsKey (ha_type)) {\n        if ((*inputJSON)[ha_type].is<int> ()) {\n            type = getTriggerTypeStr ((*inputJSON)[ha_type].as<int> ());\n            outputJSON[\"type\"] = type;\n        } else {\n            type = (*inputJSON)[ha_type].as<String>();\n            outputJSON[\"type\"] = type;        \n        }\n    }\n    if (inputJSON->containsKey (ha_subtype)) {\n        if ((*inputJSON)[ha_subtype].is<int> ()) {\n            subtype = getTriggerSubtypeStr ((*inputJSON)[ha_subtype].as<int> ());\n            outputJSON[\"subtype\"] = subtype;\n        } else {\n            subtype = (*inputJSON)[ha_subtype].as<String> ();\n            outputJSON[\"subtype\"] = subtype;\n        }\n    }\n\n    JsonObject device = outputJSON.createNestedObject (\"device\");\n    device[\"name\"] = String (nodeName) + (type != \"\" ? (\"_\" + type) : \"\") + (subtype != \"\" ? (\"_\" + subtype) : \"\");\n    device[\"identifiers\"] = device[\"name\"];\n    \n    size_t jsonLen = measureJson (outputJSON);\n\n    if (jsonLen > buflen) {\n        DEBUG_WARN (\"Too small buffer. Required %u Has %u\", jsonLen, buflen);\n        return 0;\n    }\n\n    //buffer[jsonLen - 1] = '\\0';\n    serializeJson (outputJSON, buffer, buflen);\n\n    return jsonLen;\n}\n\n#endif // SUPPORT_HA_DISCOVERY\n"
  },
  {
    "path": "src/haTrigger.h",
    "content": "/**\n  * @file haTrigger.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Home Assistant trigger integration\n  */\n\n\n#ifndef _HA_TRIGGER_h\n#define _HA_TRIGGER_h\n\n#include \"haEntity.h\"\n\n#if SUPPORT_HA_DISCOVERY\n\n/**\n * The mqtt device trigger platform uses an MQTT message payload to generate device trigger events. An MQTT device trigger is a better option than a binary sensor\n *   for buttons, remote controls etc.\n *\n *   MQTT device triggers are only supported through MQTT discovery, manual setup through configuration.yaml is not supported.\n *\n * https://www.home-assistant.io/integrations/device_trigger.mqtt/\n *\n * An example of trigger discovery message may be like this:\n *\n * Topic:\n *    homeassistant/device-trigger/button_button_short_press_button_1/config\n *\n * Payload:\n *\n * {\n *    \"automation_type\":\"trigger\",      // string REQUIRED The type of automation, must be ‘trigger’\n *    \"topic\":\"EnigmaTest/button/data\", // string REQUIRED The MQTT topic subscribed to receive trigger events\n *    \"payload\":\"{\\\"button\\\":1}\",       // string (optional) Optional payload to match the payload being sent over the topic\n *    \"type\":\"button_short_press\",      // string REQUIRED The type of the trigger, e.g. button_short_press.\n *                                      //   Entries supported by the frontend: button_short_press, button_short_release, button_long_press, button_long_release,\n *                                      //   button_double_press, button_triple_press, button_quadruple_press, button_quintuple_press.\n *                                      //   If set to an unsupported value, will render as subtype type, e.g. First button spammed with type set to spammed and subtype set to button_1\n *    \"subtype\":\"button_1\",             // string REQUIRED The subtype of the trigger, e.g. button_1. \n *                                      //   Entries supported by the frontend: turn_on, turn_off, button_1, button_2, button_3, button_4, button_5, button_6.\n *                                      //   If set to an unsupported value, will render as subtype type, e.g. left_button pressed with type set to button_short_press and subtype set to left_button\n *    \"device\":{                        // Information about the device this device trigger is a part of to tie it into the device registry\n *        \"name\":\"button\",              // string (optional) The name of the device\n *        \"identifiers\":\"button\"        // list | string (optional) A list of IDs that uniquely identify the device. For example a serial number\n *    }\n * }\n *\n * Template message for switch is this\n *\n *  Topic:\n *    homeassistant/device-trigger/<node_name>_<type>_<subtype>/config\n *\n * Payload\n *\n * ```\n *  {\n *     \"automation_type\":\"trigger\",\n *     \"topic\":\"<network_name>/<node_name>/data\",\n *     \"payload\":<payload_value>,\n *     \"type\":<type>,\n *     \"subtype\":<subtype>,\n *     \"device\":{\n *         \"name\":<node_name>_<type>_<subtype>,\n *         \"identifiers\":<node_name>_<type>_<subtype>\n *     }\n * }\n * ```\n *\n * Message to gateway is like following\n *\n * ```\n * {\n *    \"pl\":<payload_value>,\n *    \"type\":<type>,\n *    \"stype\":<subtype>\n * }\n * ```\n */\n\n\ntypedef enum {\n    button_short_press     = 0,\n    button_short_release   = 1,\n    button_long_press      = 2, \n    button_long_release    = 3,\n    button_double_press    = 4,\n    button_triple_press    = 5,\n    button_quadruple_press = 6,\n    button_quintuple_press = 7\n} ha_triggerType_t;\n\nstatic const char* ha_triggerTypeStr[] = {\n    \"button_short_press\",\n    \"button_short_release\",\n    \"button_long_press\",\n    \"button_long_release\",\n    \"button_double_press\",\n    \"button_triple_press\",\n    \"button_quadruple_press\",\n    \"button_quintuple_press\"\n};\n\ntypedef enum {\n    turn_on  = 0,\n    turn_off = 1,\n    button_1 = 2,\n    button_2 = 3,\n    button_3 = 4,\n    button_4 = 5,\n    button_5 = 6,\n    button_6 = 7\n} ha_triggerSubtype_t;\n\nstatic const char* ha_triggerSubtypeStr[] = {\n    \"turn_on\",\n    \"turn_off\",\n    \"button_1\",\n    \"button_2\",\n    \"button_3\",\n    \"button_4\",\n    \"button_5\",\n    \"button_6\"\n};\n\nclass HATrigger : public HAEntity {\n\npublic:\n    /**\n     * @brief Trigger constructor\n     */\n    HATrigger () {\n        capacity = JSON_OBJECT_SIZE (10) + 250;\n        entityConfig = new DynamicJsonDocument (capacity);\n        deviceType = DEVICE_TRIGGER;\n        (*entityConfig)[ha_device_type] = deviceType;\n    };\n\n\n    /**\n     * @brief Returns string that correspond with trigger type in ha_triggerType_t format\n     *          https://www.home-assistant.io/integrations/device_trigger.mqtt/#type\n     * @param type Trigger type\n     */\n    static const char* getTriggerTypeStr (int type) {\n        if (type >= button_short_press || type <= button_quintuple_press) {\n            return ha_triggerTypeStr[type];\n        } else {\n            return NULL;\n        }\n    }\n\n    /**\n     * @brief Returns string that correspond with trigger subtype in ha_triggerSubtype_t format\n     *          https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype\n     * @param subtype Trigger type\n     */\n    static const char* getTriggerSubtypeStr (int subtype) {\n        if (subtype >= turn_on || subtype <= button_6) {\n            return ha_triggerSubtypeStr[subtype];\n        } else {\n            return NULL;\n        }\n    }\n\n    /**\n     * @brief Optional payload to match the payload being sent over the topic\n     *          https://www.home-assistant.io/integrations/device_trigger.mqtt/#payload\n     * @param payload Payload string\n     */\n    void setPayload (const char* payload);\n\n    /**\n     * @brief Set trigger type as ha_triggerType_t\n     *          https://www.home-assistant.io/integrations/device_trigger.mqtt/#type\n     * @param type Payload string\n     */\n    void setType (ha_triggerType_t type) {\n        (*entityConfig)[ha_type] = type;\n    }\n    \n    /**\n     * @brief Set trigger type as char string\n     *          https://www.home-assistant.io/integrations/device_trigger.mqtt/#type\n     * @param type Payload string\n     */\n    void setType (const char* type) {\n        (*entityConfig)[ha_type] = type;\n    }\n\n    /**\n     * @brief Set trigger subtype as ha_triggerSubtype_t\n     *          https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype\n     * @param subtype Payload string\n     */\n    void setSubtype (ha_triggerSubtype_t subtype) {\n        (*entityConfig)[ha_subtype] = subtype;\n    }\n\n    /**\n     * @brief Set trigger subtype as char string\n     *          https://www.home-assistant.io/integrations/device_trigger.mqtt/#subtype\n     * @param subtype Payload string\n     */\n    void setSubtype (const char* subtype) {\n        (*entityConfig)[ha_subtype] = subtype;\n    }\n\n    /**\n     * @brief Allows Gateway to get Home Assistant discovery message using Trigger template\n     * @param buffer Buffer to hold message string\n     * @param buflen Buffer size\n     * @param nodeName Originating node name\n     * @param networkName EnigmaIOT network name\n     * @param inputJSON JSON object sent by node with needed data to fill template in\n     * @return Discovery message payload\n     */\n    static size_t getDiscoveryJson (char* buffer, size_t buflen, const char* nodeName, const char* networkName, DynamicJsonDocument* inputJSON);\n\n};\n\n#endif // SUPPORT_HA_DISCOVERY\n\n#endif // _HA_TRIGGER_h"
  },
  {
    "path": "src/helperFunctions.cpp",
    "content": "/**\n  * @file helperFunctions.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Auxiliary function definition\n  */\n\n#include \"helperFunctions.h\"\n#ifdef ESP32\n#include <esp_wifi.h>\n#endif\n\n#define MAX_STR_LEN 1000 ///< @brief Key length used by selected crypto algorythm\n\nchar* printHexBuffer (const uint8_t* buffer, uint16_t len) {\n\tstatic char tempStr[MAX_STR_LEN];\n\tint charIndex = 0;\n\n\tmemset (tempStr, 0, MAX_STR_LEN);\n\n\tif (buffer) {\n\t\tfor (int i = 0; i < len; i++) {\n\t\t\tif (charIndex < MAX_STR_LEN - 2) {\n\t\t\t\tcharIndex += sprintf (tempStr + charIndex, \"%02X \", buffer[i]);\n\t\t\t}\n\t\t}\n\t}\n\treturn tempStr;\n}\n\nvoid initWiFi (uint8_t channel, const char* networkName, const char* networkKey, uint8_t role) {\n\tDEBUG_DBG (\"initWifi\");\n\tif (role == 0) { // Node\n\t\tWiFi.mode (WIFI_STA);\n#ifdef ESP32\n\t\tesp_err_t err_ok;\n\t\tif ((err_ok = esp_wifi_set_promiscuous (true))) {\n\t\t\tDEBUG_ERROR (\"Error setting promiscuous mode: %s\", esp_err_to_name (err_ok));\n\t\t}\n\t\tif ((err_ok = esp_wifi_set_channel (channel, WIFI_SECOND_CHAN_NONE))) {\n\t\t\tDEBUG_ERROR (\"Error setting wifi channel: %s\", esp_err_to_name (err_ok));\n\t\t}\n\t\tif ((err_ok = esp_wifi_set_promiscuous (false))) {\n\t\t\tDEBUG_ERROR (\"Error setting promiscuous mode off: %s\", esp_err_to_name (err_ok));\n\t\t}\n#endif\n\t\tWiFi.disconnect ();\n#ifdef ESP8266\n\t\twifi_set_channel (channel);\n#endif\n\t\tDEBUG_DBG (\"Mode set to STA. Channel %u\", channel);\n\t} else { // Gateway\n\t\tWiFi.mode (WIFI_AP);\n\t\tWiFi.softAP (networkName, networkKey, channel);\n\t\tDEBUG_DBG (\"Mode set to AP in channel %u\", channel);\n#ifdef ESP32\n        esp_err_t err_ok;\n        if ((err_ok = esp_wifi_set_bandwidth (WIFI_IF_AP, WIFI_BW_HT20))) {\n            DEBUG_ERROR (\"Error setting wifi bandwidth: %s\", esp_err_to_name (err_ok));\n        }\n#endif\n\t}\n\n\tDEBUG_INFO (\"AP MAC address of this device is %s\", WiFi.softAPmacAddress ().c_str ());\n\tDEBUG_INFO (\"STA MAC address of this device is %s\", WiFi.macAddress ().c_str ());\n\n}\n\nuint32_t calculateCRC32 (const uint8_t* data, size_t length) {\n\tuint32_t crc = 0xffffffff;\n\twhile (length--) {\n\t\tuint8_t c = *data++;\n\t\tfor (uint32_t i = 0x80; i > 0; i >>= 1) {\n\t\t\tbool bit = crc & 0x80000000;\n\t\t\tif (c & i) {\n\t\t\t\tbit = !bit;\n\t\t\t}\n\t\t\tcrc <<= 1;\n\t\t\tif (bit) {\n\t\t\t\tcrc ^= 0x04c11db7;\n\t\t\t}\n\t\t}\n\t}\n\treturn crc;\n}\n\n#undef MACSTR\n#define MACSTR \"%02X:%02X:%02X:%02X:%02X:%02X\"\n\nchar* mac2str (const uint8_t* mac, char* extBuffer) {\n    char* buffer;\n    static char staticBuffer[ENIGMAIOT_ADDR_LEN * 3];\n    \n    if (!extBuffer){\n        buffer = staticBuffer;\n    } else {\n        buffer = extBuffer;\n    }\n    \n\tif (mac && buffer) {\n\t\t//DEBUG_DBG (\"mac2str %02x:%02x:%02x:%02x:%02x:%02x\",mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);\n\t\tsnprintf (buffer, ENIGMAIOT_ADDR_LEN * 3, MACSTR, MAC2STR (mac));\n\t\t//DEBUG_DBG (\"Address: %s\", buffer);\n\t\treturn buffer;\n\t}\n\treturn NULL;\n}\n\nuint8_t* str2mac (const char* macAddrString, uint8_t* macBytes) {\n\tconst char cSep = ':';\n\n\tif (!macBytes) {\n\t\treturn NULL;\n\t}\n\n\tfor (int i = 0; i < 6; ++i) {\n\t\tunsigned int iNumber = 0;\n\t\tchar ch;\n\n\t\t//Convert letter into lower case.\n\t\tch = tolower (*macAddrString++);\n\n\t\tif ((ch < '0' || ch > '9') && (ch < 'a' || ch > 'f')) {\n\t\t\treturn NULL;\n\t\t}\n\n\t\t//Convert into number. \n\t\t//  a. If character is digit then ch - '0'\n\t\t//\tb. else (ch - 'a' + 10) it is done \n\t\t//\t      because addition of 10 takes correct value.\n\t\tiNumber = isdigit (ch) ? (ch - '0') : (ch - 'a' + 10);\n\t\tch = tolower (*macAddrString);\n\n\t\tif ((i < 5 && ch != cSep) ||\n\t\t\t(i == 5 && ch != '\\0' && !isspace (ch))) {\n\t\t\t++macAddrString;\n\n\t\t\tif ((ch < '0' || ch > '9') && (ch < 'a' || ch > 'f')) {\n\t\t\t\treturn NULL;\n\t\t\t}\n\n\t\t\tiNumber <<= 4;\n\t\t\tiNumber += isdigit (ch) ? (ch - '0') : (ch - 'a' + 10);\n\t\t\tch = *macAddrString;\n\n\t\t\tif (i < 5 && ch != cSep) {\n\t\t\t\treturn NULL;\n\t\t\t}\n\t\t}\n\t\t/* Store result.  */\n\t\tmacBytes[i] = (unsigned char)iNumber;\n\t\t/* Skip cSep.  */\n\t\t++macAddrString;\n\t}\n\treturn macBytes;\n}\n\n#ifdef ESP8266\nconst char* IRAM_ATTR extractFileName (const char* path) {\n\tsize_t i = 0;\n\tsize_t pos = 0;\n\tchar* p = (char*)path;\n\twhile (*p) {\n\t\ti++;\n\t\tif (*p == '/' || *p == '\\\\') {\n\t\t\tpos = i;\n\t\t}\n\t\tp++;\n\t}\n\treturn path + pos;\n}\n#endif\n\nbool isNumber (const char* input) {\n\tunsigned int index = 0;\n\tsize_t len = strlen (input);\n\n\tif (!len) {\n\t\treturn false;\n\t}\n\n\twhile (index < len) {\n\t\tif (!isDigit (input[index])) {\n\t\t\treturn false;\n\t\t}\n\t\tindex++;\n\t}\n\treturn true;\n}\n\nbool isNumber (const char* input, size_t len) {\n\tunsigned int index = 0;\n\n\tif (!len) {\n\t\treturn false;\n\t}\n\n\twhile (input[index] != '\\0' && index < len) {\n\t\tif (!isDigit (input[index])) {\n\t\t\treturn false;\n\t\t}\n\t\tindex++;\n\t}\n\treturn true;\n}\n\nbool isNumber (String input) {\n\tunsigned int index = 0;\n\tsize_t len = input.length ();\n\n\tif (!len) {\n\t\treturn false;\n\t}\n\n\twhile (index < len) {\n\t\tif (!isDigit (input[index])) {\n\t\t\treturn false;\n\t\t}\n\t\tindex++;\n\t}\n\treturn true;\n}\n\n//int str2mac (const char* mac, uint8_t* values) {\n//\tint error = std::sscanf (mac, \"%02x:%02x:%02x:%02x:%02x:%02x\", &values[0], &values[1], &values[2], &values[3], &values[4], &values[5]);\n//\tSerial.printf (\"Error: %d\", error);\n//\tif (error == 6) {\n//\t\tfor (int i = 0; i < 6; i++) {\n//\t\t\tSerial.println (values[i]);\n//\t\t}\n//\t\treturn 1;\n//\t}\n//\telse {\n//\t\treturn 0;\n//\t}\n//}\n"
  },
  {
    "path": "src/helperFunctions.h",
    "content": "/**\n  * @file helperFunctions.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Auxiliary function definition\n  */\n\n#ifndef _HELPERFUNCTIONS_h\n#define _HELPERFUNCTIONS_h\n\n\n#if defined(ARDUINO) && ARDUINO >= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n#if defined(ESP8266)\n#include <ESP8266WiFi.h>\n#elif defined(ESP32)\n#include <WiFi.h>\n#endif\n#include \"EnigmaIoTconfig.h\"\n#include \"EnigmaIOTdebug.h\"\n\n  /**\n  * @brief Debug helper function that generates a string that represent a buffer hexadecimal values\n  * @param buffer Pointer to the buffer\n  * @param len Buffer length in number of bytes\n  * @return Returns a pointer to the generated string.\n  *\n  * String has to be used inmediatelly. At least before calling `printHexBuffer()` again as it uses a static buffer to hold string.\n  * It will be overwritten on next call.\n  */\nchar* printHexBuffer (const uint8_t* buffer, uint16_t len);\n\n/**\n  * @brief Debug helper function that generates a string that represent a MAC address\n  * @param mac Pointer to the MAC address\n  * @param extBuffer Buffer that will store resulting address. It must be 18 bytes long at least. If it is NULL a static buffer will be used\n  * @return Returns a pointer to input buffer after writting MAC address on human readable format\n  */\nchar* mac2str (const uint8_t* mac, char* extBuffer = NULL);\n\n/**\n  * @brief Debug helper function that creates MAC address byte array from text representation\n  * @param mac Pointer to the MAC address string\n  * @param values Buffer that will store byte array. It must be 6 bytes long at least\n  * @return Returns a pointer to `values` input buffer after writting MAC address\n  */\nuint8_t* str2mac (const char* mac, uint8_t* values);\n\n/**\n  * @brief Initalizes WiFi interfaces on ESP8266 or ESP32\n  * @param channel WiFi channel for interface initialization\n  * @param role 0 for node, 1 for gateway\n  * @param networkName Name that gateway AP will take\n  * @param networkKey Network key. This is not required normally as this is provided using configuration web portal\n  */\nvoid initWiFi (uint8_t channel, const char* networkName, const char* networkKey = NULL, uint8_t role = 0);\n\n/**\n  * @brief Calculates CRC32 of a buffer\n  * @param data Input buffer\n  * @param length Input length\n  * @return CRC32 value\n  */\nuint32_t calculateCRC32 (const uint8_t* data, size_t length);\n\n/**\n  * @brief Checks if input string is numeric\n  * @param input String to check\n  * @return `true` if string is a number\n  */\nbool isNumber (const char* input);\n\n/**\n  * @brief Checks if input string is numeric\n  * @param input String to check\n  * @param len String length\n  * @return `true` if string is a number\n  */\nbool isNumber (const char* input, size_t len);\n\n/**\n  * @brief Checks if input string is numeric\n  * @param input String to check\n  * @return `true` if string is a number\n  */\nbool isNumber (String input);\n\n#endif\n\n"
  },
  {
    "path": "src/timeManager.cpp",
    "content": "/**\n  * @file timeManager.cpp\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Clock synchronisation calculations\n  */\n\n#include \"timeManager.h\"\n#include \"EnigmaIOTdebug.h\"\n\nint64_t TimeManagerClass::clock () {\n    timeval currentime;\n    \n    gettimeofday (&currentime, NULL);\n    int64_t clk = currentime.tv_sec;\n    clk *= 1000000L;\n    clk += currentime.tv_usec;\n    // DEBUG_DBG (\"Clock: %lld\", clk/1000L);\n    return clk/1000L;\n}\n\nint64_t TimeManagerClass::clock_us () {\n    timeval currentime;\n\n    gettimeofday (&currentime, NULL);\n    int64_t clk = currentime.tv_sec;\n    clk *= 1000000L;\n    clk += currentime.tv_usec;\n    // DEBUG_DBG (\"Clock: %lld\", clk);\n    return clk;\n}\n\nint64_t TimeManagerClass::adjustTime (int64_t t1r, int64_t t2r, int64_t t3r, int64_t t4r) {\n\tint64_t t1 = t1r;\n\tint64_t t2 = t2r;\n\tint64_t t3 = t3r;\n\tint64_t t4 = t4r;\n    timeval currenttime;\n    int64_t currenttime_us;\n    timeval newtime;\n    int64_t newtime_us;\n\n\tDEBUG_DBG (\"T1: %lld, T2: %lld, T3: %lld, T4: %lld\", t1, t2, t3, t4);\n\toffset = ((t2 - t1) + (t3 - t4)) / 2L;\n    DEBUG_DBG (\"New offset: %lld\", offset);\n\troundTripDelay = (t4 - t1) - (t3 - t2);\n    DEBUG_DBG (\"Round trip delay: %lld\", roundTripDelay);\n    \n    gettimeofday (&currenttime, NULL);\n    currenttime_us = (int64_t)currenttime.tv_sec * 1000000LL + (int64_t)currenttime.tv_usec;\n    newtime_us = currenttime_us + offset;\n    newtime.tv_sec = newtime_us / 1000000LL;\n    newtime.tv_usec = newtime_us - ((int64_t)(newtime.tv_sec) * 1000000LL);\n    \n    settimeofday (&newtime, NULL); // hard adjustment\n\n\ttimeIsAdjusted = true;\n\n    return offset;\n}\n\n\n\nTimeManagerClass TimeManager;\n\n"
  },
  {
    "path": "src/timeManager.h",
    "content": "/**\n  * @file timeManager.h\n  * @version 0.9.8\n  * @date 15/07/2021\n  * @author German Martin\n  * @brief Clock synchronisation calculations\n  */\n\n#ifndef _TIMEMANAGER_h\n#define _TIMEMANAGER_h\n\n#include <Arduino.h>\n#include \"sys/time.h\"\n\nclass TimeManagerClass {\nprotected:\n    bool timeIsAdjusted = false; ///< @brief Indicates if time has been synchronized\n    int64_t offset = 0; ///< @brief Offet between node `millis()` and gateway time\n    int64_t roundTripDelay; ///< @brief Propagation delay between Node and Gateway\n\npublic:\n    /**\n      * @brief Gets local clock.\n      * @return Clock value in milliseconds\n      */\n    int64_t clock ();\n    \n    /**\n      * @brief Gets local clock.\n      * @return Clock value in microseconds\n      */\n    int64_t clock_us ();\n\n\n    /**\n      * @brief Gets local clock in seconds. It returns `millis() / 1000` if not synchronized, local clock otherwise.\n      *         This may contain current realtime clock if Gateway is synchronized using NTP time.\n      * @return Clock value in seconds. It uses UnixTime format\n      */\n    time_t unixtime () {\n        uint64_t time_sec = clock () / 1000L;\n        return time_sec;\n    }\n\n     /**\n      * @brief Gets delay between Gateway time and local clock and adjust local clock accordingly. It uses same procedure as SNTP protocol.\n      * @param t1r T1\n      * @param t2r T2\n      * @param t3r T3\n      * @param t4r T4\n      * @return Clock value in seconds. It uses UnixTime format\n      */\n    int64_t adjustTime (int64_t t1r, int64_t t2r, int64_t t3r, int64_t t4r);\n\n    /**\n      * @brief Gets current offset to calculate clock, in milliseconds.\n      * @return Offset value in ms\n      */\n    int64_t getOffset () {\n        return offset;\n    }\n\n    /**\n      * @brief Gets synchronization status\n      * @return `True` if clock is synchronized\n      */\n    bool isTimeAdjusted () {\n        return timeIsAdjusted;\n    }\n\n    /**\n      * @brief Gets propagation + processing delay between Node and Gateway in milliseconds.\n      * @return Delay value in ms\n      */\n    int64_t getDelay () {\n        return roundTripDelay;\n    }\n\n    /**\n      * @brief Resets clock synchronization and sets values to initial status\n      */\n\tvoid reset () {\n\t\toffset = 0;\n\t\ttimeIsAdjusted = false;\n\t}\n};\n\nextern TimeManagerClass TimeManager;\n\n#endif\n\n"
  }
]